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)