Module: FactoryGirl

Extended by:
Syntax::Default
Defined in:
lib/factory_girl.rb,
lib/factory_girl/trait.rb,
lib/factory_girl/errors.rb,
lib/factory_girl/reload.rb,
lib/factory_girl/syntax.rb,
lib/factory_girl/aliases.rb,
lib/factory_girl/factory.rb,
lib/factory_girl/version.rb,
lib/factory_girl/callback.rb,
lib/factory_girl/registry.rb,
lib/factory_girl/sequence.rb,
lib/factory_girl/attribute.rb,
lib/factory_girl/evaluator.rb,
lib/factory_girl/definition.rb,
lib/factory_girl/evaluation.rb,
lib/factory_girl/declaration.rb,
lib/factory_girl/null_object.rb,
lib/factory_girl/syntax/make.rb,
lib/factory_girl/syntax/sham.rb,
lib/factory_girl/null_factory.rb,
lib/factory_girl/strategy/null.rb,
lib/factory_girl/strategy/stub.rb,
lib/factory_girl/syntax_runner.rb,
lib/factory_girl/attribute_list.rb,
lib/factory_girl/factory_runner.rb,
lib/factory_girl/strategy/build.rb,
lib/factory_girl/syntax/default.rb,
lib/factory_girl/syntax/methods.rb,
lib/factory_girl/syntax/vintage.rb,
lib/factory_girl/strategy/create.rb,
lib/factory_girl/syntax/generate.rb,
lib/factory_girl/attribute/static.rb,
lib/factory_girl/declaration_list.rb,
lib/factory_girl/definition_proxy.rb,
lib/factory_girl/find_definitions.rb,
lib/factory_girl/syntax/blueprint.rb,
lib/factory_girl/attribute/dynamic.rb,
lib/factory_girl/attribute/sequence.rb,
lib/factory_girl/attribute_assigner.rb,
lib/factory_girl/callbacks_observer.rb,
lib/factory_girl/declaration/static.rb,
lib/factory_girl/declaration/dynamic.rb,
lib/factory_girl/strategy_calculator.rb,
lib/factory_girl/declaration/implicit.rb,
lib/factory_girl/attribute/association.rb,
lib/factory_girl/declaration/association.rb,
lib/factory_girl/evaluator_class_definer.rb,
lib/factory_girl/strategy/attributes_for.rb,
lib/factory_girl/disallows_duplicates_registry.rb

Defined Under Namespace

Modules: Strategy, Syntax Classes: AssociationDefinitionError, Attribute, AttributeAssigner, AttributeDefinitionError, AttributeList, Callback, CallbacksObserver, Declaration, DeclarationList, Definition, DefinitionProxy, DisallowsDuplicatesRegistry, DuplicateDefinitionError, Evaluation, Evaluator, EvaluatorClassDefiner, Factory, FactoryRunner, InvalidCallbackNameError, NullFactory, NullObject, Registry, Sequence, SequenceAbuseError, StrategyCalculator, SyntaxRunner, Trait

Constant Summary collapse

VERSION =
"3.2.0"

Class Attribute Summary collapse

Class Method Summary collapse

Methods included from Syntax::Default

define, modify

Methods included from Syntax::Methods

#build_list, #create_list, #generate

Class Attribute Details

.aliasesObject

:nodoc:



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

def aliases
  @aliases
end

.definition_file_pathsObject

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



8
9
10
# File 'lib/factory_girl/find_definitions.rb', line 8

def definition_file_paths
  @definition_file_paths
end

Class Method Details

.aliases_for(attribute) ⇒ Object

:nodoc:



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

def self.aliases_for(attribute) #:nodoc:
  aliases.collect do |params|
    pattern, replace = *params
    if pattern.match(attribute.to_s)
      attribute.to_s.sub(pattern, replace).to_sym
    end
  end.compact << attribute
end

.callback_namesObject



113
114
115
# File 'lib/factory_girl.rb', line 113

def self.callback_names
  [:after_build, :after_create, :after_stub, :before_create].freeze
end

.factoriesObject



39
40
41
# File 'lib/factory_girl.rb', line 39

def self.factories
  @factories ||= DisallowsDuplicatesRegistry.new(Registry.new("Factory"))
end

.factory_by_name(name) ⇒ Object



50
51
52
# File 'lib/factory_girl.rb', line 50

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

.find_definitionsObject

:nodoc:



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

def self.find_definitions #:nodoc:
  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.exists?("#{path}.rb")

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

.register_default_strategiesObject



106
107
108
109
110
111
# File 'lib/factory_girl.rb', line 106

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

.register_factory(factory) ⇒ Object



43
44
45
46
47
48
# File 'lib/factory_girl.rb', line 43

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

.register_sequence(sequence) ⇒ Object



58
59
60
61
62
63
# File 'lib/factory_girl.rb', line 58

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

.register_strategy(strategy_name, strategy_class) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/factory_girl.rb', line 88

def self.register_strategy(strategy_name, strategy_class)
  strategies.register(strategy_name, strategy_class)

  FactoryGirl::Syntax::Methods.module_exec do
    define_method(strategy_name) do |name, *traits_and_overrides, &block|
      instrumentation_payload = { name: name, strategy: strategy_name }

      ActiveSupport::Notifications.instrument("factory_girl.run_factory", instrumentation_payload) do
        FactoryRunner.new(name, strategy_class, traits_and_overrides).run(&block)
      end
    end
  end
end

.register_trait(trait) ⇒ Object



73
74
75
76
77
78
# File 'lib/factory_girl.rb', line 73

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

.reloadObject



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

def self.reload
  self.factories.clear
  self.sequences.clear
  self.traits.clear
  self.strategies.clear
  self.register_default_strategies
  self.find_definitions
end

.sequence_by_name(name) ⇒ Object



65
66
67
# File 'lib/factory_girl.rb', line 65

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

.sequencesObject



54
55
56
# File 'lib/factory_girl.rb', line 54

def self.sequences
  @sequences ||= DisallowsDuplicatesRegistry.new(Registry.new("Sequence"))
end

.strategiesObject



84
85
86
# File 'lib/factory_girl.rb', line 84

def self.strategies
  @strategies ||= Registry.new("Strategy")
end

.strategy_by_name(name) ⇒ Object



102
103
104
# File 'lib/factory_girl.rb', line 102

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

.trait_by_name(name) ⇒ Object



80
81
82
# File 'lib/factory_girl.rb', line 80

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

.traitsObject



69
70
71
# File 'lib/factory_girl.rb', line 69

def self.traits
  @traits ||= DisallowsDuplicatesRegistry.new(Registry.new("Trait"))
end