module Delayer::Extend
Attributes
exception[R]
expire[RW]
Public Class Methods
extended(klass)
click to toggle source
# File lib/delayer/extend.rb, line 7 def self.extended(klass) klass.class_eval do @first_pointer = @last_pointer = nil @busy = false @expire = 0 @remain_hook = nil @exception = nil @remain_received = false @lock = Mutex.new end end
Public Instance Methods
busy?()
click to toggle source
empty?()
click to toggle source
expire?()
click to toggle source
# File lib/delayer/extend.rb, line 41 def expire? if defined?(@end_time) and @end_time @end_time < Time.new.to_f else false end end
register(procedure)
click to toggle source
register new job.
Args¶ ↑
- procedure
-
job(Delayer::Procedure)
Return¶ ↑
self
# File lib/delayer/extend.rb, line 95 def register(procedure) lock.synchronize do if @last_pointer @last_pointer = @last_pointer.break procedure else @last_pointer = @first_pointer = procedure end if @remain_hook and not @remain_received @remain_received = true @remain_hook.call end end self end
register_remain_hook()
click to toggle source
# File lib/delayer/extend.rb, line 110 def register_remain_hook @remain_hook = Proc.new end
run(current_expire = @expire)
click to toggle source
Run registered jobs.
Args¶ ↑
- current_expire
-
expire for processing (secs, 0=unexpired)
Return¶ ↑
self
# File lib/delayer/extend.rb, line 24 def run(current_expire = @expire) if 0 == current_expire run_once while not empty? else @end_time = Time.new.to_f + @expire run_once while not(empty?) and @end_time >= Time.new.to_f @end_time = nil end if @remain_hook @remain_received = !empty? @remain_hook.call if @remain_received end rescue Exception => e @exception = e raise e end
run_once()
click to toggle source
Private Instance Methods
forward()
click to toggle source
# File lib/delayer/extend.rb, line 116 def forward lock.synchronize do prev = @first_pointer @first_pointer = @first_pointer.next @last_pointer = nil unless @first_pointer prev end end
lock()
click to toggle source
# File lib/delayer/extend.rb, line 125 def lock @lock end