From f8d037cc3ad708e3c441417d8ffb0f529c8cf9d0 Mon Sep 17 00:00:00 2001 From: Artem Napolskih Date: Fri, 13 Sep 2013 15:04:04 +0600 Subject: [PATCH] docs(all): documenting --- lib/redis_counters/base_counter.rb | 24 +++++++++++++++++++ lib/redis_counters/hash_counter.rb | 2 ++ lib/redis_counters/unique_hash_counter.rb | 2 ++ .../unique_values_lists/base.rb | 3 +++ .../unique_values_lists/fast.rb | 7 ++++++ .../unique_values_lists/standard.rb | 10 ++++++++ 6 files changed, 48 insertions(+) diff --git a/lib/redis_counters/base_counter.rb b/lib/redis_counters/base_counter.rb index 9a7e2e3..feb04b0 100644 --- a/lib/redis_counters/base_counter.rb +++ b/lib/redis_counters/base_counter.rb @@ -4,6 +4,8 @@ module RedisCounters + # Базовый класс счетчика на основе Redis. + class BaseCounter extend Forwardable @@ -20,17 +22,39 @@ class BaseCounter attr_reader :options attr_reader :params + # Public: Фабричный метод создания счетчика заданного класса. + # + # redis - Redis - экземпляр redis - клиента. + # opts - Hash - хеш опций счетчика: + # counter_name - Symbol/String - идентификатор счетчика. + # key_delimiter - String - разделитель ключа (опционально). + # value_delimiter - String - разделитель значений (опционально). + # + # Returns RedisCounters::BaseCounter. + # def self.create(redis, opts) counter_class = opts.fetch(:counter_class).to_s.constantize counter_class.new(redis, opts) end + # Public: Конструктор. + # + # см. self.create. + # + # Returns RedisCounters::BaseCounter. + # def initialize(redis, opts) @redis = redis @options = opts init end + # Public: Метод производит обработку события. + # + # params - Hash - хеш параметров события. + # + # Returns process_value result. + # def process(params = {}, &block) @params = params process_value(&block) diff --git a/lib/redis_counters/hash_counter.rb b/lib/redis_counters/hash_counter.rb index 340cd0c..c0f920e 100644 --- a/lib/redis_counters/hash_counter.rb +++ b/lib/redis_counters/hash_counter.rb @@ -3,6 +3,8 @@ module RedisCounters + # Счетчик на основе redis-hash, с возможностью партиционирования и группировки значений. + class HashCounter < BaseCounter alias_method :increment, :process diff --git a/lib/redis_counters/unique_hash_counter.rb b/lib/redis_counters/unique_hash_counter.rb index 8e81d52..877a62e 100644 --- a/lib/redis_counters/unique_hash_counter.rb +++ b/lib/redis_counters/unique_hash_counter.rb @@ -3,6 +3,8 @@ module RedisCounters + # HashCounter, с возможностью подсчета только уникальных значений. + class UniqueHashCounter < HashCounter UNIQUE_LIST_POSTFIX = 'uq'.freeze diff --git a/lib/redis_counters/unique_values_lists/base.rb b/lib/redis_counters/unique_values_lists/base.rb index 07cd2df..ea231fb 100644 --- a/lib/redis_counters/unique_values_lists/base.rb +++ b/lib/redis_counters/unique_values_lists/base.rb @@ -4,6 +4,9 @@ module RedisCounters module UniqueValuesLists + # Базовый класс уникального списка значений, + # с возможностью группировки и партиционирования. + class Base < RedisCounters::BaseCounter alias_method :add, :process diff --git a/lib/redis_counters/unique_values_lists/fast.rb b/lib/redis_counters/unique_values_lists/fast.rb index 7811f56..81eea49 100644 --- a/lib/redis_counters/unique_values_lists/fast.rb +++ b/lib/redis_counters/unique_values_lists/fast.rb @@ -4,6 +4,13 @@ module RedisCounters module UniqueValuesLists + # Список уникального значений, на основе не блокирующего алгоритма. + # + # Особенности: + # * 2-х кратный расхзод памяти в случае использования партиций; + # * Не ведет список партиций; + # * Не транзакционен. + class Fast < UniqueValuesLists::Base protected diff --git a/lib/redis_counters/unique_values_lists/standard.rb b/lib/redis_counters/unique_values_lists/standard.rb index 5071444..452132e 100644 --- a/lib/redis_counters/unique_values_lists/standard.rb +++ b/lib/redis_counters/unique_values_lists/standard.rb @@ -4,6 +4,16 @@ module RedisCounters module UniqueValuesLists + # Список уникального значений, на основе механизма оптимистических блокировок. + # + # смотри Optimistic locking using check-and-set: + # http://redis.io/topics/transactions + # + # Особенности: + # * Значения сохраняет в партициях; + # * Ведет список партиций; + # * Полностью транзакционен. + class Standard < Base PARTITIONS_LIST_POSTFIX = :partitions