1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
module FactoryBot
# @api private
class CallbacksObserver
def initialize(callbacks, evaluator)
@callbacks = callbacks
@evaluator = evaluator
@completed = []
end
def update(name, result_instance)
callbacks_by_name(name).each do |callback|
if !completed?(result_instance, callback)
callback.run(result_instance, @evaluator)
record_completion!(result_instance, callback)
end
end
end
private
def callbacks_by_name(name)
@callbacks.select { |callback| callback.name == name }
end
def completed?(instance, callback)
key = completion_key_for(instance, callback)
@completed.include?(key)
end
def record_completion!(instance, callback)
key = completion_key_for(instance, callback)
@completed << key
end
def completion_key_for(instance, callback)
"#{instance.object_id}-#{callback.object_id}"
end
end
end
|