1
0
Fork 0
mirror of https://github.com/thoughtbot/factory_bot.git synced 2022-11-09 11:43:51 -05:00
thoughtbot--factory_bot/lib/factory_bot/callback.rb
Alejandro Dustet f82e40c8c5 Deprecate/Move strategies and callback methods
Why:
These methods are used internally for the functionality of the library
and are subject to change. Therefore shouldn't be part of the public
interface.

This PR:
- Moves the ```register_strategy```, ```register_callback```,
```register_default_factories```, ```register_default_callbacks```
```strategies```, ```callback_names```
and ```strategy_by_name``` methods to the ```FactoryBot::Internal```
class.
- Deprecates the use of ```register_callback``` from the ```FactoryBot```
module.
2019-06-04 20:09:14 -04:00

41 lines
957 B
Ruby

module FactoryBot
class Callback
attr_reader :name
def initialize(name, block)
@name = name.to_sym
@block = block
ensure_valid_callback_name!
end
def run(instance, evaluator)
case block.arity
when 1, -1 then syntax_runner.instance_exec(instance, &block)
when 2 then syntax_runner.instance_exec(instance, evaluator, &block)
else syntax_runner.instance_exec(&block)
end
end
def ==(other)
name == other.name &&
block == other.block
end
protected
attr_reader :block
private
def ensure_valid_callback_name!
unless FactoryBot::Internal.callback_names.include?(name)
raise InvalidCallbackNameError, "#{name} is not a valid callback name. " +
"Valid callback names are #{FactoryBot::Internal.callback_names.inspect}"
end
end
def syntax_runner
@syntax_runner ||= SyntaxRunner.new
end
end
end