class Delayer::DelayedProcedure

Attributes

delayer[R]
reserve_at[R]
state[R]

Public Class Methods

new(delayer, delay:, &proc) click to toggle source
# File lib/delayer/delayed_procedure.rb, line 8
def initialize(delayer, delay:, &proc)
  @delayer = delayer
  @proc = proc
  case delay
  when Time
    @reserve_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) + delay.to_f - Time.now.to_f
  else
    @reserve_at = Process.clock_gettime(Process::CLOCK_MONOTONIC) + delay.to_f
  end
  @cancel = false
  @procedure = nil
  @delayer.class.reserve(self)
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/delayer/delayed_procedure.rb, line 29
def <=>(other)
  @reserve_at <=> other.reserve_at
end
cancel() click to toggle source

Cancel this job

Exception

Delayer::TooLate

if already called run()

Return

self

# File lib/delayer/delayed_procedure.rb, line 38
def cancel
  @procedure&.cancel
  @cancel = true
  self
end
canceled?() click to toggle source

Return true if canceled this task

Return

true if canceled this task

# File lib/delayer/delayed_procedure.rb, line 47
def canceled?
  procedure = @procedure
  if procedure
    procedure.canceled?
  else
    @cancel
  end
end
register() click to toggle source
# File lib/delayer/delayed_procedure.rb, line 22
def register
  if !canceled?
    @procedure = Procedure.new(@delayer, &@proc)
  end
  self
end