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