Sha256: c866a07b25420a39b23896bfee65b172a0da1e930d74ec02c5f65fc836fcfe18
Contents?: true
Size: 1.92 KB
Versions: 22
Compression:
Stored size: 1.92 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) 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) 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
22 entries across 22 versions & 1 rubygems