class MockBeaneater::Tube
Attributes
name[R]
pool[R]
Public Class Methods
new(pool, name)
click to toggle source
# File lib/mock_beaneater/tube/record.rb, line 5 def initialize(pool, name) @name = name.to_s @pool = pool @delayed = Containers::PriorityQueue.new @ready = Containers::PriorityQueue.new @reserved = [] end
Public Instance Methods
clear()
click to toggle source
# File lib/mock_beaneater/tube/record.rb, line 42 def clear @delayed.clear @ready.clear end
delete(job)
click to toggle source
# File lib/mock_beaneater/tube/record.rb, line 47 def delete(job) @reserved.delete(job) end
peek(state)
click to toggle source
# File lib/mock_beaneater/tube/record.rb, line 26 def peek(state) refresh_tube if state == 'ready' @ready.next elsif state == 'delayed' @delayed.next else nil end end
put(body, options={})
click to toggle source
# File lib/mock_beaneater/tube/record.rb, line 13 def put(body, options={}) visible_at = (options[:delay] || 0) + Time.now.to_i job = Job.new(body, self, visible_at, options[:pri] || 65536) if options[:delay] @delayed.push job, -1*visible_at else @ready.push job, job.pri end {:status => "INSERTED", :body => nil, :id => job.id} end
release(job)
click to toggle source
# File lib/mock_beaneater/tube/record.rb, line 51 def release(job) @reserved.delete(job) @ready.push(job, job.pri) end
reserve(timeout=nil)
click to toggle source
# File lib/mock_beaneater/tube/record.rb, line 37 def reserve(timeout=nil) refresh_tube @ready.pop.tap { |j| @reserved << j if j } end
Private Instance Methods
refresh_tube()
click to toggle source
# File lib/mock_beaneater/tube/record.rb, line 58 def refresh_tube while @delayed.next && @delayed.next.visible_at < Time.now.to_i job = @delayed.pop @ready.push job, job.pri end end