Sha256: fd5ac2055d7425d9f17b693d32978f012e5dc9b5a7a67aaf4d48365e8b8414aa
Contents?: true
Size: 1.5 KB
Versions: 2
Compression:
Stored size: 1.5 KB
Contents
module RedisBackedModel class RedisBackedModel def initialize(attributes={}) if attributes.class == Hash attributes.each do |key, value| add_to_instance_variables(key, value) end else raise ArgumentError end end def to_redis redis_commands = [] redis_commands << redis_set_command instance_variables.each do | var | redis_commands << instance_variable_to_redis(var) if instance_variable_to_redis(var) end scores.each do |score| redis_commands << score.to_redis end redis_commands end private attr_reader :id, :scores def add_to_instance_variables(key, value) if key.match(/score_\[\w+\|\w+\]/) add_to_scores(key, value) else self.instance_variable_set("@#{key}", value) end end def add_to_scores(key, value) @scores ||= [] @scores << SortedSet.new(self.class, id, Hash[key,value]) end def instance_variable_to_redis(instance_variable) "hset #{model_name_for_redis}:#{id} #{instance_variable.to_s.deinstance_variableize} #{instance_variable_get(instance_variable.to_s)}" unless instance_variable.to_s == '@id' end def model_name_for_redis class_as_string = self.class.to_s.demodulize.underscore end def redis_set_command "sadd #{model_name_for_redis}_ids #{id}" end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
redis_backed_model-0.0.2 | lib/redis_backed_model/redis_backed_model.rb |
redis_backed_model-0.0.1 | lib/redis_backed_model/redis_backed_model.rb |