class Tally::Daily

Contains all keys set for the given day

Can be used to iterate over a large amount of smembers in the daily set

Public Instance Methods

daily_key() click to toggle source
# File lib/tally/daily.rb, line 7
def daily_key
  "#{ Tally.config.prefix }@#{ day_key }"
end

Private Instance Methods

all_keys() click to toggle source
# File lib/tally/daily.rb, line 13
def all_keys
  @keys ||= build_keys_from_redis
end
build_keys_from_redis() click to toggle source
# File lib/tally/daily.rb, line 17
def build_keys_from_redis
  result = []
  cursor = ""

  scan = scan_from_redis

  while cursor != "0"
    result << scan.last
    cursor = scan.first

    scan = scan_from_redis(cursor: cursor)
  end

  result.flatten
end
day_key() click to toggle source
# File lib/tally/daily.rb, line 33
def day_key
  @day_key ||= day.strftime(Tally.config.date_format)
end
entry_regex() click to toggle source
# File lib/tally/daily.rb, line 37
def entry_regex
  @entry_regex ||= Regexp.new("(?<record>[^:]+:[\\d]+)?:?(?<key>[^:]+)")
end
scan_from_redis(cursor: "0") click to toggle source
# File lib/tally/daily.rb, line 41
def scan_from_redis(cursor: "0")
  Tally.redis do |conn|
    conn.sscan(daily_key, cursor, match: scan_key, count: 25)
  end
end
scan_key() click to toggle source
# File lib/tally/daily.rb, line 47
def scan_key
  @scan_key ||= if key.present? && record.present?
    "#{ record.model_name.i18n_key }:#{ record.id }:#{ key }"
  elsif key.present? && type.present?
    "#{ type }:*:#{ key }"
  elsif record.present?
    "#{ record.model_name.i18n_key }:#{ record.id }:*"
  elsif type.present?
    "#{ type }:*:*"
  elsif key.present?
    "*#{ key }"
  else
    "*"
  end
end