lib/ohm/tallyable.rb in ohm-tallyable-0.1.1 vs lib/ohm/tallyable.rb in ohm-tallyable-0.1.2

- old
+ new

@@ -11,21 +11,27 @@ def tallies @tallies ||= {} end def leaderboard(attribute, by=nil) + raise ArgumentError if !_has_tally(attribute, by) + + _load_zset(_tally_key(attribute, by)) + .map { |k, v| [k, v.to_i] } + .sort_by { |k, v| [-v, k] } + end + + def _has_tally(attribute, by=nil) tally = tallies[attribute] - if tally.nil? || (tally[:by] && (by.nil? || !by.include?(tally[:by]))) - raise ArgumentError - end + !!(tally && (!tally[:by] || (by && by.include?(tally[:by])))) + end + + def _tally_key(attribute, by=nil) key = self.key[:tallies][attribute] if by key = key[by.keys.first][by.values.first] end - - _load_zset(key) - .map { |k, v| [k, v.to_i] } - .sort_by { |k, v| [-v, k] } + key end if Redis::VERSION.to_i == 2 def _load_zset(key) key.zrevrange(0, -1, with_scores: true).each_slice(2)