いいえ、これは不可能です。
これは、コールバックを処理し、構成されたイベントを実行する、clockwork gemの関連メソッドです。
def tick(t=Time.now)
if (fire_callbacks(:before_tick))
events = events_to_run(t)
events.each do |event|
if (fire_callbacks(:before_run, event, t))
event.run(t)
fire_callbacks(:after_run, event, t)
end
end
end
fire_callbacks(:after_tick)
events
end
このメソッドは、現時点で実行する必要があるすべてのイベントをロードします (events_to_run
メソッドから返されます)。のすべてのイベントを反復処理し、events_to_run
コールバックを起動して、event
.
個々のイベントを実行し、すべてのコールバックを起動できるようにするには、このメソッドを次のように変更する必要があります。
def tick(t=Time.now)
if (fire_callbacks(:before_tick))
events = events_to_run(t)
events.each do |event|
run_event_with_callbacks(event)
end
end
fire_callbacks(:after_tick)
events
end
def run_event_with_callbacks(event)
if (fire_callbacks(:before_run, event, t))
event.run(t)
fire_callbacks(:after_run, event, t)
end
end
end
これにより、コールバックを起動して個々のイベントを実行できます。さらに、個々のイベントをロードするメソッドが必要になります。おそらく次のようなものです:
def load_event(job)
# finds only the first event when there are multiple
# events registered for the same job
@events.find { |event| event.job == job }
end
しかし、イベントは に登録されているためManager
、config.xml で定義されたすべてのイベントで正しく初期化されたマネージャのインスタンスが必要になります。
簡単に言うと、これは現時点では不可能であり、それを可能にするにはコードの構造に多くの変更が必要です。