module Pelican::Event

Public Instance Methods

delete(id) click to toggle source
# File lib/pelican/event.rb, line 14
def delete(id)
  begin
    Pelican.redis.multi do
      Pelican.redis.zrem(Pelican.key, pelican_id(id))
      Pelican.del(pelican_id(id))
    end
  end
end
insert(id, state) click to toggle source
# File lib/pelican/event.rb, line 5
def insert(id, state)
  begin
    Pelican.redis.multi do
      Pelican.redis.set(pelican_id(id), state)
    end
    update_event_list(pelican_id(id))
  end
end
list(last_score = 0) { |redis.get(id)| ... } click to toggle source
# File lib/pelican/event.rb, line 23
def list(last_score = 0)
  max_score = last_score
  last_score = '(' + last_score.to_s # make the search on last score exclusive
  Pelican.redis.zrangebyscore(Pelican.key, last_score, '+inf', { withscores: true }).each do |id|
    yield Pelican.redis.get(id[0])
    max_score = id[1]
  end
  max_score
end
pelican_id(id) click to toggle source
# File lib/pelican/event.rb, line 33
def pelican_id(id)
  ['pelican', id].join(':')
end

Private Instance Methods

update_event_list(id) click to toggle source
# File lib/pelican/event.rb, line 39
def update_event_list(id)
  with_max_score do |max_score|
    Pelican.redis.multi do
      Pelican.redis.zadd(Pelican.key, max_score + 1, id)
    end
  end
end
with_max_score() { |nil? ? 0 : last_object| ... } click to toggle source
# File lib/pelican/event.rb, line 47
def with_max_score
  begin
    Pelican.redis.watch(Pelican.key)
    last_object = Pelican.redis.zrange(Pelican.key, -1, -1, { withscores: true })[0]
    yield last_object.nil? ? 0 : last_object[1]
  rescue => e
    raise e
  ensure
    Pelican.redis.watch(Pelican.key)
  end
end