factory_bot 6.2.0 → 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 +90 -3
- data/NEWS.md +33 -1
- data/README.md +17 -15
- data/lib/factory_bot/aliases.rb +1 -1
- data/lib/factory_bot/attribute/dynamic.rb +2 -2
- data/lib/factory_bot/attribute_assigner.rb +3 -2
- data/lib/factory_bot/decorator.rb +1 -1
- data/lib/factory_bot/definition.rb +26 -8
- data/lib/factory_bot/definition_proxy.rb +2 -2
- data/lib/factory_bot/evaluator.rb +2 -2
- data/lib/factory_bot/registry.rb +15 -3
- data/lib/factory_bot/strategy/attributes_for.rb +4 -0
- data/lib/factory_bot/strategy/build.rb +4 -0
- data/lib/factory_bot/strategy/create.rb +4 -0
- data/lib/factory_bot/strategy/null.rb +4 -0
- data/lib/factory_bot/strategy/stub.rb +6 -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
|
@@ -592,7 +608,7 @@ Attribute overrides can be used to link associated objects:
|
|
592
608
|
```ruby
|
593
609
|
FactoryBot.define do
|
594
610
|
factory :author do
|
595
|
-
|
611
|
+
name { 'Taylor' }
|
596
612
|
end
|
597
613
|
|
598
614
|
factory :post do
|
@@ -1013,6 +1029,15 @@ factory :post do
|
|
1013
1029
|
end
|
1014
1030
|
```
|
1015
1031
|
|
1032
|
+
Please note, that the value for the sequence could be any Enumerable instance,
|
1033
|
+
as long as it responds to `#next`:
|
1034
|
+
|
1035
|
+
```ruby
|
1036
|
+
factory :task do
|
1037
|
+
sequence :priority, %i[low medium high urgent].cycle
|
1038
|
+
end
|
1039
|
+
```
|
1040
|
+
|
1016
1041
|
### Aliases
|
1017
1042
|
|
1018
1043
|
Sequences can also have aliases. The sequence aliases share the same counter:
|
@@ -1187,6 +1212,28 @@ factory :user do
|
|
1187
1212
|
end
|
1188
1213
|
```
|
1189
1214
|
|
1215
|
+
### As mixins
|
1216
|
+
|
1217
|
+
Traits can be defined outside of factories and used as mixins to compose shared attributes
|
1218
|
+
|
1219
|
+
```ruby
|
1220
|
+
FactoryBot.define do
|
1221
|
+
trait :timestamps do
|
1222
|
+
created_at { 8.days.ago }
|
1223
|
+
updated_at { 4.days.ago }
|
1224
|
+
end
|
1225
|
+
|
1226
|
+
factory :user, traits: [:timestamps] do
|
1227
|
+
username { "john_doe" }
|
1228
|
+
end
|
1229
|
+
|
1230
|
+
factory :post do
|
1231
|
+
timestamps
|
1232
|
+
title { "Traits rock" }
|
1233
|
+
end
|
1234
|
+
end
|
1235
|
+
```
|
1236
|
+
|
1190
1237
|
### Using traits
|
1191
1238
|
|
1192
1239
|
Traits can also be passed in as a list of symbols when you construct an instance
|
@@ -1574,6 +1621,15 @@ twenty_somethings = build_list(:user, 10) do |user, i|
|
|
1574
1621
|
end
|
1575
1622
|
```
|
1576
1623
|
|
1624
|
+
`create_list` passes saved instances into the block. If you modify the instance, you must save it again:
|
1625
|
+
|
1626
|
+
```ruby
|
1627
|
+
twenty_somethings = create_list(:user, 10) do |user, i|
|
1628
|
+
user.date_of_birth = (20 + i).years.ago
|
1629
|
+
user.save!
|
1630
|
+
end
|
1631
|
+
```
|
1632
|
+
|
1577
1633
|
`build_stubbed_list` will give you fully stubbed out instances:
|
1578
1634
|
|
1579
1635
|
```ruby
|
@@ -1832,6 +1888,10 @@ class JsonStrategy
|
|
1832
1888
|
def result(evaluation)
|
1833
1889
|
@strategy.result(evaluation).to_json
|
1834
1890
|
end
|
1891
|
+
|
1892
|
+
def to_sym
|
1893
|
+
:json
|
1894
|
+
end
|
1835
1895
|
end
|
1836
1896
|
```
|
1837
1897
|
|
@@ -1872,6 +1932,10 @@ class JsonStrategy
|
|
1872
1932
|
evaluation.notify(:make_json_awesome, json)
|
1873
1933
|
end
|
1874
1934
|
end
|
1935
|
+
|
1936
|
+
def to_sym
|
1937
|
+
:json
|
1938
|
+
end
|
1875
1939
|
end
|
1876
1940
|
|
1877
1941
|
FactoryBot.register_strategy(:json, JsonStrategy)
|
@@ -1926,7 +1990,7 @@ ActiveSupport Instrumentation
|
|
1926
1990
|
|
1927
1991
|
In order to track what factories are created (and with what build strategy),
|
1928
1992
|
`ActiveSupport::Notifications` are included to provide a way to subscribe to
|
1929
|
-
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
|
1930
1994
|
threshold of execution time.
|
1931
1995
|
|
1932
1996
|
```ruby
|
@@ -1960,6 +2024,29 @@ config.after(:suite) do
|
|
1960
2024
|
end
|
1961
2025
|
```
|
1962
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
|
+
|
1963
2050
|
Rails Preloaders and RSpec
|
1964
2051
|
--------------------------
|
1965
2052
|
|
data/NEWS.md
CHANGED
@@ -1,5 +1,35 @@
|
|
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
|
+
|
26
|
+
## 6.2.1 (March 8, 2022)
|
27
|
+
* Added: CI testing against truffleruby
|
28
|
+
* Changed: Documentation improvements for sequences and traits
|
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
|
31
|
+
* Fixed: `add_attribute` with reserved keywords assigns values correctly
|
32
|
+
|
3
33
|
## 6.2.0 (May 7, 2021)
|
4
34
|
* Added: support for Ruby 3.0
|
5
35
|
* Changed: Include factory or trait name in error messages for missing traits. d05a9a3c
|
@@ -21,7 +51,9 @@
|
|
21
51
|
* Added: automatic definition of traits for Active Record enum attributes, enabled by default
|
22
52
|
(Note that this required changing where factory_bot constantizes the build
|
23
53
|
class, which may affect applications that were using abstract factories for
|
24
|
-
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)
|
25
57
|
* Added: `traits_for_enum` method to define traits for non-Active Record enums
|
26
58
|
* Added: `build_stubbed_starting_id=` option to define the starting id for `build_stubbed`
|
27
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
|
data/lib/factory_bot/aliases.rb
CHANGED
@@ -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
|
|
@@ -37,8 +37,9 @@ module FactoryBot
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def decorated_evaluator
|
40
|
-
Decorator::
|
41
|
-
Decorator::
|
40
|
+
Decorator::NewConstructor.new(
|
41
|
+
Decorator::InvocationTracker.new(@evaluator),
|
42
|
+
@build_class
|
42
43
|
)
|
43
44
|
end
|
44
45
|
|
@@ -17,7 +17,7 @@ module FactoryBot
|
|
17
17
|
end
|
18
18
|
RUBY
|
19
19
|
else
|
20
|
-
def method_missing(name, *args, &block) # rubocop:disable Style/
|
20
|
+
def method_missing(name, *args, &block) # rubocop:disable Style/MissingRespondToMissing
|
21
21
|
@component.send(name, *args, &block)
|
22
22
|
end
|
23
23
|
|
@@ -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
|
|
@@ -88,7 +88,7 @@ module FactoryBot
|
|
88
88
|
# end
|
89
89
|
#
|
90
90
|
# are equivalent.
|
91
|
-
def method_missing(name, *args, &block) # rubocop:disable Style/MissingRespondToMissing
|
91
|
+
def method_missing(name, *args, &block) # rubocop:disable Style/MissingRespondToMissing
|
92
92
|
association_options = args.first
|
93
93
|
|
94
94
|
if association_options.nil?
|
@@ -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
|
@@ -24,7 +24,7 @@ module FactoryBot
|
|
24
24
|
def association(factory_name, *traits_and_overrides)
|
25
25
|
overrides = traits_and_overrides.extract_options!
|
26
26
|
strategy_override = overrides.fetch(:strategy) {
|
27
|
-
FactoryBot.use_parent_strategy ? @build_strategy.
|
27
|
+
FactoryBot.use_parent_strategy ? @build_strategy.to_sym : :create
|
28
28
|
}
|
29
29
|
|
30
30
|
traits_and_overrides += [overrides.except(:strategy)]
|
@@ -35,7 +35,7 @@ module FactoryBot
|
|
35
35
|
|
36
36
|
attr_accessor :instance
|
37
37
|
|
38
|
-
def method_missing(method_name, *args, &block)
|
38
|
+
def method_missing(method_name, *args, &block)
|
39
39
|
if @instance.respond_to?(method_name)
|
40
40
|
@instance.send(method_name, *args, &block)
|
41
41
|
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
|
@@ -41,6 +41,10 @@ module FactoryBot
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
def to_sym
|
45
|
+
:stub
|
46
|
+
end
|
47
|
+
|
44
48
|
private
|
45
49
|
|
46
50
|
def next_id
|
@@ -62,12 +66,12 @@ module FactoryBot
|
|
62
66
|
end
|
63
67
|
|
64
68
|
def destroyed?
|
65
|
-
|
69
|
+
false
|
66
70
|
end
|
67
71
|
|
68
72
|
DISABLED_PERSISTENCE_METHODS.each do |write_method|
|
69
73
|
define_singleton_method(write_method) do |*args|
|
70
|
-
raise "stubbed models are not allowed to access the database - "\
|
74
|
+
raise "stubbed models are not allowed to access the database - " \
|
71
75
|
"#{self.class}##{write_method}(#{args.join(",")})"
|
72
76
|
end
|
73
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.
|