Sha256: f4b65d4a244282edfa6d008a15023267eaabf157ac1d6bafd11560c87268eb74

Contents?: true

Size: 1.3 KB

Versions: 3

Compression:

Stored size: 1.3 KB

Contents

module RedisBackedModel

  class SortedSet
  require 'date'
    
  
    def initialize(model, model_id, definition)
      self.model      = model
      self.model_id   = model_id
      self.definition = definition
      self
    end
  
    # Serializes the object as a redis command to create a sorted set.
    def to_redis
      "zadd|#{key}|#{score}|#{member}"
    end
  
    private
      
      attr_accessor :model, :model_id, :definition
      
      def definition_keys
        definition.keys.first
      end
      
      def definition_values
        definition.values.first
      end
      
      def key_by
        parse_definition(definition_keys)[1]
      end
      
      def key_for
        parse_definition(definition_keys)[0]        
      end

      def key_model_name
        model.to_s.underscore.pluralize
      end

      def key_for_value
        parse_definition(definition_values)[0]
      end

      def member
        model_id
      end
        
      def key
        "#{key_model_name}_for_#{key_for}_by_#{key_by}:#{key_for_value}"
      end

      def score
        score = parse_definition(definition_values)[1]
        key_by == 'date' ? Date.parse(score).to_time.to_f : score
      end
      
      def parse_definition(string)
        string.match(/.*\[(\S+)\]/)[1].split('|')
      end
  
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
redis_backed_model-1.1.0 lib/redis_backed_model/sorted_set.rb
redis_backed_model-1.0.1 lib/redis_backed_model/sorted_set.rb
redis_backed_model-1.0.0 lib/redis_backed_model/sorted_set.rb