Module: FactoryBot

Extended by:
Syntax::Default
Defined in:
lib/factory_bot.rb,
lib/factory_bot/trait.rb,
lib/factory_bot/errors.rb,
lib/factory_bot/linter.rb,
lib/factory_bot/reload.rb,
lib/factory_bot/syntax.rb,
lib/factory_bot/aliases.rb,
lib/factory_bot/factory.rb,
lib/factory_bot/version.rb,
lib/factory_bot/callback.rb,
lib/factory_bot/internal.rb,
lib/factory_bot/registry.rb,
lib/factory_bot/sequence.rb,
lib/factory_bot/attribute.rb,
lib/factory_bot/decorator.rb,
lib/factory_bot/evaluator.rb,
lib/factory_bot/definition.rb,
lib/factory_bot/evaluation.rb,
lib/factory_bot/declaration.rb,
lib/factory_bot/null_object.rb,
lib/factory_bot/null_factory.rb,
lib/factory_bot/configuration.rb,
lib/factory_bot/strategy/null.rb,
lib/factory_bot/strategy/stub.rb,
lib/factory_bot/syntax_runner.rb,
lib/factory_bot/attribute_list.rb,
lib/factory_bot/factory_runner.rb,
lib/factory_bot/strategy/build.rb,
lib/factory_bot/syntax/default.rb,
lib/factory_bot/syntax/methods.rb,
lib/factory_bot/strategy/create.rb,
lib/factory_bot/declaration_list.rb,
lib/factory_bot/definition_proxy.rb,
lib/factory_bot/find_definitions.rb,
lib/factory_bot/attribute/dynamic.rb,
lib/factory_bot/attribute/sequence.rb,
lib/factory_bot/attribute_assigner.rb,
lib/factory_bot/callbacks_observer.rb,
lib/factory_bot/declaration/dynamic.rb,
lib/factory_bot/strategy_calculator.rb,
lib/factory_bot/declaration/implicit.rb,
lib/factory_bot/definition_hierarchy.rb,
lib/factory_bot/attribute/association.rb,
lib/factory_bot/declaration/association.rb,
lib/factory_bot/evaluator_class_definer.rb,
lib/factory_bot/strategy/attributes_for.rb,
lib/factory_bot/decorator/attribute_hash.rb,
lib/factory_bot/decorator/new_constructor.rb,
lib/factory_bot/decorator/invocation_tracker.rb,
lib/factory_bot/strategy_syntax_method_registrar.rb,
lib/factory_bot/decorator/disallows_duplicates_registry.rb

Defined Under Namespace

Modules: Internal, Strategy, Syntax Classes: AssociationDefinitionError, Attribute, AttributeAssigner, AttributeDefinitionError, AttributeList, Callback, CallbacksObserver, Configuration, Declaration, DeclarationList, Decorator, Definition, DefinitionHierarchy, DefinitionProxy, DuplicateDefinitionError, Evaluation, Evaluator, EvaluatorClassDefiner, Factory, FactoryRunner, InvalidCallbackNameError, InvalidFactoryError, Linter, MethodDefinitionError, NullFactory, NullObject, Registry, Sequence, SequenceAbuseError, StrategyCalculator, StrategySyntaxMethodRegistrar, SyntaxRunner, Trait

Constant Summary collapse

DEPRECATOR =
ActiveSupport::Deprecation.new("6.0", "factory_bot")
VERSION =
"5.0.2".freeze

Class Attribute Summary collapse

Class Method Summary collapse

Methods included from Syntax::Default

define, modify

Methods included from Syntax::Methods

#attributes_for, #attributes_for_list, #attributes_for_pair, #build, #build_list, #build_pair, #build_stubbed, #build_stubbed_list, #build_stubbed_pair, #create, #create_list, #create_pair, #generate, #generate_list

Class Attribute Details

.aliasesObject

Returns the value of attribute aliases.



3
4
5
# File 'lib/factory_bot/aliases.rb', line 3

def aliases
  @aliases
end

.allow_class_lookupObject

Returns the value of attribute allow_class_lookup.



90
91
92
# File 'lib/factory_bot.rb', line 90

def allow_class_lookup
  @allow_class_lookup
end

.definition_file_pathsObject

An Array of strings specifying locations that should be searched for factory definitions. By default, factory_bot will attempt to require “factories”, “test/factories” and “spec/factories”. Only the first existing file will be loaded.



7
8
9
# File 'lib/factory_bot/find_definitions.rb', line 7

def definition_file_paths
  @definition_file_paths
end

Class Method Details

.aliases_for(attribute) ⇒ Object



11
12
13
14
15
16
17
# File 'lib/factory_bot/aliases.rb', line 11

def self.aliases_for(attribute)
  aliases.map do |(pattern, replace)|
    if pattern.match(attribute.to_s)
      attribute.to_s.sub(pattern, replace).to_sym
    end
  end.compact << attribute
end

.configurationObject



53
54
55
# File 'lib/factory_bot.rb', line 53

def self.configuration
  Internal.configuration
end

.factory_by_name(name) ⇒ Object



101
102
103
# File 'lib/factory_bot.rb', line 101

def self.factory_by_name(name)
  factories.find(name)
end

.find_definitionsObject



12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/factory_bot/find_definitions.rb', line 12

def self.find_definitions
  absolute_definition_file_paths = definition_file_paths.map { |path| File.expand_path(path) }

  absolute_definition_file_paths.uniq.each do |path|
    load("#{path}.rb") if File.exist?("#{path}.rb")

    if File.directory? path
      Dir[File.join(path, "**", "*.rb")].sort.each do |file|
        load file
      end
    end
  end
end

.lint(*args) ⇒ Object

Look for errors in factories and (optionally) their traits. Parameters: factories - which factories to lint; omit for all factories options:

traits: true - to lint traits as well as factories
strategy: :create - to specify the strategy for linting
verbose: true - to include full backtraces for each linting error


71
72
73
74
75
# File 'lib/factory_bot.rb', line 71

def self.lint(*args)
  options = args.extract_options!
  factories_to_lint = args[0] || FactoryBot.factories
  Linter.new(factories_to_lint, options).lint!
end

.register_callback(name) ⇒ Object



156
157
158
159
# File 'lib/factory_bot.rb', line 156

def self.register_callback(name)
  name = name.to_sym
  callback_names << name
end

.register_default_callbacksObject



149
150
151
152
153
154
# File 'lib/factory_bot.rb', line 149

def self.register_default_callbacks
  register_callback(:after_build)
  register_callback(:after_create)
  register_callback(:after_stub)
  register_callback(:before_create)
end

.register_default_strategiesObject



141
142
143
144
145
146
147
# File 'lib/factory_bot.rb', line 141

def self.register_default_strategies
  register_strategy(:build,          FactoryBot::Strategy::Build)
  register_strategy(:create,         FactoryBot::Strategy::Create)
  register_strategy(:attributes_for, FactoryBot::Strategy::AttributesFor)
  register_strategy(:build_stubbed,  FactoryBot::Strategy::Stub)
  register_strategy(:null,           FactoryBot::Strategy::Null)
end

.register_factory(factory) ⇒ Object



94
95
96
97
98
99
# File 'lib/factory_bot.rb', line 94

def self.register_factory(factory)
  factory.names.each do |name|
    factories.register(name, factory)
  end
  factory
end

.register_sequence(sequence) ⇒ Object



105
106
107
108
109
110
# File 'lib/factory_bot.rb', line 105

def self.register_sequence(sequence)
  sequence.names.each do |name|
    sequences.register(name, sequence)
  end
  sequence
end

.register_strategy(strategy_name, strategy_class) ⇒ Object



132
133
134
135
# File 'lib/factory_bot.rb', line 132

def self.register_strategy(strategy_name, strategy_class)
  strategies.register(strategy_name, strategy_class)
  StrategySyntaxMethodRegistrar.new(strategy_name).define_strategy_methods
end

.register_trait(trait) ⇒ Object



121
122
123
124
125
126
# File 'lib/factory_bot.rb', line 121

def self.register_trait(trait)
  trait.names.each do |name|
    traits.register(name, trait)
  end
  trait
end

.reloadObject



2
3
4
5
6
7
# File 'lib/factory_bot/reload.rb', line 2

def self.reload
  Internal.reset_configuration
  register_default_strategies
  register_default_callbacks
  find_definitions
end

.reset_configurationObject



57
58
59
# File 'lib/factory_bot.rb', line 57

def self.reset_configuration
  Internal.reset_configuration
end

.rewind_sequencesObject



116
117
118
119
# File 'lib/factory_bot.rb', line 116

def self.rewind_sequences
  sequences.each(&:rewind)
  Internal.rewind_inline_sequences
end

.sequence_by_name(name) ⇒ Object



112
113
114
# File 'lib/factory_bot.rb', line 112

def self.sequence_by_name(name)
  sequences.find(name)
end

.strategy_by_name(name) ⇒ Object



137
138
139
# File 'lib/factory_bot.rb', line 137

def self.strategy_by_name(name)
  strategies.find(name)
end

.trait_by_name(name) ⇒ Object



128
129
130
# File 'lib/factory_bot.rb', line 128

def self.trait_by_name(name)
  traits.find(name)
end