module Upvote
Constants
- VERSION
Public Instance Methods
count(entity)
click to toggle source
# File lib/upvote.rb, line 34 def count(entity) redis.zcard set_key(entity) end
create(subject, target, execute: true)
click to toggle source
# File lib/upvote.rb, line 12 def create(subject, target, execute: true) creation = ->() { redis.zadd set_key(subject), Time.now.to_f, key(target) redis.zadd set_key(target), Time.now.to_f, key(subject) } execute ? redis.multi { creation.call } : creation end
exist?(subject, target)
click to toggle source
# File lib/upvote.rb, line 30 def exist?(subject, target) redis.zscore(set_key(target), key(subject)).present? end
multi_count(entities)
click to toggle source
# File lib/upvote.rb, line 62 def multi_count(entities) redis.multi { entities.each &method(:count) } end
multi_create(upvotes)
click to toggle source
# File lib/upvote.rb, line 42 def multi_create(upvotes) redis.multi do upvotes.each do |subject, *targets| targets.each do |target| create(subject, target, execute: false).call end end end end
multi_remove(removals)
click to toggle source
# File lib/upvote.rb, line 52 def multi_remove(removals) redis.multi do removals.each do |subject, *targets| targets.each do |target| remove(subject, target, execute: false).call end end end end
multi_voters(entities, start: 0, offset: -1)
click to toggle source
# File lib/upvote.rb, line 66 def multi_voters(entities, start: 0, offset: -1) redis.multi { entities.each { |e| voters entities, start: start, offset: offset } } end
remove(subject, target, execute: true)
click to toggle source
# File lib/upvote.rb, line 21 def remove(subject, target, execute: true) removal = ->() { redis.zrem set_key(subject), key(target) redis.zrem set_key(target), key(subject) } execute ? redis.multi { removal.call } : removal end
voters(entity, start: 0, offset: -1)
click to toggle source
# File lib/upvote.rb, line 38 def voters(entity, start: 0, offset: -1) redis.zrevrange set_key(entity), start, offset end
Private Instance Methods
key(entity)
click to toggle source
# File lib/upvote.rb, line 78 def key(entity) klass = entity.class method = id_method(klass) '${type}#${id}' % { type: klass.to_s.underscore, id: entity.send(method) } end
set_key(entity)
click to toggle source
# File lib/upvote.rb, line 74 def set_key(entity) "#{key(entity)}:likes" end