Sha256: 3ef7d50513a3b0c02b46a5de8beee0e7f5b0a8b5497c808e6504a8e00473cbfa
Contents?: true
Size: 1.84 KB
Versions: 2
Compression:
Stored size: 1.84 KB
Contents
module CanvasSync module JobBatches module RedisModel extend ActiveSupport::Concern class_methods do def redis_attr(key, type = :string, read_only: true) class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{key}=(value) raise "#{key} is read-only once the batch has been started" if #{read_only.to_s} && (@initialized || @existing) @#{key} = value if :#{type} == :json value = JSON.unparse(value) end persist_bid_attr('#{key}', value) end def #{key} return @#{key} if defined?(@#{key}) if (@initialized || @existing) value = read_bid_attr('#{key}') if :#{type} == :bool value = value == 'true' elsif :#{type} == :int value = value.to_i elsif :#{type} == :float value = value.to_f elsif :#{type} == :json value = JSON.parse(value) end @#{key} = value end end RUBY end end def persist_bid_attr(attribute, value) if @initialized || @existing redis do |r| r.multi do r.hset(redis_key, attribute, value) r.expire(redis_key, Batch::BID_EXPIRE_TTL) end end else @pending_attrs ||= {} @pending_attrs[attribute] = value end end def read_bid_attr(attribute) redis do |r| r.hget(redis_key, attribute) end end def flush_pending_attrs redis do |r| r.mapped_hmset(redis_key, @pending_attrs) end @initialized = true @pending_attrs = {} end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
canvas_sync-0.17.3.beta2 | lib/canvas_sync/job_batches/redis_model.rb |
canvas_sync-0.17.3.beta1 | lib/canvas_sync/job_batches/redis_model.rb |