def start(key = nil, options = {})
object, terminator = (options || {}).values_at(:object, :terminator)
return if key && !object.send("_one_time_conditions_valid_#{@callback_id}?")
terminator ||= false
if @kind == :before || @kind == :around
if @kind == :before
filter = "unless halted\nresult = \#{@filter}\nhalted ||= (\#{terminator})\nend\n"
[@compiled_options[0], filter, @compiled_options[1]].compact.join("\n")
else
name = "_conditional_callback_#{@kind}_#{next_id}"
txt = "def \#{name}(halted)\n\#{@compiled_options[0] || \"if true\"} && !halted\n\#{@filter} do\nyield self\nend\nelse\nyield self\nend\nend\n"
@klass.class_eval(txt)
"#{name}(halted) do"
end
end
end