class Split::Persistence::DualAdapter
Public Class Methods
config()
click to toggle source
# File lib/split/persistence/dual_adapter.rb, line 11 def self.config @config ||= {} end
new(context)
click to toggle source
# File lib/split/persistence/dual_adapter.rb, line 15 def initialize(context) if logged_in = self.class.config[:logged_in] else raise "Please configure :logged_in" end if logged_in_adapter = self.class.config[:logged_in_adapter] else raise "Please configure :logged_in_adapter" end if logged_out_adapter = self.class.config[:logged_out_adapter] else raise "Please configure :logged_out_adapter" end @fallback_to_logged_out_adapter = self.class.config[:fallback_to_logged_out_adapter] || false @logged_in = logged_in.call(context) @logged_in_adapter = logged_in_adapter.new(context) @logged_out_adapter = logged_out_adapter.new(context) @active_adapter = @logged_in ? @logged_in_adapter : @logged_out_adapter end
with_config(options={})
click to toggle source
# File lib/split/persistence/dual_adapter.rb, line 6 def self.with_config(options={}) self.config.merge!(options) self end
Public Instance Methods
[](key)
click to toggle source
# File lib/split/persistence/dual_adapter.rb, line 45 def [](key) if @fallback_to_logged_out_adapter @logged_in && @logged_in_adapter[key] || @logged_out_adapter[key] else @active_adapter[key] end end
[]=(key, value)
click to toggle source
# File lib/split/persistence/dual_adapter.rb, line 53 def []=(key, value) if @fallback_to_logged_out_adapter @logged_in_adapter[key] = value if @logged_in old_value = @logged_out_adapter[key] @logged_out_adapter[key] = value decrement_participation(key, old_value) if decrement_participation?(old_value, value) else @active_adapter[key] = value end end
delete(key)
click to toggle source
# File lib/split/persistence/dual_adapter.rb, line 65 def delete(key) if @fallback_to_logged_out_adapter @logged_in_adapter.delete(key) @logged_out_adapter.delete(key) else @active_adapter.delete(key) end end
keys()
click to toggle source
# File lib/split/persistence/dual_adapter.rb, line 37 def keys if @fallback_to_logged_out_adapter (@logged_in_adapter.keys + @logged_out_adapter.keys).uniq else @active_adapter.keys end end
Private Instance Methods
decrement_participation(key, value)
click to toggle source
# File lib/split/persistence/dual_adapter.rb, line 80 def decrement_participation(key, value) Split.redis.hincrby("#{key}:#{value}", 'participant_count', -1) end
decrement_participation?(old_value, value)
click to toggle source
# File lib/split/persistence/dual_adapter.rb, line 76 def decrement_participation?(old_value, value) !old_value.nil? && !value.nil? && old_value != value end