Class: FactoryBot::Factory Private
- Inherits:
-
Object
- Object
- FactoryBot::Factory
- Defined in:
- lib/factory_bot/factory.rb
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Instance Attribute Summary collapse
- #definition ⇒ Object readonly private
- #name ⇒ Object readonly private
Instance Method Summary collapse
- #associations ⇒ Object private
- #build_class ⇒ Object private
- #compile ⇒ Object private
- #human_names ⇒ Object private
-
#initialize(name, options = {}) ⇒ Factory
constructor
private
A new instance of Factory.
-
#names ⇒ Object
private
Names for this factory, including aliases.
- #run(build_strategy, overrides, &block) ⇒ Object private
- #with_traits(traits) ⇒ Object private
Constructor Details
#initialize(name, options = {}) ⇒ Factory
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Factory.
9 10 11 12 13 14 15 16 17 |
# File 'lib/factory_bot/factory.rb', line 9 def initialize(name, = {}) () @name = name.respond_to?(:to_sym) ? name.to_sym : name.to_s.underscore.to_sym @parent = [:parent] @aliases = [:aliases] || [] @class_name = [:class] @definition = Definition.new(@name, [:traits] || []) @compiled = false end |
Instance Attribute Details
#definition ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
7 8 9 |
# File 'lib/factory_bot/factory.rb', line 7 def definition @definition end |
#name ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
7 8 9 |
# File 'lib/factory_bot/factory.rb', line 7 def name @name end |
Instance Method Details
#associations ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
52 53 54 |
# File 'lib/factory_bot/factory.rb', line 52 def associations evaluator_class.attribute_list.associations end |
#build_class ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
22 23 24 25 26 27 28 29 30 |
# File 'lib/factory_bot/factory.rb', line 22 def build_class @build_class ||= if class_name.is_a? Class class_name elsif class_name.to_s.safe_constantize class_name.to_s.safe_constantize else class_name.to_s.camelize.constantize end end |
#compile ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
85 86 87 88 89 90 91 92 93 |
# File 'lib/factory_bot/factory.rb', line 85 def compile unless @compiled parent.compile parent.defined_traits.each { |trait| define_trait(trait) } @definition.compile(build_class) build_hierarchy @compiled = true end end |
#human_names ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
48 49 50 |
# File 'lib/factory_bot/factory.rb', line 48 def human_names names.map { |name| name.to_s.humanize.downcase } end |
#names ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Names for this factory, including aliases.
Example:
factory :user, aliases: [:author] do
# ...
end
FactoryBot.create(:author).class
# => User
Because an attribute defined without a value or block will build an association with the same name, this allows associations to be defined without factories, such as:
factory :user, aliases: [:author] do
# ...
end
factory :post do
end
FactoryBot.create(:post)..class
# => User
81 82 83 |
# File 'lib/factory_bot/factory.rb', line 81 def names [name] + @aliases end |
#run(build_strategy, overrides, &block) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/factory_bot/factory.rb', line 32 def run(build_strategy, overrides, &block) block ||= ->(result) { result } compile strategy = StrategyCalculator.new(build_strategy).strategy.new evaluator = evaluator_class.new(strategy, overrides.symbolize_keys) attribute_assigner = AttributeAssigner.new(evaluator, build_class, &compiled_constructor) observer = CallbacksObserver.new(callbacks, evaluator) evaluation = Evaluation.new(evaluator, attribute_assigner, compiled_to_create, observer) strategy.result(evaluation).tap(&block) end |
#with_traits(traits) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
95 96 97 98 99 |
# File 'lib/factory_bot/factory.rb', line 95 def with_traits(traits) clone.tap do |factory_with_traits| factory_with_traits.append_traits traits end end |