class Flipper::Adapters::Memory

Public: Adapter for storing everything in memory (ie: Hash). Useful for tests/specs.

Constants

FeaturesKey

Attributes

name[R]

Public: The name of the adapter.

Public Class Methods

new(source = nil) click to toggle source

Public

# File lib/flipper/adapters/memory.rb, line 16
def initialize(source = nil)
  @source = source || {}
  @name = :memory
end

Public Instance Methods

add(feature) click to toggle source

Public: Adds a feature to the set of known features.

# File lib/flipper/adapters/memory.rb, line 27
def add(feature)
  features.add(feature.key)
  true
end
clear(feature) click to toggle source

Public: Clears all the gate values for a feature.

# File lib/flipper/adapters/memory.rb, line 41
def clear(feature)
  feature.gates.each do |gate|
    delete key(feature, gate)
  end
  true
end
disable(feature, gate, thing) click to toggle source

Public

# File lib/flipper/adapters/memory.rb, line 80
def disable(feature, gate, thing)
  case gate.data_type
  when :boolean
    clear(feature)
  when :integer
    write key(feature, gate), thing.value.to_s
  when :set
    set_delete key(feature, gate), thing.value.to_s
  else
    raise "#{gate} is not supported by this adapter yet"
  end

  true
end
enable(feature, gate, thing) click to toggle source

Public

# File lib/flipper/adapters/memory.rb, line 66
def enable(feature, gate, thing)
  case gate.data_type
  when :boolean, :integer
    write key(feature, gate), thing.value.to_s
  when :set
    set_add key(feature, gate), thing.value.to_s
  else
    raise "#{gate} is not supported by this adapter yet"
  end

  true
end
features() click to toggle source

Public: The set of known features.

# File lib/flipper/adapters/memory.rb, line 22
def features
  read_feature_keys
end
get(feature) click to toggle source

Public

# File lib/flipper/adapters/memory.rb, line 49
def get(feature)
  read_feature(feature)
end
get_all() click to toggle source
# File lib/flipper/adapters/memory.rb, line 57
def get_all
  features = read_feature_keys.map do |key|
    Flipper::Feature.new(key, self)
  end

  read_many_features(features)
end
get_multi(features) click to toggle source
# File lib/flipper/adapters/memory.rb, line 53
def get_multi(features)
  read_many_features(features)
end
inspect() click to toggle source

Public

# File lib/flipper/adapters/memory.rb, line 96
def inspect
  attributes = [
    'name=:memory',
    "source=#{@source.inspect}",
  ]
  "#<#{self.class.name}:#{object_id} #{attributes.join(', ')}>"
end
remove(feature) click to toggle source

Public: Removes a feature from the set of known features and clears all the values for the feature.

# File lib/flipper/adapters/memory.rb, line 34
def remove(feature)
  features.delete(feature.name.to_s)
  clear(feature)
  true
end

Private Instance Methods

delete(key) click to toggle source

Private

# File lib/flipper/adapters/memory.rb, line 152
def delete(key)
  @source.delete(key.to_s)
end
ensure_set_initialized(key) click to toggle source

Private

# File lib/flipper/adapters/memory.rb, line 175
def ensure_set_initialized(key)
  @source[key.to_s] ||= Set.new
end
key(feature, gate) click to toggle source

Private

# File lib/flipper/adapters/memory.rb, line 111
def key(feature, gate)
  "feature/#{feature.key}/#{gate.key}"
end
read(key) click to toggle source

Private

# File lib/flipper/adapters/memory.rb, line 142
def read(key)
  @source[key.to_s]
end
read_feature(feature) click to toggle source
# File lib/flipper/adapters/memory.rb, line 123
def read_feature(feature)
  result = {}

  feature.gates.each do |gate|
    result[gate.key] =
      case gate.data_type
      when :boolean, :integer
        read key(feature, gate)
      when :set
        set_members key(feature, gate)
      else
        raise "#{gate} is not supported by this adapter yet"
      end
  end

  result
end
read_feature_keys() click to toggle source
# File lib/flipper/adapters/memory.rb, line 106
def read_feature_keys
  set_members(FeaturesKey)
end
read_many_features(features) click to toggle source
# File lib/flipper/adapters/memory.rb, line 115
def read_many_features(features)
  result = {}
  features.each do |feature|
    result[feature.key] = read_feature(feature)
  end
  result
end
set_add(key, value) click to toggle source

Private

# File lib/flipper/adapters/memory.rb, line 157
def set_add(key, value)
  ensure_set_initialized(key)
  @source[key.to_s].add(value.to_s)
end
set_delete(key, value) click to toggle source

Private

# File lib/flipper/adapters/memory.rb, line 163
def set_delete(key, value)
  ensure_set_initialized(key)
  @source[key.to_s].delete(value.to_s)
end
set_members(key) click to toggle source

Private

# File lib/flipper/adapters/memory.rb, line 169
def set_members(key)
  ensure_set_initialized(key)
  @source[key.to_s]
end
write(key, value) click to toggle source

Private

# File lib/flipper/adapters/memory.rb, line 147
def write(key, value)
  @source[key.to_s] = value.to_s
end