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