不,这是不可能的。
这是发条 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
但是由于事件是在 a 中注册的Manager
,因此您需要一个管理器的实例,该实例已使用配置中定义的所有事件正确初始化。
长话短说:目前这是不可能的,并且需要对代码结构进行许多更改才能使其成为可能。