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