class Flippant::Adapter::Memory

Attributes

monitor[R]
table[R]

Public Class Methods

new() click to toggle source
# File lib/flippant/adapters/memory.rb, line 10
def initialize
  @monitor = Monitor.new

  clear
end

Public Instance Methods

add(feature) click to toggle source
# File lib/flippant/adapters/memory.rb, line 20
def add(feature)
  table[feature] ||= {}
end
breakdown(actor = nil) click to toggle source
# File lib/flippant/adapters/memory.rb, line 24
def breakdown(actor = nil)
  return table if actor.nil?

  table.each_with_object({}) do |(feature, _), memo|
    memo[feature] = enabled?(feature, actor)
  end
end
clear() click to toggle source
# File lib/flippant/adapters/memory.rb, line 32
def clear
  @table = Hash.new { |hash, key| hash[key] = {} }
end
disable(feature, group, values = []) click to toggle source
# File lib/flippant/adapters/memory.rb, line 36
def disable(feature, group, values = [])
  rules = table[feature]

  monitor.synchronize do
    if values.any?
      remove_values(rules, group, values)
    else
      remove_group(rules, group)
    end
  end
end
enable(feature, group, values = []) click to toggle source
# File lib/flippant/adapters/memory.rb, line 48
def enable(feature, group, values = [])
  fkey = feature
  gkey = group.to_s

  monitor.synchronize do
    table[fkey][gkey] ||= []
    table[fkey][gkey] = (table[fkey][gkey] | values).sort
  end
end
enabled?(feature, actor, registered = Flippant.registered) click to toggle source
# File lib/flippant/adapters/memory.rb, line 58
def enabled?(feature, actor, registered = Flippant.registered)
  table[feature].any? do |group, values|
    if (block = registered[group.to_s])
      block.call(actor, values)
    end
  end
end
exists?(feature, group) click to toggle source
# File lib/flippant/adapters/memory.rb, line 66
def exists?(feature, group)
  if group.nil?
    table.key?(feature)
  else
    table.dig(feature, group.to_s)
  end
end
features(filter = nil) click to toggle source
# File lib/flippant/adapters/memory.rb, line 74
def features(filter = nil)
  if filter.nil?
    table.keys.sort
  else
    table.select do |_, pairs|
      pairs.any? { |(group, _)| group == filter.to_s }
    end.keys.sort
  end
end
load(loaded) click to toggle source
# File lib/flippant/adapters/memory.rb, line 84
def load(loaded)
  monitor.synchronize do
    loaded.each do |feature, rules|
      rules.each do |group, values|
        table[feature][group] = values
      end
    end
  end
end
remove(feature) click to toggle source
# File lib/flippant/adapters/memory.rb, line 94
def remove(feature)
  table.delete(feature)
end
rename(old_feature, new_feature) click to toggle source
# File lib/flippant/adapters/memory.rb, line 98
def rename(old_feature, new_feature)
  old_feature = old_feature
  new_feature = new_feature

  table[new_feature] = table.delete(old_feature)
end
setup() click to toggle source
# File lib/flippant/adapters/memory.rb, line 16
def setup
  true
end

Private Instance Methods

remove_group(rules, to_remove) click to toggle source
# File lib/flippant/adapters/memory.rb, line 107
def remove_group(rules, to_remove)
  rules.reject! { |(group, _)| group == to_remove.to_s }
end
remove_values(rules, group, values) click to toggle source
# File lib/flippant/adapters/memory.rb, line 111
def remove_values(rules, group, values)
  rules[group.to_s] = (rules[group.to_s] - values)
end