module Redlics::Counter

Counter class

Constants

CONTEXT

Context constant for given class.

Public Instance Methods

count(*args, &block) click to toggle source

Count for a given event and object id with options.

@param *args [Array] list of arguments for count @return [Array] list of counted granularities

# File lib/redlics/counter.rb, line 15
def count(*args, &block)
  return count_with_block(&block) if block_given?
  return count_with_hash(args.first) if args.first.is_a?(Hash)
  count_with_args(*args)
end

Private Instance Methods

count_by_hash(options) click to toggle source

Count by hash.

@param options [Hash] configuration options @return [Array] result of pipelined redis commands

# File lib/redlics/counter.rb, line 62
def count_by_hash(options)
  granularity = options[:granularity]
  key = Key.name(CONTEXT, options[:event], granularity, options[:past], { id: options[:id], bucketized: true })
  Redlics.redis do |conn|
    conn.pipelined do |redis|
      redis.hincrby(key[0], key[1], 1)
      redis.expire(key[0], (options[:expiration_for] && options[:expiration_for][granularity] || Redlics.config.counter_expirations[granularity]).to_i)
    end
  end
end
count_by_key(options) click to toggle source

Count by key.

@param options [Hash] configuration options @return [Array] result of pipelined redis commands

# File lib/redlics/counter.rb, line 77
def count_by_key(options)
  granularity = options[:granularity]
  key = Key.name(CONTEXT, options[:event], granularity, options[:past], { id: options[:id], bucketized: false })
  Redlics.redis do |conn|
    conn.pipelined do |redis|
      redis.incr(key)
      redis.expire(key, (options[:expiration_for] && options[:expiration_for][granularity] || Redlics.config.counter_expirations[granularity]).to_i)
    end
  end
end
count_with_args(*args) click to toggle source

Count with hash.

@param *args [Array] list of arguments for count @return [Array] list of counted granularities

# File lib/redlics/counter.rb, line 52
def count_with_args(*args)
  options = args.last.instance_of?(Hash) ? args.pop : {}
  options.merge!(event: args[0])
  count_with_hash(options)
end
count_with_block() { |options = open_struct| ... } click to toggle source

Count with hash.

@param [&Block] a block with configuration options @return [Array] list of counted granularities

# File lib/redlics/counter.rb, line 43
def count_with_block
  yield options = OpenStruct.new
  count_with_hash(options.to_h)
end
count_with_hash(options) click to toggle source

Count with hash.

@param options [Hash] configuration options @return [Array] list of counted granularities

# File lib/redlics/counter.rb, line 27
def count_with_hash(options)
  options[:id] = options[:id].to_i unless options[:id].nil?
  Granularity.validate(CONTEXT, options[:granularity]).each do |granularity|
    opt = options.clone.merge(granularity: granularity)
    if Redlics.config.bucket && opt[:id]
      count_by_hash(opt)
    else
      count_by_key(opt)
    end
  end
end