class FactoryBot::Definition
@api private
Attributes
declarations[R]
defined_traits[R]
name[R]
Public Class Methods
new(name, base_traits = [])
click to toggle source
# File lib/factory_bot/definition.rb, line 6 def initialize(name, base_traits = []) @name = name @declarations = DeclarationList.new(name) @callbacks = [] @defined_traits = Set.new @to_create = nil @base_traits = base_traits @additional_traits = [] @constructor = nil @attributes = nil @compiled = false end
Public Instance Methods
add_callback(callback)
click to toggle source
# File lib/factory_bot/definition.rb, line 72 def add_callback(callback) @callbacks << callback end
after(*names, &block)
click to toggle source
# File lib/factory_bot/definition.rb, line 92 def after(*names, &block) callback(*names.map { |name| "after_#{name}" }, &block) end
append_traits(new_traits)
click to toggle source
# File lib/factory_bot/definition.rb, line 68 def append_traits(new_traits) @additional_traits += new_traits end
attributes()
click to toggle source
# File lib/factory_bot/definition.rb, line 21 def attributes @attributes ||= AttributeList.new.tap do |attribute_list| attribute_lists = aggregate_from_traits_and_self(:attributes) { declarations.attributes } attribute_lists.each do |attributes| attribute_list.apply_attributes attributes end end end
before(*names, &block)
click to toggle source
# File lib/factory_bot/definition.rb, line 88 def before(*names, &block) callback(*names.map { |name| "before_#{name}" }, &block) end
callback(*names, &block)
click to toggle source
# File lib/factory_bot/definition.rb, line 96 def callback(*names, &block) names.each do |name| FactoryBot.register_callback(name) add_callback(Callback.new(name, block)) end end
callbacks()
click to toggle source
# File lib/factory_bot/definition.rb, line 42 def callbacks aggregate_from_traits_and_self(:callbacks) { @callbacks } end
compile()
click to toggle source
# File lib/factory_bot/definition.rb, line 46 def compile unless @compiled declarations.attributes defined_traits.each do |defined_trait| base_traits.each { |bt| bt.define_trait defined_trait } additional_traits.each { |bt| bt.define_trait defined_trait } end @compiled = true end end
constructor()
click to toggle source
# File lib/factory_bot/definition.rb, line 38 def constructor aggregate_from_traits_and_self(:constructor) { @constructor }.last end
define_constructor(&block)
click to toggle source
# File lib/factory_bot/definition.rb, line 84 def define_constructor(&block) @constructor = block end
define_trait(trait)
click to toggle source
# File lib/factory_bot/definition.rb, line 80 def define_trait(trait) @defined_traits.add(trait) end
inherit_traits(new_traits)
click to toggle source
# File lib/factory_bot/definition.rb, line 64 def inherit_traits(new_traits) @base_traits += new_traits end
overridable()
click to toggle source
# File lib/factory_bot/definition.rb, line 59 def overridable declarations.overridable self end
skip_create()
click to toggle source
# File lib/factory_bot/definition.rb, line 76 def skip_create @to_create = ->(instance) {} end
to_create(&block)
click to toggle source
# File lib/factory_bot/definition.rb, line 30 def to_create(&block) if block_given? @to_create = block else aggregate_from_traits_and_self(:to_create) { @to_create }.last end end
Private Instance Methods
additional_traits()
click to toggle source
# File lib/factory_bot/definition.rb, line 109 def additional_traits @additional_traits.map { |name| trait_by_name(name) } end
aggregate_from_traits_and_self(method_name, &block)
click to toggle source
# File lib/factory_bot/definition.rb, line 127 def aggregate_from_traits_and_self(method_name, &block) compile [ base_traits.map(&method_name), instance_exec(&block), additional_traits.map(&method_name), ].flatten.compact end
base_traits()
click to toggle source
# File lib/factory_bot/definition.rb, line 105 def base_traits @base_traits.map { |name| trait_by_name(name) } end
initialize_copy(source)
click to toggle source
Calls superclass method
# File lib/factory_bot/definition.rb, line 121 def initialize_copy(source) super @attributes = nil @compiled = false end
trait_by_name(name)
click to toggle source
# File lib/factory_bot/definition.rb, line 113 def trait_by_name(name) trait_for(name) || FactoryBot.trait_by_name(name) end
trait_for(name)
click to toggle source
# File lib/factory_bot/definition.rb, line 117 def trait_for(name) defined_traits.detect { |trait| trait.name == name.to_s } end