Class: Delayer::DelayedProcedure

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/delayer/delayed_procedure.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(delayer, delay:, &proc) ⇒ DelayedProcedure

Returns a new instance of DelayedProcedure.



8
9
10
11
12
13
14
15
16
17
18
19
20
# 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

Instance Attribute Details

#delayerObject (readonly)

Returns the value of attribute delayer.



7
8
9
# File 'lib/delayer/delayed_procedure.rb', line 7

def delayer
  @delayer
end

#reserve_atObject (readonly)

Returns the value of attribute reserve_at.



7
8
9
# File 'lib/delayer/delayed_procedure.rb', line 7

def reserve_at
  @reserve_at
end

#stateObject (readonly)

Returns the value of attribute state.



7
8
9
# File 'lib/delayer/delayed_procedure.rb', line 7

def state
  @state
end

Instance Method Details

#<=>(other) ⇒ Object



29
30
31
# File 'lib/delayer/delayed_procedure.rb', line 29

def <=>(other)
  @reserve_at <=> other.reserve_at
end

#cancelObject

Cancel this job

Exception

Delayer::TooLate

if already called run()

Return

self



38
39
40
41
42
# File 'lib/delayer/delayed_procedure.rb', line 38

def cancel
  @procedure&.cancel
  @cancel = true
  self
end

#canceled?Boolean

Return true if canceled this task

Return

true if canceled this task

Returns:

  • (Boolean)


47
48
49
50
51
52
53
54
# File 'lib/delayer/delayed_procedure.rb', line 47

def canceled?
  procedure = @procedure
  if procedure
    procedure.canceled?
  else
    @cancel
  end
end

#registerObject



22
23
24
25
26
27
# File 'lib/delayer/delayed_procedure.rb', line 22

def register
  if !canceled?
    @procedure = Procedure.new(@delayer, &@proc)
  end
  self
end