Sha256: 767f73c0c2fb9fec03d9ce6f3db5097ab25a5b2762b3c9b892a4629bc0de3242
Contents?: true
Size: 1.8 KB
Versions: 17
Compression:
Stored size: 1.8 KB
Contents
module CanvasSync::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) elsif :#{type} == :symbol value = value&.to_sym end @#{key} = value end end RUBY end end def persist_bid_attr(attribute, value) if @initialized || @existing redis do |r| r.multi do |r| r.hset(redis_key, attribute, value.to_s) r.expire(redis_key, Batch::BID_EXPIRE_TTL) end end else @pending_attrs ||= {} @pending_attrs[attribute] = value.to_s 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
Version data entries
17 entries across 17 versions & 1 rubygems