class Delayer::Procedure

Attributes

delayer[R]
next[RW]
state[R]

Public Class Methods

new(delayer, &proc) click to toggle source
# File lib/delayer/procedure.rb, line 7
def initialize(delayer, &proc)
  @delayer = delayer
  @proc = proc
  @state = :stop
  @next = nil
  @delayer.class.register(self)
end

Public Instance Methods

break(node) click to toggle source

insert node between self and self.next

Args

node

insertion

Return

node

# File lib/delayer/procedure.rb, line 57
def break(node)
  tail = @next
  @next = node
  node.next = tail
  node
end
cancel() click to toggle source

Cancel this job

Exception

Delayer::TooLate

if already called run()

Return

self

# File lib/delayer/procedure.rb, line 36
def cancel
  unless @state == :stop
    raise Delayer::StateError(@state), 'cannot cancel Delayer::Procedure'
  end

  @state = :cancel
  self
end
canceled?() click to toggle source

Return true if canceled this task

Return

true if canceled this task

# File lib/delayer/procedure.rb, line 48
def canceled?
  @state == :cancel
end
run() click to toggle source

Run a process

Exception

Delayer::TooLate

if already called run()

Return

node

# File lib/delayer/procedure.rb, line 20
def run
  unless @state == :stop
    raise Delayer::StateError(@state), 'call twice Delayer::Procedure'
  end

  @state = :run
  @proc&.call
  @state = :done
  @proc = nil
end