factory_bot 6.2.1 → 6.3.0
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.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +2 -2
- data/GETTING_STARTED.md +49 -2
- data/NEWS.md +27 -1
- data/README.md +17 -15
- data/lib/factory_bot/attribute/dynamic.rb +2 -2
- data/lib/factory_bot/definition.rb +26 -8
- data/lib/factory_bot/definition_proxy.rb +1 -1
- data/lib/factory_bot/registry.rb +15 -3
- data/lib/factory_bot/strategy/stub.rb +2 -2
- data/lib/factory_bot/version.rb +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be53175a79d79c70dbaae41a86638d7013b968cecf59aaaa1cedc813ef4e4bc6
|
4
|
+
data.tar.gz: 4d3312a1ec50b608daa376d41e176ee713fba29ee80c1ce0acd0a646ce4a9956
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6077f43c7fc1486a2b1ac6d009f3c95e5c736afbe76c62d1818eb8ad26e77aa9f249b74dd1715b11da3bc989abee47a9a28f4da250e8fe10b036aa4121afc786
|
7
|
+
data.tar.gz: c4de0a35286906b04e4d4d0e489e437135a1553241f80e5338332b90657e253f055084e5c040e4dc6097b79102a5781c5226a89d89c9108edfb97c1b616fdaa0
|
data/CONTRIBUTING.md
CHANGED
@@ -94,12 +94,12 @@ Use [standard] to automatically format your code:
|
|
94
94
|
bundle exec rake standard:fix
|
95
95
|
```
|
96
96
|
|
97
|
-
[repo]: https://github.com/thoughtbot/factory_bot/tree/
|
97
|
+
[repo]: https://github.com/thoughtbot/factory_bot/tree/main
|
98
98
|
[fork]: https://help.github.com/articles/fork-a-repo/
|
99
99
|
[branch]: https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/
|
100
100
|
[pr]: https://help.github.com/articles/using-pull-requests/
|
101
101
|
[standard]: https://github.com/testdouble/standard
|
102
102
|
[appraisal]: https://github.com/thoughtbot/appraisal
|
103
|
-
[reproduction script]: https://github.com/thoughtbot/factory_bot/blob/
|
103
|
+
[reproduction script]: https://github.com/thoughtbot/factory_bot/blob/main/.github/REPRODUCTION_SCRIPT.rb
|
104
104
|
|
105
105
|
Inspired by https://github.com/middleman/middleman-heroku/blob/master/CONTRIBUTING.md
|
data/GETTING_STARTED.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
**Deprecated**
|
2
|
+
|
3
|
+
See our extensive reference, guides, and cookbook in [the factory_bot book][].
|
4
|
+
|
5
|
+
For information on integrations with third party libraries, such as RSpec or
|
6
|
+
Rails, see [the factory_bot wiki][].
|
7
|
+
|
8
|
+
We also have [a detailed introductory video][], available for free on Upcase.
|
9
|
+
|
10
|
+
[a detailed introductory video]: https://upcase.com/videos/factory-bot?utm_source=github&utm_medium=open-source&utm_campaign=factory-girl
|
11
|
+
[the factory_bot book]: https://thoughtbot.github.io/factory_bot
|
12
|
+
[the factory_bot wiki]: https://github.com/thoughtbot/factory_bot/wiki
|
13
|
+
|
14
|
+
This document is deprecated and preserved for historical use. It may disappear
|
15
|
+
at any time.
|
16
|
+
|
1
17
|
Getting Started
|
2
18
|
===============
|
3
19
|
|
@@ -424,7 +440,7 @@ end
|
|
424
440
|
Method Name / Reserved Word Attributes
|
425
441
|
-------------------------------
|
426
442
|
|
427
|
-
If your attributes conflict with existing methods or reserved words (all methods in the [DefinitionProxy](https://github.com/thoughtbot/factory_bot/blob/
|
443
|
+
If your attributes conflict with existing methods or reserved words (all methods in the [DefinitionProxy](https://github.com/thoughtbot/factory_bot/blob/main/lib/factory_bot/definition_proxy.rb) class) you can define them with `add_attribute`.
|
428
444
|
|
429
445
|
```ruby
|
430
446
|
factory :dna do
|
@@ -1872,6 +1888,10 @@ class JsonStrategy
|
|
1872
1888
|
def result(evaluation)
|
1873
1889
|
@strategy.result(evaluation).to_json
|
1874
1890
|
end
|
1891
|
+
|
1892
|
+
def to_sym
|
1893
|
+
:json
|
1894
|
+
end
|
1875
1895
|
end
|
1876
1896
|
```
|
1877
1897
|
|
@@ -1912,6 +1932,10 @@ class JsonStrategy
|
|
1912
1932
|
evaluation.notify(:make_json_awesome, json)
|
1913
1933
|
end
|
1914
1934
|
end
|
1935
|
+
|
1936
|
+
def to_sym
|
1937
|
+
:json
|
1938
|
+
end
|
1915
1939
|
end
|
1916
1940
|
|
1917
1941
|
FactoryBot.register_strategy(:json, JsonStrategy)
|
@@ -1966,7 +1990,7 @@ ActiveSupport Instrumentation
|
|
1966
1990
|
|
1967
1991
|
In order to track what factories are created (and with what build strategy),
|
1968
1992
|
`ActiveSupport::Notifications` are included to provide a way to subscribe to
|
1969
|
-
factories being run. One example would be to track factories based on a
|
1993
|
+
factories being compiled and run. One example would be to track factories based on a
|
1970
1994
|
threshold of execution time.
|
1971
1995
|
|
1972
1996
|
```ruby
|
@@ -2000,6 +2024,29 @@ config.after(:suite) do
|
|
2000
2024
|
end
|
2001
2025
|
```
|
2002
2026
|
|
2027
|
+
Another example could involve tracking the attributes and traits that factories are compiled with. If you're using RSpec, you could add `before(:suite)` and `after(:suite)` blocks that subscribe to `factory_bot.compile_factory` notifications:
|
2028
|
+
|
2029
|
+
```ruby
|
2030
|
+
factory_bot_results = {}
|
2031
|
+
config.before(:suite) do
|
2032
|
+
ActiveSupport::Notifications.subscribe("factory_bot.compile_factory") do |name, start, finish, id, payload|
|
2033
|
+
factory_name = payload[:name]
|
2034
|
+
factory_class = payload[:class]
|
2035
|
+
attributes = payload[:attributes]
|
2036
|
+
traits = payload[:traits]
|
2037
|
+
factory_bot_results[factory_class] ||= {}
|
2038
|
+
factory_bot_results[factory_class][factory_name] = {
|
2039
|
+
attributes: attributes.map(&:name)
|
2040
|
+
traits: traits.map(&:name)
|
2041
|
+
}
|
2042
|
+
end
|
2043
|
+
end
|
2044
|
+
|
2045
|
+
config.after(:suite) do
|
2046
|
+
puts factory_bot_results
|
2047
|
+
end
|
2048
|
+
```
|
2049
|
+
|
2003
2050
|
Rails Preloaders and RSpec
|
2004
2051
|
--------------------------
|
2005
2052
|
|
data/NEWS.md
CHANGED
@@ -1,9 +1,33 @@
|
|
1
1
|
# News
|
2
2
|
|
3
|
+
## 6.3.0 (September 1, 2023)
|
4
|
+
|
5
|
+
* Fix: link to changelog for RubyGems (Berkan Ünal).
|
6
|
+
* Fix: integrate with Ruby 3.2's `did_you_mean` library (Daniel Colson).
|
7
|
+
* Changed: explicitly define `#destroyed?` within the `Stub` strategy to return `false` to be consistent
|
8
|
+
with ActiveRecord (Benjamin Fleischer).
|
9
|
+
* Added: announce `factory_bot.compile_factory` notification (Sean Doyle).
|
10
|
+
* Docs: clarify that custom strategies need to define `#to_sym` (Edmund Korley, Jonas S).
|
11
|
+
* Docs: fix CI link in README (Mark Huk).
|
12
|
+
* Docs: fix GitHub links (Robert Fletcher).
|
13
|
+
* Docs: install this library with `bundle add` (Glauco Custódio).
|
14
|
+
* Docs: re-write into mdBook (Mike Burns, Sara Jackson, Stefanni Brasil)
|
15
|
+
* Docs: clarify that automatic trait definitions could introduce new linting errors (Lawrence Chou).
|
16
|
+
* Internal: skip TruffleRuby on Rails 5.0, 5.1, 5.2 (Andrii Konchyn).
|
17
|
+
* Internal: fix typoes throughout codebase (Yudai Takada).
|
18
|
+
* Internal: run CI on `actions/checkout` v3 (Yudai Takada).
|
19
|
+
* Internal: follow standardrb code style (Yudai Takada).
|
20
|
+
* Internal: stop using Hound (Daniel Nolan).
|
21
|
+
* Internal: only run simplecov on C Ruby (Daniel Colson).
|
22
|
+
* Internal: quieter Cucumber (Daniel Colson).
|
23
|
+
* Internal: Ruby 3.2 support (Daniel Colson).
|
24
|
+
* Internal: Mike Burns is the CODEOWNER (Stefanni Brasil).
|
25
|
+
|
3
26
|
## 6.2.1 (March 8, 2022)
|
4
27
|
* Added: CI testing against truffleruby
|
5
28
|
* Changed: Documentation improvements for sequences and traits
|
6
29
|
* Fixed: ActiveSupport::Notifications reporting strategy through associations now report as symbols
|
30
|
+
* BREAKING CHANGE: Custom strategies now need to define a `to_sym` method to specify the strategy identifier
|
7
31
|
* Fixed: `add_attribute` with reserved keywords assigns values correctly
|
8
32
|
|
9
33
|
## 6.2.0 (May 7, 2021)
|
@@ -27,7 +51,9 @@
|
|
27
51
|
* Added: automatic definition of traits for Active Record enum attributes, enabled by default
|
28
52
|
(Note that this required changing where factory_bot constantizes the build
|
29
53
|
class, which may affect applications that were using abstract factories for
|
30
|
-
inheritance. See issue #1409.)
|
54
|
+
inheritance. See issue #1409.) (This may break `FactoryBot.lint` because
|
55
|
+
there may be previously non-existing factory+trait combinations being
|
56
|
+
defined and checked)
|
31
57
|
* Added: `traits_for_enum` method to define traits for non-Active Record enums
|
32
58
|
* Added: `build_stubbed_starting_id=` option to define the starting id for `build_stubbed`
|
33
59
|
* Removed: deprecated methods on the top-level `FactoryBot` module meant only for internal use
|
data/README.md
CHANGED
@@ -16,24 +16,26 @@ Check out the [guide](https://github.com/thoughtbot/factory_bot/blob/4-9-0-stabl
|
|
16
16
|
Documentation
|
17
17
|
-------------
|
18
18
|
|
19
|
-
|
19
|
+
See our extensive reference, guides, and cookbook in [the factory_bot book][].
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
For information on integrations with third party libraries, such as RSpec or
|
22
|
+
Rails, see [the factory_bot wiki][].
|
23
|
+
|
24
|
+
We also have [a detailed introductory video][], available for free on Upcase.
|
23
25
|
|
24
26
|
[a detailed introductory video]: https://upcase.com/videos/factory-bot?utm_source=github&utm_medium=open-source&utm_campaign=factory-girl
|
27
|
+
[the factory_bot book]: https://thoughtbot.github.io/factory_bot
|
28
|
+
[the factory_bot wiki]: https://github.com/thoughtbot/factory_bot/wiki
|
25
29
|
|
26
30
|
Install
|
27
31
|
--------
|
28
32
|
|
29
|
-
|
33
|
+
Run:
|
30
34
|
|
31
35
|
```ruby
|
32
|
-
|
36
|
+
bundle add factory_bot
|
33
37
|
```
|
34
38
|
|
35
|
-
and run `bundle install` from your shell.
|
36
|
-
|
37
39
|
To install the gem manually from your shell, run:
|
38
40
|
|
39
41
|
```shell
|
@@ -43,7 +45,7 @@ gem install factory_bot
|
|
43
45
|
Supported Ruby versions
|
44
46
|
-----------------------
|
45
47
|
|
46
|
-
Supported Ruby versions are listed in [`.github/workflows/build.yml`](https://github.com/thoughtbot/factory_bot/blob/
|
48
|
+
Supported Ruby versions are listed in [`.github/workflows/build.yml`](https://github.com/thoughtbot/factory_bot/blob/main/.github/workflows/build.yml)
|
47
49
|
|
48
50
|
More Information
|
49
51
|
----------------
|
@@ -53,8 +55,8 @@ More Information
|
|
53
55
|
* [Issues](https://github.com/thoughtbot/factory_bot/issues)
|
54
56
|
* [GIANT ROBOTS SMASHING INTO OTHER GIANT ROBOTS](https://robots.thoughtbot.com/)
|
55
57
|
|
56
|
-
[GETTING_STARTED]: https://github.com/thoughtbot/factory_bot/blob/
|
57
|
-
[NAME]: https://github.com/thoughtbot/factory_bot/blob/
|
58
|
+
[GETTING_STARTED]: https://github.com/thoughtbot/factory_bot/blob/main/GETTING_STARTED.md
|
59
|
+
[NAME]: https://github.com/thoughtbot/factory_bot/blob/main/NAME.md
|
58
60
|
|
59
61
|
Useful Tools
|
60
62
|
------------
|
@@ -64,7 +66,7 @@ Useful Tools
|
|
64
66
|
Contributing
|
65
67
|
------------
|
66
68
|
|
67
|
-
Please see [CONTRIBUTING.md](https://github.com/thoughtbot/factory_bot/blob/
|
69
|
+
Please see [CONTRIBUTING.md](https://github.com/thoughtbot/factory_bot/blob/main/CONTRIBUTING.md).
|
68
70
|
|
69
71
|
factory_bot was originally written by Joe Ferris and is maintained by thoughtbot.
|
70
72
|
Many improvements and bugfixes were contributed by the [open source
|
@@ -73,11 +75,11 @@ community](https://github.com/thoughtbot/factory_bot/graphs/contributors).
|
|
73
75
|
License
|
74
76
|
-------
|
75
77
|
|
76
|
-
factory_bot is Copyright © 2008-
|
78
|
+
factory_bot is Copyright © 2008-2022 Joe Ferris and thoughtbot. It is free
|
77
79
|
software, and may be redistributed under the terms specified in the
|
78
80
|
[LICENSE] file.
|
79
81
|
|
80
|
-
[LICENSE]: https://github.com/thoughtbot/factory_bot/blob/
|
82
|
+
[LICENSE]: https://github.com/thoughtbot/factory_bot/blob/main/LICENSE
|
81
83
|
|
82
84
|
|
83
85
|
About thoughtbot
|
@@ -94,8 +96,8 @@ See [our other projects][community] or
|
|
94
96
|
|
95
97
|
[community]: https://thoughtbot.com/community?utm_source=github
|
96
98
|
[hire]: https://thoughtbot.com/hire-us?utm_source=github
|
97
|
-
[ci-image]: https://github.com/thoughtbot/factory_bot/actions/workflows/build.yml/badge.svg
|
98
|
-
[ci]: https://github.com/thoughtbot/factory_bot/actions?query=workflow%
|
99
|
+
[ci-image]: https://github.com/thoughtbot/factory_bot/actions/workflows/build.yml/badge.svg?branch=main
|
100
|
+
[ci]: https://github.com/thoughtbot/factory_bot/actions?query=workflow%3ABuild+branch%3Amain
|
99
101
|
[grade-image]: https://codeclimate.com/github/thoughtbot/factory_bot/badges/gpa.svg
|
100
102
|
[grade]: https://codeclimate.com/github/thoughtbot/factory_bot
|
101
103
|
[version-image]: https://badge.fury.io/rb/factory_bot.svg
|
@@ -12,8 +12,8 @@ module FactoryBot
|
|
12
12
|
|
13
13
|
-> {
|
14
14
|
value = case block.arity
|
15
|
-
|
16
|
-
|
15
|
+
when 1, -1, -2 then instance_exec(self, &block)
|
16
|
+
else instance_exec(&block)
|
17
17
|
end
|
18
18
|
raise SequenceAbuseError if FactoryBot::Sequence === value
|
19
19
|
|
@@ -57,6 +57,13 @@ module FactoryBot
|
|
57
57
|
end
|
58
58
|
|
59
59
|
@compiled = true
|
60
|
+
|
61
|
+
ActiveSupport::Notifications.instrument "factory_bot.compile_factory", {
|
62
|
+
name: name,
|
63
|
+
attributes: declarations.attributes,
|
64
|
+
traits: defined_traits,
|
65
|
+
class: klass
|
66
|
+
}
|
60
67
|
end
|
61
68
|
end
|
62
69
|
|
@@ -115,15 +122,26 @@ module FactoryBot
|
|
115
122
|
raise error_with_definition_name(error)
|
116
123
|
end
|
117
124
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
" referenced within \"#{name}\" definition"
|
123
|
-
)
|
125
|
+
# detailed_message introduced in Ruby 3.2 for cleaner integration with
|
126
|
+
# did_you_mean. See https://bugs.ruby-lang.org/issues/18564
|
127
|
+
if KeyError.method_defined?(:detailed_message)
|
128
|
+
def error_with_definition_name(error)
|
129
|
+
message = error.message + " referenced within \"#{name}\" definition"
|
124
130
|
|
125
|
-
|
126
|
-
|
131
|
+
error.class.new(message, key: error.key, receiver: error.receiver)
|
132
|
+
.tap { |new_error| new_error.set_backtrace(error.backtrace) }
|
133
|
+
end
|
134
|
+
else
|
135
|
+
def error_with_definition_name(error)
|
136
|
+
message = error.message
|
137
|
+
message.insert(
|
138
|
+
message.index("\nDid you mean?") || message.length,
|
139
|
+
" referenced within \"#{name}\" definition"
|
140
|
+
)
|
141
|
+
|
142
|
+
error.class.new(message).tap do |new_error|
|
143
|
+
new_error.set_backtrace(error.backtrace)
|
144
|
+
end
|
127
145
|
end
|
128
146
|
end
|
129
147
|
|
@@ -151,7 +151,7 @@ module FactoryBot
|
|
151
151
|
def association(name, *options)
|
152
152
|
if block_given?
|
153
153
|
raise AssociationDefinitionError.new(
|
154
|
-
"Unexpected block passed to '#{name}' association "\
|
154
|
+
"Unexpected block passed to '#{name}' association " \
|
155
155
|
"in '#{@definition.name}' factory"
|
156
156
|
)
|
157
157
|
else
|
data/lib/factory_bot/registry.rb
CHANGED
@@ -39,9 +39,21 @@ module FactoryBot
|
|
39
39
|
|
40
40
|
def key_error_with_custom_message(key_error)
|
41
41
|
message = key_error.message.sub("key not found", "#{@name} not registered")
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
new_key_error(message, key_error).tap do |error|
|
43
|
+
error.set_backtrace(key_error.backtrace)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# detailed_message introduced in Ruby 3.2 for cleaner integration with
|
48
|
+
# did_you_mean. See https://bugs.ruby-lang.org/issues/18564
|
49
|
+
if KeyError.method_defined?(:detailed_message)
|
50
|
+
def new_key_error(message, key_error)
|
51
|
+
KeyError.new(message, key: key_error.key, receiver: key_error.receiver)
|
52
|
+
end
|
53
|
+
else
|
54
|
+
def new_key_error(message, _)
|
55
|
+
KeyError.new(message)
|
56
|
+
end
|
45
57
|
end
|
46
58
|
end
|
47
59
|
end
|
@@ -66,12 +66,12 @@ module FactoryBot
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def destroyed?
|
69
|
-
|
69
|
+
false
|
70
70
|
end
|
71
71
|
|
72
72
|
DISABLED_PERSISTENCE_METHODS.each do |write_method|
|
73
73
|
define_singleton_method(write_method) do |*args|
|
74
|
-
raise "stubbed models are not allowed to access the database - "\
|
74
|
+
raise "stubbed models are not allowed to access the database - " \
|
75
75
|
"#{self.class}##{write_method}(#{args.join(",")})"
|
76
76
|
end
|
77
77
|
end
|
data/lib/factory_bot/version.rb
CHANGED
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: 6.
|
4
|
+
version: 6.3.0
|
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:
|
12
|
+
date: 2023-09-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -236,8 +236,9 @@ files:
|
|
236
236
|
homepage: https://github.com/thoughtbot/factory_bot
|
237
237
|
licenses:
|
238
238
|
- MIT
|
239
|
-
metadata:
|
240
|
-
|
239
|
+
metadata:
|
240
|
+
changelog_uri: https://github.com/thoughtbot/factory_bot/blob/main/NEWS.md
|
241
|
+
post_install_message:
|
241
242
|
rdoc_options: []
|
242
243
|
require_paths:
|
243
244
|
- lib
|
@@ -252,8 +253,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
252
253
|
- !ruby/object:Gem::Version
|
253
254
|
version: '0'
|
254
255
|
requirements: []
|
255
|
-
rubygems_version: 3.
|
256
|
-
signing_key:
|
256
|
+
rubygems_version: 3.4.13
|
257
|
+
signing_key:
|
257
258
|
specification_version: 4
|
258
259
|
summary: factory_bot provides a framework and DSL for defining and using model instance
|
259
260
|
factories.
|