Class: Punchline::MinQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/punchline/min_queue.rb

Defined Under Namespace

Classes: Script

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key) ⇒ MinQueue

Returns a new instance of MinQueue.



8
9
10
11
# File 'lib/punchline/min_queue.rb', line 8

def initialize(key)
  @key = key
  load_scripts!
end

Instance Attribute Details

#keyObject

Returns the value of attribute key.



6
7
8
# File 'lib/punchline/min_queue.rb', line 6

def key
  @key
end

Instance Method Details

#allObject



21
22
23
24
25
# File 'lib/punchline/min_queue.rb', line 21

def all
  redis.zrange(key, 0, -1, with_scores: true).map do |pair|
    { value: pair.first, priority: pair.last.to_i }
  end
end

#clear!Object



47
48
49
# File 'lib/punchline/min_queue.rb', line 47

def clear!
  redis.del key
end

#configObject



13
14
15
# File 'lib/punchline/min_queue.rb', line 13

def config
  @config ||= Punchline.config.dup
end

#dequeueObject



32
33
34
35
36
# File 'lib/punchline/min_queue.rb', line 32

def dequeue
  value, priority = @dequeue.call [key]

  { value: value, priority: priority.to_i } unless value.nil?
end

#enqueue(value, options = {}) ⇒ Object



27
28
29
30
# File 'lib/punchline/min_queue.rb', line 27

def enqueue(value, options = {})
  priority = options[:priority] || Time.now.to_i
  @enqueue.call([key], [priority, value]) == 1
end

#lengthObject



17
18
19
# File 'lib/punchline/min_queue.rb', line 17

def length
  redis.zcard key
end

#load_scripts!Object



42
43
44
45
# File 'lib/punchline/min_queue.rb', line 42

def load_scripts!
  @enqueue = Script.new redis, 'enqueue.lua'
  @dequeue = Script.new redis, 'dequeue.lua'
end

#redisObject



38
39
40
# File 'lib/punchline/min_queue.rb', line 38

def redis
  config.redis
end

#reset_scripts!Object



51
52
53
# File 'lib/punchline/min_queue.rb', line 51

def reset_scripts!
  redis.script :flush
end