module Redis::Props::Helper

Public Instance Methods

assign_values(new_values) click to toggle source

:nodoc

# File lib/redis/props/helper.rb, line 110
def assign_values(new_values)
  new_values.each do |field, val|
    type = self.class.redis_prop_type(field)
    ivar_name = :"@#{field}"

    case type
    when :counter
      value = cast_value(type, val || try("#{field}_default_value"))
      instance_variable_set(ivar_name, value)
    when :timestamp
      if !val.nil?
        instance_variable_set(ivar_name, cast_value(type, val))
      elsif self.class.redis_props[field][:allow_nil]
        instance_variable_set(ivar_name, nil)
      else
        value = cast_value(type, try("#{field}_default_value"))
        instance_variable_set(ivar_name, value)
        self.class.redis_prop_redis_pool(field).with do |conn|
          conn.hset(object_key, field, value)
        end
      end
    end
  end
end
cast_value(type, value) click to toggle source
# File lib/redis/props/helper.rb, line 78
def cast_value(type, value)
  case type.to_sym
  when :counter then value.to_i
  when :timestamp then value.to_i
  end
end
object_key() click to toggle source

Returns the Redis Key of Redis::Props, consists with Class name string in plural form and Instance id.

Example:

a User instance with id = 1 -> `users:1` a HolyLight::Spammer instance with id = 5 -> `holy_light/spammers:5`

@return [String]

# File lib/redis/props/helper.rb, line 73
def object_key
  raise Redis::Props::NilObjectId if self.id.nil?
  "#{self.class.to_s.pluralize.underscore}:#{self.id}"
end
redis_props_mget(*names) click to toggle source

批量取出当前对象的多个 Redis::Props 字段, 仅仅支持 counter / timestamp

@param [Array] names 需要检索的字段, 例如: :field1, :field2

@return [Model] 当前对象

# File lib/redis/props/helper.rb, line 91
def redis_props_mget(*names)
  pools_with_name = names.each_with_object({}) do |name, hash|
    pool = self.class.redis_prop_redis_pool(name)
    hash[pool] ||= []
    hash[pool] << name
  end

  pools_with_name.each do |pool, fields|
    values = pool.with do |conn|
      conn.hmget(object_key, fields)
    end

    assign_values(fields.zip(values).to_h)
  end

  self
end