Class: WorkQueue::FairQueue

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key, limit, &blk) ⇒ FairQueue

Returns a new instance of FairQueue.



54
55
56
57
58
59
# File 'lib/work_queue.rb', line 54

def initialize(key, limit, &blk)
  @limit = limit
  @size = 0
  @key = key
  @elements = Hash.new { |h, k| h[k] = blk.call }
end

Instance Attribute Details

#sizeObject (readonly)

Returns the value of attribute size.



52
53
54
# File 'lib/work_queue.rb', line 52

def size
  @size
end

Instance Method Details

#empty?Boolean

Returns:

  • (Boolean)


81
82
83
# File 'lib/work_queue.rb', line 81

def empty?
  @elements.empty?
end

#push(task, force:) ⇒ Object

Raises:



61
62
63
64
65
66
67
# File 'lib/work_queue.rb', line 61

def push(task, force:)
  raise WorkQueueFull if !force && @size >= @limit
  key = task[@key]
  @elements[key].push(task, force: force)
  @size += 1
  nil
end

#shiftObject



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/work_queue.rb', line 69

def shift
  unless @elements.empty?
    key, queue = @elements.shift

    task = queue.shift

    @elements[key] = queue unless queue.empty?
    @size -= 1
    task
  end
end