factory_bot 4.11.0 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +6 -0
  3. data/GETTING_STARTED.md +121 -37
  4. data/LICENSE +1 -1
  5. data/NEWS.md +351 -0
  6. data/README.md +21 -25
  7. data/lib/factory_bot/aliases.rb +1 -1
  8. data/lib/factory_bot/attribute/dynamic.rb +1 -0
  9. data/lib/factory_bot/attribute.rb +4 -39
  10. data/lib/factory_bot/attribute_assigner.rb +21 -6
  11. data/lib/factory_bot/attribute_list.rb +2 -1
  12. data/lib/factory_bot/callback.rb +3 -2
  13. data/lib/factory_bot/configuration.rb +16 -20
  14. data/lib/factory_bot/declaration/association.rb +14 -1
  15. data/lib/factory_bot/declaration/dynamic.rb +3 -1
  16. data/lib/factory_bot/declaration/implicit.rb +7 -2
  17. data/lib/factory_bot/declaration.rb +4 -4
  18. data/lib/factory_bot/declaration_list.rb +1 -1
  19. data/lib/factory_bot/decorator/attribute_hash.rb +1 -1
  20. data/lib/factory_bot/decorator/invocation_tracker.rb +1 -1
  21. data/lib/factory_bot/decorator.rb +5 -1
  22. data/lib/factory_bot/definition.rb +10 -7
  23. data/lib/factory_bot/definition_hierarchy.rb +1 -11
  24. data/lib/factory_bot/definition_proxy.rb +59 -62
  25. data/lib/factory_bot/errors.rb +7 -4
  26. data/lib/factory_bot/evaluation.rb +1 -1
  27. data/lib/factory_bot/evaluator.rb +5 -5
  28. data/lib/factory_bot/factory.rb +8 -8
  29. data/lib/factory_bot/factory_runner.rb +3 -3
  30. data/lib/factory_bot/find_definitions.rb +1 -1
  31. data/lib/factory_bot/internal.rb +104 -0
  32. data/lib/factory_bot/linter.rb +36 -19
  33. data/lib/factory_bot/null_factory.rb +4 -1
  34. data/lib/factory_bot/null_object.rb +2 -2
  35. data/lib/factory_bot/registry.rb +15 -6
  36. data/lib/factory_bot/reload.rb +3 -3
  37. data/lib/factory_bot/sequence.rb +0 -1
  38. data/lib/factory_bot/strategy/null.rb +2 -4
  39. data/lib/factory_bot/strategy/stub.rb +32 -31
  40. data/lib/factory_bot/strategy_calculator.rb +1 -1
  41. data/lib/factory_bot/strategy_syntax_method_registrar.rb +13 -2
  42. data/lib/factory_bot/syntax/default.rb +12 -24
  43. data/lib/factory_bot/syntax/methods.rb +32 -9
  44. data/lib/factory_bot/syntax.rb +2 -2
  45. data/lib/factory_bot/trait.rb +6 -3
  46. data/lib/factory_bot/version.rb +1 -1
  47. data/lib/factory_bot.rb +103 -138
  48. metadata +73 -32
  49. data/NEWS +0 -303
  50. data/lib/factory_bot/attribute/static.rb +0 -16
  51. data/lib/factory_bot/declaration/static.rb +0 -26
  52. data/lib/factory_bot/decorator/class_key_hash.rb +0 -28
@@ -1,6 +1,19 @@
1
1
  module FactoryBot
2
2
  class DefinitionProxy
3
- UNPROXIED_METHODS = %w(__send__ __id__ nil? send object_id extend instance_eval initialize block_given? raise caller method)
3
+ UNPROXIED_METHODS = %w(
4
+ __send__
5
+ __id__
6
+ nil?
7
+ send
8
+ object_id
9
+ extend
10
+ instance_eval
11
+ initialize
12
+ block_given?
13
+ raise
14
+ caller
15
+ method
16
+ ).freeze
4
17
 
5
18
  (instance_methods + private_instance_methods).each do |method|
6
19
  undef_method(method) unless UNPROXIED_METHODS.include?(method.to_s)
@@ -21,43 +34,21 @@ module FactoryBot
21
34
  raise FactoryBot::MethodDefinitionError, message
22
35
  end
23
36
 
24
- # Adds an attribute that should be assigned on generated instances for this
25
- # factory.
26
- #
27
- # This method should be called with either a value or block, but not both. If
28
- # called with a block, the attribute will be generated "lazily," whenever an
29
- # instance is generated. Lazy attribute blocks will not be called if that
37
+ # Adds an attribute to the factory.
38
+ # The attribute value will be generated "lazily"
39
+ # by calling the block whenever an instance is generated.
40
+ # The block will not be called if the
30
41
  # attribute is overridden for a specific instance.
31
42
  #
32
- # When defining lazy attributes, an instance of FactoryBot::Strategy will
33
- # be yielded, allowing associations to be built using the correct build
34
- # strategy.
35
- #
36
43
  # Arguments:
37
44
  # * name: +Symbol+ or +String+
38
45
  # The name of this attribute. This will be assigned using "name=" for
39
46
  # generated instances.
40
- # * value: +Object+
41
- # If no block is given, this value will be used for this attribute.
42
- def add_attribute(name, value = nil, &block)
43
- raise AttributeDefinitionError, 'Both value and block given' if value && block_given?
44
-
45
- declaration = if block_given?
46
- Declaration::Dynamic.new(name, @ignore, block)
47
- else
48
- warn_static_attribute_deprecation(name, value)
49
- Declaration::Static.new(name, value, @ignore)
50
- end
51
-
47
+ def add_attribute(name, &block)
48
+ declaration = Declaration::Dynamic.new(name, @ignore, block)
52
49
  @definition.declare_attribute(declaration)
53
50
  end
54
51
 
55
- def ignore(&block)
56
- ActiveSupport::Deprecation.warn "`#ignore` is deprecated and will be "\
57
- "removed in 5.0. Please use `#transient` instead."
58
- transient(&block)
59
- end
60
-
61
52
  def transient(&block)
62
53
  proxy = DefinitionProxy.new(@definition, true)
63
54
  proxy.instance_eval(&block)
@@ -67,40 +58,48 @@ module FactoryBot
67
58
  # attribute, so that:
68
59
  #
69
60
  # factory :user do
70
- # name 'Billy Idol'
61
+ # name { 'Billy Idol' }
71
62
  # end
72
63
  #
73
64
  # and:
74
65
  #
75
66
  # factory :user do
76
- # add_attribute :name, 'Billy Idol'
67
+ # add_attribute(:name) { 'Billy Idol' }
77
68
  # end
78
69
  #
79
70
  # are equivalent.
80
71
  #
81
- # If no argument or block is given, factory_bot will look for a sequence
82
- # or association with the same name. This means that:
72
+ # If no argument or block is given, factory_bot will first look for an
73
+ # association, then for a sequence, and finally for a trait with the same
74
+ # name. This means that given an "admin" trait, an "email" sequence, and an
75
+ # "account" factory:
83
76
  #
84
- # factory :user do
85
- # email { create(:email) }
77
+ # factory :user, traits: [:admin] do
78
+ # email { generate(:email) }
86
79
  # association :account
87
80
  # end
88
81
  #
89
82
  # and:
90
83
  #
91
84
  # factory :user do
85
+ # admin
92
86
  # email
93
87
  # account
94
88
  # end
95
89
  #
96
90
  # are equivalent.
97
- def method_missing(name, *args, &block)
98
- if args.empty? && block.nil?
99
- @definition.declare_attribute(Declaration::Implicit.new(name, @definition, @ignore))
100
- elsif args.first.respond_to?(:has_key?) && args.first.has_key?(:factory)
101
- association(name, *args)
91
+ def method_missing(name, *args, &block) # rubocop:disable Style/MissingRespondToMissing, Style/MethodMissingSuper
92
+ association_options = args.first
93
+
94
+ if association_options.nil?
95
+ __declare_attribute__(name, block)
96
+ elsif __valid_association_options?(association_options)
97
+ association(name, association_options)
102
98
  else
103
- add_attribute(name, *args, &block)
99
+ raise NoMethodError.new(<<~MSG)
100
+ undefined method '#{name}' in '#{@definition.name}' factory
101
+ Did you mean? '#{name} { #{association_options.inspect} }'
102
+ MSG
104
103
  end
105
104
  end
106
105
 
@@ -122,6 +121,7 @@ module FactoryBot
122
121
  # Except that no globally available sequence will be defined.
123
122
  def sequence(name, *args, &block)
124
123
  sequence = Sequence.new(name, *args, &block)
124
+ FactoryBot::Internal.register_inline_sequence(sequence)
125
125
  add_attribute(name) { increment_sequence(sequence) }
126
126
  end
127
127
 
@@ -149,7 +149,15 @@ module FactoryBot
149
149
  # name of the factory. For example, a "user" association will by
150
150
  # default use the "user" factory.
151
151
  def association(name, *options)
152
- @definition.declare_attribute(Declaration::Association.new(name, *options))
152
+ if block_given?
153
+ raise AssociationDefinitionError.new(
154
+ "Unexpected block passed to '#{name}' association "\
155
+ "in '#{@definition.name}' factory",
156
+ )
157
+ else
158
+ declaration = Declaration::Association.new(name, *options)
159
+ @definition.declare_attribute(declaration)
160
+ end
153
161
  end
154
162
 
155
163
  def to_create(&block)
@@ -174,28 +182,17 @@ module FactoryBot
174
182
 
175
183
  private
176
184
 
177
- def warn_static_attribute_deprecation(name, value)
178
- attribute_caller = caller(2)
179
-
180
- if attribute_caller[0].include?("method_missing")
181
- attribute_caller = caller(3)
185
+ def __declare_attribute__(name, block)
186
+ if block.nil?
187
+ declaration = Declaration::Implicit.new(name, @definition, @ignore)
188
+ @definition.declare_attribute(declaration)
189
+ else
190
+ add_attribute(name, &block)
182
191
  end
192
+ end
183
193
 
184
- ActiveSupport::Deprecation.warn(<<-MSG, attribute_caller)
185
- Static attributes will be removed in FactoryBot 5.0. Please use dynamic
186
- attributes instead by wrapping the attribute value in a block:
187
-
188
- #{name} { #{value.inspect} }
189
-
190
- To automatically update from static attributes to dynamic ones,
191
- install rubocop-rspec and run:
192
-
193
- rubocop \\
194
- --require rubocop-rspec \\
195
- --only FactoryBot/AttributeDefinedStatically \\
196
- --auto-correct
197
-
198
- MSG
194
+ def __valid_association_options?(options)
195
+ options.respond_to?(:has_key?) && options.has_key?(:factory)
199
196
  end
200
197
  end
201
198
  end
@@ -2,6 +2,9 @@ module FactoryBot
2
2
  # Raised when a factory is defined that attempts to instantiate itself.
3
3
  class AssociationDefinitionError < RuntimeError; end
4
4
 
5
+ # Raised when a trait is defined that references itself.
6
+ class TraitDefinitionError < RuntimeError; end
7
+
5
8
  # Raised when a callback is defined that has an invalid name
6
9
  class InvalidCallbackNameError < RuntimeError; end
7
10
 
@@ -11,12 +14,12 @@ module FactoryBot
11
14
  # Raised when attempting to register a sequence from a dynamic attribute block
12
15
  class SequenceAbuseError < RuntimeError; end
13
16
 
14
- # Raised when defining an invalid attribute:
15
- # * Defining an attribute which has a name ending in "="
16
- # * Defining an attribute with both a static and lazy value
17
- # * Defining an attribute twice in the same factory
17
+ # Raised when defining an attribute twice in the same factory
18
18
  class AttributeDefinitionError < RuntimeError; end
19
19
 
20
+ # Raised when attempting to pass a block to an association definition
21
+ class AssociationDefinitionError < RuntimeError; end
22
+
20
23
  # Raised when a method is defined in a factory or trait with arguments
21
24
  class MethodDefinitionError < RuntimeError; end
22
25
 
@@ -1,4 +1,4 @@
1
- require 'observer'
1
+ require "observer"
2
2
 
3
3
  module FactoryBot
4
4
  class Evaluation
@@ -1,5 +1,5 @@
1
- require 'active_support/core_ext/hash/except'
2
- require 'active_support/core_ext/class/attribute'
1
+ require "active_support/core_ext/hash/except"
2
+ require "active_support/core_ext/class/attribute"
3
3
 
4
4
  module FactoryBot
5
5
  # @api private
@@ -37,7 +37,7 @@ module FactoryBot
37
37
  @instance = object_instance
38
38
  end
39
39
 
40
- def method_missing(method_name, *args, &block)
40
+ def method_missing(method_name, *args, &block) # rubocop:disable Style/MethodMissingSuper
41
41
  if @instance.respond_to?(method_name)
42
42
  @instance.send(method_name, *args, &block)
43
43
  else
@@ -45,7 +45,7 @@ module FactoryBot
45
45
  end
46
46
  end
47
47
 
48
- def respond_to_missing?(method_name, include_private = false)
48
+ def respond_to_missing?(method_name, _include_private = false)
49
49
  @instance.respond_to?(method_name) || SyntaxRunner.new.respond_to?(method_name)
50
50
  end
51
51
 
@@ -66,7 +66,7 @@ module FactoryBot
66
66
  end
67
67
 
68
68
  def self.define_attribute(name, &block)
69
- if method_defined?(name) || private_method_defined?(name)
69
+ if instance_methods(false).include?(name) || private_instance_methods(false).include?(name)
70
70
  undef_method(name)
71
71
  end
72
72
 
@@ -1,5 +1,5 @@
1
- require 'active_support/core_ext/hash/keys'
2
- require 'active_support/inflector'
1
+ require "active_support/core_ext/hash/keys"
2
+ require "active_support/inflector"
3
3
 
4
4
  module FactoryBot
5
5
  # @api private
@@ -21,10 +21,10 @@ module FactoryBot
21
21
 
22
22
  def build_class
23
23
  @build_class ||= if class_name.is_a? Class
24
- class_name
25
- else
26
- class_name.to_s.camelize.constantize
27
- end
24
+ class_name
25
+ else
26
+ class_name.to_s.camelize.constantize
27
+ end
28
28
  end
29
29
 
30
30
  def run(build_strategy, overrides, &block)
@@ -91,7 +91,7 @@ module FactoryBot
91
91
  end
92
92
 
93
93
  def with_traits(traits)
94
- self.clone.tap do |factory_with_traits|
94
+ clone.tap do |factory_with_traits|
95
95
  factory_with_traits.append_traits traits
96
96
  end
97
97
  end
@@ -145,7 +145,7 @@ module FactoryBot
145
145
 
146
146
  def parent
147
147
  if @parent
148
- FactoryBot.factory_by_name(@parent)
148
+ FactoryBot::Internal.factory_by_name(@parent)
149
149
  else
150
150
  NullFactory.new
151
151
  end
@@ -9,7 +9,7 @@ module FactoryBot
9
9
  end
10
10
 
11
11
  def run(runner_strategy = @strategy, &block)
12
- factory = FactoryBot.factory_by_name(@name)
12
+ factory = FactoryBot::Internal.factory_by_name(@name)
13
13
 
14
14
  factory.compile
15
15
 
@@ -22,10 +22,10 @@ module FactoryBot
22
22
  strategy: runner_strategy,
23
23
  traits: @traits,
24
24
  overrides: @overrides,
25
- factory: factory
25
+ factory: factory,
26
26
  }
27
27
 
28
- ActiveSupport::Notifications.instrument('factory_bot.run_factory', instrumentation_payload) do
28
+ ActiveSupport::Notifications.instrument("factory_bot.run_factory", instrumentation_payload) do
29
29
  factory.run(runner_strategy, @overrides, &block)
30
30
  end
31
31
  end
@@ -16,7 +16,7 @@ module FactoryBot
16
16
  load("#{path}.rb") if File.exist?("#{path}.rb")
17
17
 
18
18
  if File.directory? path
19
- Dir[File.join(path, '**', '*.rb')].sort.each do |file|
19
+ Dir[File.join(path, "**", "*.rb")].sort.each do |file|
20
20
  load file
21
21
  end
22
22
  end
@@ -0,0 +1,104 @@
1
+ module FactoryBot
2
+ # @api private
3
+ module Internal
4
+ class << self
5
+ delegate :after,
6
+ :before,
7
+ :callback_names,
8
+ :callbacks,
9
+ :constructor,
10
+ :factories,
11
+ :initialize_with,
12
+ :inline_sequences,
13
+ :sequences,
14
+ :skip_create,
15
+ :strategies,
16
+ :to_create,
17
+ :traits,
18
+ to: :configuration
19
+
20
+ def configuration
21
+ @configuration ||= Configuration.new
22
+ end
23
+
24
+ def reset_configuration
25
+ @configuration = nil
26
+ end
27
+
28
+ def register_inline_sequence(sequence)
29
+ inline_sequences.push(sequence)
30
+ end
31
+
32
+ def rewind_inline_sequences
33
+ inline_sequences.each(&:rewind)
34
+ end
35
+
36
+ def register_trait(trait)
37
+ trait.names.each do |name|
38
+ traits.register(name, trait)
39
+ end
40
+ trait
41
+ end
42
+
43
+ def trait_by_name(name)
44
+ traits.find(name)
45
+ end
46
+
47
+ def register_sequence(sequence)
48
+ sequence.names.each do |name|
49
+ sequences.register(name, sequence)
50
+ end
51
+ sequence
52
+ end
53
+
54
+ def sequence_by_name(name)
55
+ sequences.find(name)
56
+ end
57
+
58
+ def rewind_sequences
59
+ sequences.each(&:rewind)
60
+ rewind_inline_sequences
61
+ end
62
+
63
+ def register_factory(factory)
64
+ factory.names.each do |name|
65
+ factories.register(name, factory)
66
+ end
67
+ factory
68
+ end
69
+
70
+ def factory_by_name(name)
71
+ factories.find(name)
72
+ end
73
+
74
+ def register_strategy(strategy_name, strategy_class)
75
+ strategies.register(strategy_name, strategy_class)
76
+ StrategySyntaxMethodRegistrar.new(strategy_name).define_strategy_methods
77
+ end
78
+
79
+ def strategy_by_name(name)
80
+ strategies.find(name)
81
+ end
82
+
83
+ def register_default_strategies
84
+ register_strategy(:build, FactoryBot::Strategy::Build)
85
+ register_strategy(:create, FactoryBot::Strategy::Create)
86
+ register_strategy(:attributes_for, FactoryBot::Strategy::AttributesFor)
87
+ register_strategy(:build_stubbed, FactoryBot::Strategy::Stub)
88
+ register_strategy(:null, FactoryBot::Strategy::Null)
89
+ end
90
+
91
+ def register_default_callbacks
92
+ register_callback(:after_create)
93
+ register_callback(:after_build)
94
+ register_callback(:after_stub)
95
+ register_callback(:before_create)
96
+ end
97
+
98
+ def register_callback(name)
99
+ name = name.to_sym
100
+ callback_names << name
101
+ end
102
+ end
103
+ end
104
+ end
@@ -1,10 +1,10 @@
1
1
  module FactoryBot
2
2
  class Linter
3
-
4
- def initialize(factories, linting_strategy, factory_strategy = :create)
3
+ def initialize(factories, strategy: :create, traits: false, verbose: false)
5
4
  @factories_to_lint = factories
6
- @linting_method = "lint_#{linting_strategy}"
7
- @factory_strategy = factory_strategy
5
+ @factory_strategy = strategy
6
+ @traits = traits
7
+ @verbose = verbose
8
8
  @invalid_factories = calculate_invalid_factories
9
9
  end
10
10
 
@@ -20,7 +20,7 @@ module FactoryBot
20
20
 
21
21
  def calculate_invalid_factories
22
22
  factories_to_lint.reduce(Hash.new([])) do |result, factory|
23
- errors = send(@linting_method, factory)
23
+ errors = lint(factory)
24
24
  result[factory] |= errors unless errors.empty?
25
25
  result
26
26
  end
@@ -37,6 +37,13 @@ module FactoryBot
37
37
  "* #{location} - #{message} (#{@wrapped_error.class.name})"
38
38
  end
39
39
 
40
+ def verbose_message
41
+ <<~MESSAGE
42
+ #{message}
43
+ #{@wrapped_error.backtrace.join("\n ")}
44
+ MESSAGE
45
+ end
46
+
40
47
  def location
41
48
  @factory.name
42
49
  end
@@ -53,12 +60,20 @@ module FactoryBot
53
60
  end
54
61
  end
55
62
 
63
+ def lint(factory)
64
+ if @traits
65
+ lint_factory(factory) + lint_traits(factory)
66
+ else
67
+ lint_factory(factory)
68
+ end
69
+ end
70
+
56
71
  def lint_factory(factory)
57
72
  result = []
58
73
  begin
59
74
  FactoryBot.public_send(factory_strategy, factory.name)
60
- rescue => error
61
- result |= [FactoryError.new(error, factory)]
75
+ rescue StandardError => e
76
+ result |= [FactoryError.new(e, factory)]
62
77
  end
63
78
  result
64
79
  end
@@ -68,30 +83,32 @@ module FactoryBot
68
83
  factory.definition.defined_traits.map(&:name).each do |trait_name|
69
84
  begin
70
85
  FactoryBot.public_send(factory_strategy, factory.name, trait_name)
71
- rescue => error
86
+ rescue StandardError => e
72
87
  result |=
73
- [FactoryTraitError.new(error, factory, trait_name)]
88
+ [FactoryTraitError.new(e, factory, trait_name)]
74
89
  end
75
90
  end
76
91
  result
77
92
  end
78
93
 
79
- def lint_factory_and_traits(factory)
80
- errors = lint_factory(factory)
81
- errors |= lint_traits(factory)
82
- errors
83
- end
84
-
85
94
  def error_message
86
95
  lines = invalid_factories.map do |_factory, exceptions|
87
- exceptions.map(&:message)
96
+ exceptions.map(&error_message_type)
88
97
  end.flatten
89
98
 
90
- <<-ERROR_MESSAGE.strip
91
- The following factories are invalid:
99
+ <<~ERROR_MESSAGE.strip
100
+ The following factories are invalid:
92
101
 
93
- #{lines.join("\n")}
102
+ #{lines.join("\n")}
94
103
  ERROR_MESSAGE
95
104
  end
105
+
106
+ def error_message_type
107
+ if @verbose
108
+ :verbose_message
109
+ else
110
+ :message
111
+ end
112
+ end
96
113
  end
97
114
  end
@@ -8,11 +8,14 @@ module FactoryBot
8
8
  end
9
9
 
10
10
  delegate :defined_traits, :callbacks, :attributes, :constructor,
11
- :to_create, to: :definition
11
+ :to_create, to: :definition
12
12
 
13
13
  def compile; end
14
+
14
15
  def class_name; end
16
+
15
17
  def evaluator_class; FactoryBot::Evaluator; end
18
+
16
19
  def hierarchy_class; FactoryBot::DefinitionHierarchy; end
17
20
  end
18
21
  end
@@ -13,11 +13,11 @@ module FactoryBot
13
13
  end
14
14
  end
15
15
 
16
- def respond_to?(method, include_private=false)
16
+ def respond_to?(method, _include_private = false)
17
17
  @methods_to_respond_to.include? method.to_s
18
18
  end
19
19
 
20
- def respond_to_missing?(*args)
20
+ def respond_to_missing?(*)
21
21
  false
22
22
  end
23
23
  end
@@ -1,3 +1,5 @@
1
+ require "active_support/core_ext/hash/indifferent_access"
2
+
1
3
  module FactoryBot
2
4
  class Registry
3
5
  include Enumerable
@@ -6,7 +8,7 @@ module FactoryBot
6
8
 
7
9
  def initialize(name)
8
10
  @name = name
9
- @items = Decorator::ClassKeyHash.new({})
11
+ @items = ActiveSupport::HashWithIndifferentAccess.new
10
12
  end
11
13
 
12
14
  def clear
@@ -18,11 +20,9 @@ module FactoryBot
18
20
  end
19
21
 
20
22
  def find(name)
21
- if registered?(name)
22
- @items[name]
23
- else
24
- raise ArgumentError, "#{@name} not registered: #{name}"
25
- end
23
+ @items.fetch(name)
24
+ rescue KeyError => e
25
+ raise key_error_with_custom_message(e)
26
26
  end
27
27
 
28
28
  alias :[] :find
@@ -34,5 +34,14 @@ module FactoryBot
34
34
  def registered?(name)
35
35
  @items.key?(name)
36
36
  end
37
+
38
+ private
39
+
40
+ def key_error_with_custom_message(key_error)
41
+ message = key_error.message.sub("key not found", "#{@name} not registered")
42
+ error = KeyError.new(message)
43
+ error.set_backtrace(key_error.backtrace)
44
+ error
45
+ end
37
46
  end
38
47
  end
@@ -1,8 +1,8 @@
1
1
  module FactoryBot
2
2
  def self.reload
3
- reset_configuration
4
- register_default_strategies
5
- register_default_callbacks
3
+ Internal.reset_configuration
4
+ Internal.register_default_strategies
5
+ Internal.register_default_callbacks
6
6
  find_definitions
7
7
  end
8
8
  end
@@ -1,5 +1,4 @@
1
1
  module FactoryBot
2
-
3
2
  # Sequences are defined using sequence within a FactoryBot.define block.
4
3
  # Sequence values are generated using next.
5
4
  # @api private
@@ -1,11 +1,9 @@
1
1
  module FactoryBot
2
2
  module Strategy
3
3
  class Null
4
- def association(runner)
5
- end
4
+ def association(runner); end
6
5
 
7
- def result(evaluation)
8
- end
6
+ def result(evaluation); end
9
7
  end
10
8
  end
11
9
  end