class Reserver

Constants

Add
Delete
WakeUp

Attributes

__getobj__[R]
thread_class[R]
time[R]

Public Class Methods

new(time, thread: Thread, &proc) click to toggle source
# File core/lib/reserver.rb, line 19
def initialize(time, thread: Thread, &proc)
  raise ArgumentError.new('Block necessary for Reserver.new') unless block_given?
  @proc = proc
  @thread_class = thread
  @sequence = :wait
  case time
  when Time
    @time = time.freeze
  when String
    @time = (Time.parse time).freeze
  when Integer
    @time = (Time.new + time).freeze
  else
    raise ArgumentError.new('first argument must be Integer, String or Time')
  end
  Reserver.register(self)
end
register(reserver) click to toggle source
# File core/lib/reserver.rb, line 83
def register(reserver)
  @queue.push(Add.new(reserver))
end
unregister(reserver) click to toggle source
# File core/lib/reserver.rb, line 87
def unregister(reserver)
  @queue.push(Delete.new(reserver))
end

Public Instance Methods

cancel() click to toggle source

Reserverの実行をキャンセルする。 実行がキャンセルされたReserverはスケジューラから削除され、その時刻になってもブロックが実行されない。 このメソッドを呼ぶと、このインスタンスはfreezeされる。 既に実行が完了しているかキャンセルされたものに対して呼んでも何も起きない。

# File core/lib/reserver.rb, line 46
def cancel
  if !finished?
    @sequence = :cancel
    freeze
    Reserver.unregister(self)
  end
  self
rescue defined?(FrozenError) ? FrozenError : RuntimeError
end
complete() click to toggle source

内部で呼ぶためのメソッドなので呼ばないでください

# File core/lib/reserver.rb, line 76
def complete
  @sequence = :complete
  freeze
rescue defined?(FrozenError) ? FrozenError : RuntimeError
end
expired?() click to toggle source

このReserverを実行する時間になっていれば true を返す

# File core/lib/reserver.rb, line 57
def expired?
  sleep_time <= 0
end
finished?() click to toggle source

このReserverの処理が既に完了している場合には true を返す

# File core/lib/reserver.rb, line 67
def finished?
  %i<complete canceled>.include?(@sequence)
end
inspect() click to toggle source
# File core/lib/reserver.rb, line 71
def inspect
  "#<#{self.class} #{@sequence} in #{@proc.source_location&.join(':')} at #{time}>"
end
sleep_time() click to toggle source

このReserverを何秒後に実行するかを返す

# File core/lib/reserver.rb, line 62
def sleep_time
  time - Time.now
end
to_proc() click to toggle source

コンストラクタに渡したブロックのProcオブジェクトを返す

# File core/lib/reserver.rb, line 38
def to_proc
  @proc
end