Sha256: e3792c012fd466c2beac2071f958ddb49517c31334cac3e13e472209ae25364d

Contents?: true

Size: 1.54 KB

Versions: 3

Compression:

Stored size: 1.54 KB

Contents

require 'counter/cache/counters/buffer_counter/relation_finder'
require 'counter/cache/counters/buffer_counter/enqueuer'
require 'counter/cache/counters/buffer_counter/key'

module Counter
  module Cache
    module Counters
      class BufferCounter
        class Updater < Struct.new(:source_object, :options, :counter_class_name)
          def update!(direction)
            return unless valid?
            incr if direction == :incr
            decr if direction == :decr
            enqueue
          end

          private

          def enqueue
            Enqueuer.new(options,
                         source_object.class.name,
                         relation_finder.relation_id,
                         relation_finder.relation_class,
                         counter_class_name).enqueue!(source_object)
          end

          def relation_finder
            RelationFinder.new(source_object, options)
          end

          def valid?
            (!options.if_value || options.if_value.call(source_object)) && !relation_finder.relation_id.nil?
          end

          def incr
            redis.incr(key, increment_by)
          end

          def decr
            redis.decr(key, increment_by)
          end

          def increment_by
            return options.increment_by.call(source_object) if options.increment_by.is_a?(Proc)
            1
          end

          def key
            Key.new(source_object, options).to_s
          end

          def redis
            Counter::Cache::Redis.new
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
counter-cache-0.3.0 lib/counter/cache/counters/buffer_counter/updater.rb
counter-cache-0.2.0 lib/counter/cache/counters/buffer_counter/updater.rb
counter-cache-0.1.0 lib/counter/cache/counters/buffer_counter/updater.rb