Class: Verdict::Storage::RedisStorage

Inherits:
Object
  • Object
show all
Defined in:
lib/verdict/storage/redis_storage.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(redis = nil, options = {}) ⇒ RedisStorage

Returns a new instance of RedisStorage.



6
7
8
9
# File 'lib/verdict/storage/redis_storage.rb', line 6

def initialize(redis = nil, options = {})
  @redis = redis
  @key_prefix = options[:key_prefix] || 'experiments/'
end

Instance Attribute Details

#key_prefixObject

Returns the value of attribute key_prefix.



4
5
6
# File 'lib/verdict/storage/redis_storage.rb', line 4

def key_prefix
  @key_prefix
end

#redisObject

Returns the value of attribute redis.



4
5
6
# File 'lib/verdict/storage/redis_storage.rb', line 4

def redis
  @redis
end

Instance Method Details

#clear_experiment(experiment) ⇒ Object



35
36
37
38
# File 'lib/verdict/storage/redis_storage.rb', line 35

def clear_experiment(experiment)
  redis.del(generate_experiment_key(experiment))
  redis.del(generate_experiment_start_timestamp_key(experiment))
end

#remove_assignment(experiment, subject_identifier) ⇒ Object



31
32
33
# File 'lib/verdict/storage/redis_storage.rb', line 31

def remove_assignment(experiment, subject_identifier)
  redis.hdel(generate_experiment_key(experiment), subject_identifier)
end

#retrieve_assignment(experiment, subject_identifier) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/verdict/storage/redis_storage.rb', line 11

def retrieve_assignment(experiment, subject_identifier)
  if value = redis.hget(generate_experiment_key(experiment), subject_identifier)
    hash = JSON.parse(value)
    experiment.subject_assignment(
      subject_identifier,
      experiment.group(hash['group']),
      DateTime.parse(hash['created_at']).to_time
    )
  end
rescue ::Redis::BaseError => e
  raise Verdict::StorageError, "Redis error: #{e.message}"
end

#retrieve_start_timestamp(experiment) ⇒ Object



40
41
42
43
44
# File 'lib/verdict/storage/redis_storage.rb', line 40

def retrieve_start_timestamp(experiment)
  if started_at = redis.get(generate_experiment_start_timestamp_key(experiment))
    DateTime.parse(started_at).to_time
  end
end

#store_assignment(assignment) ⇒ Object



24
25
26
27
28
29
# File 'lib/verdict/storage/redis_storage.rb', line 24

def store_assignment(assignment)
  hash = { group: assignment.handle, created_at: assignment.created_at }
  redis.hset(generate_experiment_key(assignment.experiment), assignment.subject_identifier, JSON.dump(hash))
rescue ::Redis::BaseError => e
  raise Verdict::StorageError, "Redis error: #{e.message}"
end

#store_start_timestamp(experiment, timestamp) ⇒ Object



46
47
48
# File 'lib/verdict/storage/redis_storage.rb', line 46

def store_start_timestamp(experiment, timestamp)
  redis.setnx(generate_experiment_start_timestamp_key(experiment), timestamp.to_s)
end