factory_bot 4.11.1 → 6.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +58 -13
  3. data/GETTING_STARTED.md +825 -153
  4. data/LICENSE +1 -1
  5. data/NEWS.md +385 -0
  6. data/README.md +20 -30
  7. data/lib/factory_bot/aliases.rb +3 -3
  8. data/lib/factory_bot/attribute/association.rb +2 -2
  9. data/lib/factory_bot/attribute/dynamic.rb +3 -2
  10. data/lib/factory_bot/attribute.rb +4 -39
  11. data/lib/factory_bot/attribute_assigner.rb +27 -12
  12. data/lib/factory_bot/attribute_list.rb +3 -2
  13. data/lib/factory_bot/callback.rb +4 -11
  14. data/lib/factory_bot/configuration.rb +15 -19
  15. data/lib/factory_bot/declaration/association.rb +33 -3
  16. data/lib/factory_bot/declaration/dynamic.rb +3 -1
  17. data/lib/factory_bot/declaration/implicit.rb +7 -2
  18. data/lib/factory_bot/declaration.rb +5 -5
  19. data/lib/factory_bot/declaration_list.rb +3 -3
  20. data/lib/factory_bot/decorator/attribute_hash.rb +1 -1
  21. data/lib/factory_bot/decorator/invocation_tracker.rb +2 -1
  22. data/lib/factory_bot/decorator.rb +20 -4
  23. data/lib/factory_bot/definition.rb +69 -21
  24. data/lib/factory_bot/definition_hierarchy.rb +1 -11
  25. data/lib/factory_bot/definition_proxy.rb +119 -64
  26. data/lib/factory_bot/enum.rb +27 -0
  27. data/lib/factory_bot/errors.rb +7 -4
  28. data/lib/factory_bot/evaluation.rb +1 -1
  29. data/lib/factory_bot/evaluator.rb +10 -11
  30. data/lib/factory_bot/evaluator_class_definer.rb +1 -1
  31. data/lib/factory_bot/factory.rb +12 -12
  32. data/lib/factory_bot/factory_runner.rb +4 -4
  33. data/lib/factory_bot/find_definitions.rb +2 -2
  34. data/lib/factory_bot/internal.rb +91 -0
  35. data/lib/factory_bot/linter.rb +41 -28
  36. data/lib/factory_bot/null_factory.rb +13 -4
  37. data/lib/factory_bot/null_object.rb +2 -6
  38. data/lib/factory_bot/registry.rb +17 -8
  39. data/lib/factory_bot/reload.rb +2 -3
  40. data/lib/factory_bot/sequence.rb +5 -6
  41. data/lib/factory_bot/strategy/attributes_for.rb +4 -0
  42. data/lib/factory_bot/strategy/build.rb +4 -0
  43. data/lib/factory_bot/strategy/create.rb +4 -0
  44. data/lib/factory_bot/strategy/null.rb +4 -0
  45. data/lib/factory_bot/strategy/stub.rb +41 -32
  46. data/lib/factory_bot/strategy_calculator.rb +1 -1
  47. data/lib/factory_bot/strategy_syntax_method_registrar.rb +13 -2
  48. data/lib/factory_bot/syntax/default.rb +13 -25
  49. data/lib/factory_bot/syntax/methods.rb +32 -9
  50. data/lib/factory_bot/syntax.rb +2 -2
  51. data/lib/factory_bot/trait.rb +7 -4
  52. data/lib/factory_bot/version.rb +1 -1
  53. data/lib/factory_bot.rb +71 -140
  54. metadata +46 -34
  55. data/NEWS +0 -306
  56. data/lib/factory_bot/attribute/static.rb +0 -16
  57. data/lib/factory_bot/declaration/static.rb +0 -26
  58. data/lib/factory_bot/decorator/class_key_hash.rb +0 -28
data/lib/factory_bot.rb CHANGED
@@ -1,59 +1,61 @@
1
- require 'set'
2
- require 'active_support/core_ext/module/delegation'
3
- require 'active_support/deprecation'
4
- require 'active_support/notifications'
5
-
6
- require 'factory_bot/definition_hierarchy'
7
- require 'factory_bot/configuration'
8
- require 'factory_bot/errors'
9
- require 'factory_bot/factory_runner'
10
- require 'factory_bot/strategy_syntax_method_registrar'
11
- require 'factory_bot/strategy_calculator'
12
- require 'factory_bot/strategy/build'
13
- require 'factory_bot/strategy/create'
14
- require 'factory_bot/strategy/attributes_for'
15
- require 'factory_bot/strategy/stub'
16
- require 'factory_bot/strategy/null'
17
- require 'factory_bot/registry'
18
- require 'factory_bot/null_factory'
19
- require 'factory_bot/null_object'
20
- require 'factory_bot/evaluation'
21
- require 'factory_bot/factory'
22
- require 'factory_bot/attribute_assigner'
23
- require 'factory_bot/evaluator'
24
- require 'factory_bot/evaluator_class_definer'
25
- require 'factory_bot/attribute'
26
- require 'factory_bot/callback'
27
- require 'factory_bot/callbacks_observer'
28
- require 'factory_bot/declaration_list'
29
- require 'factory_bot/declaration'
30
- require 'factory_bot/sequence'
31
- require 'factory_bot/attribute_list'
32
- require 'factory_bot/trait'
33
- require 'factory_bot/aliases'
34
- require 'factory_bot/definition'
35
- require 'factory_bot/definition_proxy'
36
- require 'factory_bot/syntax'
37
- require 'factory_bot/syntax_runner'
38
- require 'factory_bot/find_definitions'
39
- require 'factory_bot/reload'
40
- require 'factory_bot/decorator'
41
- require 'factory_bot/decorator/attribute_hash'
42
- require 'factory_bot/decorator/class_key_hash'
43
- require 'factory_bot/decorator/disallows_duplicates_registry'
44
- require 'factory_bot/decorator/invocation_tracker'
45
- require 'factory_bot/decorator/new_constructor'
46
- require 'factory_bot/linter'
47
- require 'factory_bot/version'
1
+ require "set"
2
+ require "active_support/core_ext/module/delegation"
3
+ require "active_support/core_ext/module/attribute_accessors"
4
+ require "active_support/deprecation"
5
+ require "active_support/notifications"
6
+
7
+ require "factory_bot/internal"
8
+ require "factory_bot/definition_hierarchy"
9
+ require "factory_bot/configuration"
10
+ require "factory_bot/errors"
11
+ require "factory_bot/factory_runner"
12
+ require "factory_bot/strategy_syntax_method_registrar"
13
+ require "factory_bot/strategy_calculator"
14
+ require "factory_bot/strategy/build"
15
+ require "factory_bot/strategy/create"
16
+ require "factory_bot/strategy/attributes_for"
17
+ require "factory_bot/strategy/stub"
18
+ require "factory_bot/strategy/null"
19
+ require "factory_bot/registry"
20
+ require "factory_bot/null_factory"
21
+ require "factory_bot/null_object"
22
+ require "factory_bot/evaluation"
23
+ require "factory_bot/factory"
24
+ require "factory_bot/attribute_assigner"
25
+ require "factory_bot/evaluator"
26
+ require "factory_bot/evaluator_class_definer"
27
+ require "factory_bot/attribute"
28
+ require "factory_bot/callback"
29
+ require "factory_bot/callbacks_observer"
30
+ require "factory_bot/declaration_list"
31
+ require "factory_bot/declaration"
32
+ require "factory_bot/sequence"
33
+ require "factory_bot/attribute_list"
34
+ require "factory_bot/trait"
35
+ require "factory_bot/enum"
36
+ require "factory_bot/aliases"
37
+ require "factory_bot/definition"
38
+ require "factory_bot/definition_proxy"
39
+ require "factory_bot/syntax"
40
+ require "factory_bot/syntax_runner"
41
+ require "factory_bot/find_definitions"
42
+ require "factory_bot/reload"
43
+ require "factory_bot/decorator"
44
+ require "factory_bot/decorator/attribute_hash"
45
+ require "factory_bot/decorator/disallows_duplicates_registry"
46
+ require "factory_bot/decorator/invocation_tracker"
47
+ require "factory_bot/decorator/new_constructor"
48
+ require "factory_bot/linter"
49
+ require "factory_bot/version"
48
50
 
49
51
  module FactoryBot
50
- def self.configuration
51
- @configuration ||= Configuration.new
52
- end
52
+ Deprecation = ActiveSupport::Deprecation.new("7.0", "factory_bot")
53
53
 
54
- def self.reset_configuration
55
- @configuration = nil
56
- end
54
+ mattr_accessor :use_parent_strategy, instance_accessor: false
55
+ self.use_parent_strategy = true
56
+
57
+ mattr_accessor :automatically_define_enum_traits, instance_accessor: false
58
+ self.automatically_define_enum_traits = true
57
59
 
58
60
  # Look for errors in factories and (optionally) their traits.
59
61
  # Parameters:
@@ -61,100 +63,29 @@ module FactoryBot
61
63
  # options:
62
64
  # traits: true - to lint traits as well as factories
63
65
  # strategy: :create - to specify the strategy for linting
66
+ # verbose: true - to include full backtraces for each linting error
64
67
  def self.lint(*args)
65
68
  options = args.extract_options!
66
69
  factories_to_lint = args[0] || FactoryBot.factories
67
- linting_strategy = options[:traits] ? :factory_and_traits : :factory
68
- factory_strategy = options[:strategy] || :create
69
- Linter.new(factories_to_lint, linting_strategy, factory_strategy).lint!
70
- end
71
-
72
- class << self
73
- delegate :factories,
74
- :sequences,
75
- :traits,
76
- :callbacks,
77
- :strategies,
78
- :callback_names,
79
- :to_create,
80
- :skip_create,
81
- :initialize_with,
82
- :constructor,
83
- :duplicate_attribute_assignment_from_initialize_with,
84
- :duplicate_attribute_assignment_from_initialize_with=,
85
- :allow_class_lookup,
86
- :allow_class_lookup=,
87
- :use_parent_strategy,
88
- :use_parent_strategy=,
89
- to: :configuration
90
- end
91
-
92
- def self.register_factory(factory)
93
- factory.names.each do |name|
94
- factories.register(name, factory)
95
- end
96
- factory
97
- end
98
-
99
- def self.factory_by_name(name)
100
- factories.find(name)
101
- end
102
-
103
- def self.register_sequence(sequence)
104
- sequence.names.each do |name|
105
- sequences.register(name, sequence)
106
- end
107
- sequence
108
- end
109
-
110
- def self.sequence_by_name(name)
111
- sequences.find(name)
112
- end
113
-
114
- def self.rewind_sequences
115
- sequences.each(&:rewind)
116
- end
117
-
118
- def self.register_trait(trait)
119
- trait.names.each do |name|
120
- traits.register(name, trait)
121
- end
122
- trait
123
- end
124
-
125
- def self.trait_by_name(name)
126
- traits.find(name)
70
+ Linter.new(factories_to_lint, **options).lint!
127
71
  end
128
72
 
129
- def self.register_strategy(strategy_name, strategy_class)
130
- strategies.register(strategy_name, strategy_class)
131
- StrategySyntaxMethodRegistrar.new(strategy_name).define_strategy_methods
73
+ # Set the starting value for ids when using the build_stubbed strategy
74
+ #
75
+ # Arguments:
76
+ # * starting_id +Integer+
77
+ # The new starting id value.
78
+ def self.build_stubbed_starting_id=(starting_id)
79
+ Strategy::Stub.next_id = starting_id - 1
132
80
  end
133
81
 
134
- def self.strategy_by_name(name)
135
- strategies.find(name)
136
- end
137
-
138
- def self.register_default_strategies
139
- register_strategy(:build, FactoryBot::Strategy::Build)
140
- register_strategy(:create, FactoryBot::Strategy::Create)
141
- register_strategy(:attributes_for, FactoryBot::Strategy::AttributesFor)
142
- register_strategy(:build_stubbed, FactoryBot::Strategy::Stub)
143
- register_strategy(:null, FactoryBot::Strategy::Null)
144
- end
145
-
146
- def self.register_default_callbacks
147
- register_callback(:after_build)
148
- register_callback(:after_create)
149
- register_callback(:after_stub)
150
- register_callback(:before_create)
151
- end
152
-
153
- def self.register_callback(name)
154
- name = name.to_sym
155
- callback_names << name
82
+ class << self
83
+ delegate :factories,
84
+ :register_strategy,
85
+ :rewind_sequences,
86
+ :strategy_by_name,
87
+ to: Internal
156
88
  end
157
89
  end
158
90
 
159
- FactoryBot.register_default_strategies
160
- FactoryBot.register_default_callbacks
91
+ FactoryBot::Internal.register_default_strategies
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.11.1
4
+ version: 6.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Clayton
8
8
  - Joe Ferris
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-09-07 00:00:00.000000000 Z
12
+ date: 2022-03-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -17,42 +17,42 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 3.0.0
20
+ version: 5.0.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 3.0.0
27
+ version: 5.0.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: activerecord
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 3.0.0
34
+ version: '0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: 3.0.0
41
+ version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: appraisal
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - "~>"
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: 2.1.0
48
+ version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - "~>"
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: 2.1.0
55
+ version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: aruba
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -71,46 +71,60 @@ dependencies:
71
71
  name: cucumber
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - "~>"
74
+ - - ">="
75
75
  - !ruby/object:Gem::Version
76
- version: 1.3.15
76
+ version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - "~>"
81
+ - - ">="
82
82
  - !ruby/object:Gem::Version
83
- version: 1.3.15
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rake
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
84
98
  - !ruby/object:Gem::Dependency
85
99
  name: rspec
86
100
  requirement: !ruby/object:Gem::Requirement
87
101
  requirements:
88
- - - "~>"
102
+ - - ">="
89
103
  - !ruby/object:Gem::Version
90
- version: '3.0'
104
+ version: '0'
91
105
  type: :development
92
106
  prerelease: false
93
107
  version_requirements: !ruby/object:Gem::Requirement
94
108
  requirements:
95
- - - "~>"
109
+ - - ">="
96
110
  - !ruby/object:Gem::Version
97
- version: '3.0'
111
+ version: '0'
98
112
  - !ruby/object:Gem::Dependency
99
113
  name: rspec-its
100
114
  requirement: !ruby/object:Gem::Requirement
101
115
  requirements:
102
- - - "~>"
116
+ - - ">="
103
117
  - !ruby/object:Gem::Version
104
- version: '1.0'
118
+ version: '0'
105
119
  type: :development
106
120
  prerelease: false
107
121
  version_requirements: !ruby/object:Gem::Requirement
108
122
  requirements:
109
- - - "~>"
123
+ - - ">="
110
124
  - !ruby/object:Gem::Version
111
- version: '1.0'
125
+ version: '0'
112
126
  - !ruby/object:Gem::Dependency
113
- name: simplecov
127
+ name: standard
114
128
  requirement: !ruby/object:Gem::Requirement
115
129
  requirements:
116
130
  - - ">="
@@ -124,7 +138,7 @@ dependencies:
124
138
  - !ruby/object:Gem::Version
125
139
  version: '0'
126
140
  - !ruby/object:Gem::Dependency
127
- name: timecop
141
+ name: simplecov
128
142
  requirement: !ruby/object:Gem::Requirement
129
143
  requirements:
130
144
  - - ">="
@@ -165,7 +179,7 @@ files:
165
179
  - GETTING_STARTED.md
166
180
  - LICENSE
167
181
  - NAME.md
168
- - NEWS
182
+ - NEWS.md
169
183
  - README.md
170
184
  - lib/factory_bot.rb
171
185
  - lib/factory_bot/aliases.rb
@@ -173,7 +187,6 @@ files:
173
187
  - lib/factory_bot/attribute/association.rb
174
188
  - lib/factory_bot/attribute/dynamic.rb
175
189
  - lib/factory_bot/attribute/sequence.rb
176
- - lib/factory_bot/attribute/static.rb
177
190
  - lib/factory_bot/attribute_assigner.rb
178
191
  - lib/factory_bot/attribute_list.rb
179
192
  - lib/factory_bot/callback.rb
@@ -183,17 +196,16 @@ files:
183
196
  - lib/factory_bot/declaration/association.rb
184
197
  - lib/factory_bot/declaration/dynamic.rb
185
198
  - lib/factory_bot/declaration/implicit.rb
186
- - lib/factory_bot/declaration/static.rb
187
199
  - lib/factory_bot/declaration_list.rb
188
200
  - lib/factory_bot/decorator.rb
189
201
  - lib/factory_bot/decorator/attribute_hash.rb
190
- - lib/factory_bot/decorator/class_key_hash.rb
191
202
  - lib/factory_bot/decorator/disallows_duplicates_registry.rb
192
203
  - lib/factory_bot/decorator/invocation_tracker.rb
193
204
  - lib/factory_bot/decorator/new_constructor.rb
194
205
  - lib/factory_bot/definition.rb
195
206
  - lib/factory_bot/definition_hierarchy.rb
196
207
  - lib/factory_bot/definition_proxy.rb
208
+ - lib/factory_bot/enum.rb
197
209
  - lib/factory_bot/errors.rb
198
210
  - lib/factory_bot/evaluation.rb
199
211
  - lib/factory_bot/evaluator.rb
@@ -201,6 +213,7 @@ files:
201
213
  - lib/factory_bot/factory.rb
202
214
  - lib/factory_bot/factory_runner.rb
203
215
  - lib/factory_bot/find_definitions.rb
216
+ - lib/factory_bot/internal.rb
204
217
  - lib/factory_bot/linter.rb
205
218
  - lib/factory_bot/null_factory.rb
206
219
  - lib/factory_bot/null_object.rb
@@ -224,7 +237,7 @@ homepage: https://github.com/thoughtbot/factory_bot
224
237
  licenses:
225
238
  - MIT
226
239
  metadata: {}
227
- post_install_message:
240
+ post_install_message:
228
241
  rdoc_options: []
229
242
  require_paths:
230
243
  - lib
@@ -232,16 +245,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
232
245
  requirements:
233
246
  - - ">="
234
247
  - !ruby/object:Gem::Version
235
- version: 1.9.2
248
+ version: 2.5.0
236
249
  required_rubygems_version: !ruby/object:Gem::Requirement
237
250
  requirements:
238
251
  - - ">="
239
252
  - !ruby/object:Gem::Version
240
253
  version: '0'
241
254
  requirements: []
242
- rubyforge_project:
243
- rubygems_version: 2.7.7
244
- signing_key:
255
+ rubygems_version: 3.1.6
256
+ signing_key:
245
257
  specification_version: 4
246
258
  summary: factory_bot provides a framework and DSL for defining and using model instance
247
259
  factories.