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