module Delayer::Priority::Extend
Public Class Methods
extended(klass)
click to toggle source
# File lib/delayer/priority.rb, line 20 def self.extended(klass) klass.class_eval do @priority_pointer = {} end end
Public Instance Methods
get_prev_point(priority)
click to toggle source
# File lib/delayer/priority.rb, line 52 def get_prev_point(priority) if @priority_pointer[priority] @priority_pointer[priority] else next_index = @priorities.index(priority) - 1 get_prev_point @priorities[next_index] if 0 <= next_index end end
register(procedure)
click to toggle source
register new job.
Args¶ ↑
- procedure
-
job(Delayer::Procedure)
Return¶ ↑
self
# File lib/delayer/priority.rb, line 31 def register(procedure) priority = procedure.delayer.priority lock.synchronize do last_pointer = get_prev_point(priority) if last_pointer @priority_pointer[priority] = last_pointer.break procedure else procedure.next = @first_pointer @priority_pointer[priority] = @first_pointer = procedure end if @last_pointer @last_pointer = @priority_pointer[priority] end if @remain_hook and not @remain_received @remain_received = true @remain_hook.call end end self end
validate_priority(symbol)
click to toggle source
# File lib/delayer/priority.rb, line 61 def validate_priority(symbol) unless @priorities.include? symbol raise Delayer::InvalidPriorityError, "undefined priority '#{symbol}'" end end
Private Instance Methods
forward()
click to toggle source
# File lib/delayer/priority.rb, line 69 def forward lock.synchronize do prev = @first_pointer @first_pointer = @first_pointer.next @last_pointer = nil unless @first_pointer @priority_pointer.each do |priority, pointer| @priority_pointer[priority] = @first_pointer if prev == pointer end prev end end