class Fabes::ConnectionAdapters::RedisAdapter

Public Class Methods

new(redis) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 12
def initialize(redis)
  @redis = redis
end

Public Instance Methods

all_experiments() click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 47
def all_experiments
  experiments = Array.new
  names = get_all_experiment_names
  names.each do |name|
    experiments << load_experiment(name)
  end
  experiments
end
clear!() click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 16
def clear!
  @redis.flushdb
end
find_experiment(name) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 27
def find_experiment(name)
  if @redis.sismember "fabes:experiments", name
    load_experiment(name)
  else
    nil
  end
end
increment_hits!(id) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 35
def increment_hits!(id)
  @redis.hincrby "fabes:alternatives_pool:#{id}", 'hits', 1
end
increment_participants!(id) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 39
def increment_participants!(id)
  @redis.hincrby "fabes:alternatives_pool:#{id}", 'participants', 1
end
save_experiment(experiment) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 20
def save_experiment(experiment)
  add_to_current_experiments(experiment.name)
  save_experiment_data(experiment)
rescue
  raise "Unable to save experiment"
end
update_weight(id, weight) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 43
def update_weight(id, weight)
  @redis.hset "fabes:alternatives_pool:#{id}", 'weight', weight
end

Private Instance Methods

add_to_alternatives(base, alternative) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 81
def add_to_alternatives(base, alternative)
  @redis.rpush "fabes:alternatives:#{base}", alternative
end
add_to_current_experiments(name) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 62
def add_to_current_experiments(name)
  @redis.sadd "fabes:experiments", name
end
get_all_experiment_names() click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 58
def get_all_experiment_names
  @redis.smembers 'fabes:experiments'
end
load_alternative(id) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 103
def load_alternative(id)
  data = @redis.hgetall "fabes:alternatives_pool:#{id}"
  Alternative.create_from data
end
load_alternatives(base) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 94
def load_alternatives(base)
  alternatives = Array.new
    ids = @redis.lrange "fabes:alternatives:#{base}", 0, -1
    ids.each do |id|
      alternatives.push load_alternative(id)
    end
  alternatives
end
load_experiment(name) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 85
def load_experiment(name)
  experiment = Experiment.new(name)
  alternatives = load_alternatives(name)
  alternatives.each do |alternative|
    experiment.add_alternative(alternative)
  end
  experiment
end
save_alternatives(base, alternatives) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 70
def save_alternatives(base, alternatives)
  alternatives.each do |alt|
    add_to_alternatives(base, alt.id)
    data = Array.new
    alt.instance_variables.each do |var|
      data << var.slice(1..-1) << alt.instance_variable_get(var)
    end
    @redis.hmset "fabes:alternatives_pool:#{alt.id}", *data
  end
end
save_experiment_data(experiment) click to toggle source
# File lib/fabes/connection_adapters/redis_adapter.rb, line 66
def save_experiment_data(experiment)
  save_alternatives(experiment.name, experiment.alternatives)
end