Sha256: 1dc7a2e45e1aec71d2b237f96a05e127c1d69285f011f54e24b8872e9498557c

Contents?: true

Size: 1.38 KB

Versions: 5

Compression:

Stored size: 1.38 KB

Contents

# coding: utf-8
require 'redis_counters/hash_counter'

module RedisCounters

  # HashCounter, с возможностью подсчета только уникальных значений.

  class UniqueHashCounter < HashCounter
    UNIQUE_LIST_POSTFIX = 'uq'.freeze

    UNIQUE_LIST_POSTFIX_DELIMITER = '_'.freeze

    attr_reader :unique_values_list

    protected

    def process_value
      unique_values_list.add(params) { super }
    end

    def init
      super
      @unique_values_list = unique_values_list_class.new(
        redis,
        unique_values_list_options
      )
    end

    def unique_values_list_options
      options.fetch(:unique_list).merge!(:counter_name => unique_values_list_name)
    end

    def unique_values_list_name
      [counter_name, UNIQUE_LIST_POSTFIX].join(unique_list_postfix_delimiter)
    end

    def unique_values_list_class
      unique_values_list_options.fetch(:list_class).to_s.constantize
    end

    def unique_list_postfix_delimiter
      @unique_list_postfix_delimiter ||= options.fetch(:unique_list_postfix_delimiter, UNIQUE_LIST_POSTFIX_DELIMITER)
    end

    def partitions_keys(params = {})
      # удаляем из списка партиций, ключи в которых хранятся списки уникальных значений
      super.delete_if { |partition| partition.start_with?(unique_values_list_name) }
    end
  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
redis_counters-1.5.2 lib/redis_counters/unique_hash_counter.rb
redis_counters-1.5.1 lib/redis_counters/unique_hash_counter.rb
redis_counters-1.5.0 lib/redis_counters/unique_hash_counter.rb
redis_counters-1.4.0 lib/redis_counters/unique_hash_counter.rb
redis_counters-1.3.0 lib/redis_counters/unique_hash_counter.rb