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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3bcbbd8bee01abdb25a5cfdbbbbca29396f587236f0c20f8300adbf6e32f783c
4
- data.tar.gz: 94d8e73507ae61edba7fb3129ee74c4fe9998a8fb78614ecba9966199561c8e4
3
+ metadata.gz: be53175a79d79c70dbaae41a86638d7013b968cecf59aaaa1cedc813ef4e4bc6
4
+ data.tar.gz: 4d3312a1ec50b608daa376d41e176ee713fba29ee80c1ce0acd0a646ce4a9956
5
5
  SHA512:
6
- metadata.gz: e97d9530810f0de00f6e0129df37db52722ee8d430f7b118ffdcebdc0eecc1e1532356b7c8e01cc85265c04f18eb174d3d5ff09fe235c5f30ceb7b5e16432508
7
- data.tar.gz: 71b77c30b16c89588d6946505be547374321597e8e16f89673766cda94b22188dc28070a34144ae126dad93042de0173e1d92173237ae1e929a3131e85569a51
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/master
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/master/.github/REPRODUCTION_SCRIPT.rb
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/master/lib/factory_bot/definition_proxy.rb) class) you can define them with `add_attribute`.
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
- You should find the documentation for your version of factory_bot on [Rubygems](https://rubygems.org/gems/factory_bot).
19
+ See our extensive reference, guides, and cookbook in [the factory_bot book][].
20
20
 
21
- See [GETTING_STARTED] for information on defining and using factories. We also
22
- have [a detailed introductory video][], available for free on Upcase.
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
- Add the following line to Gemfile:
33
+ Run:
30
34
 
31
35
  ```ruby
32
- gem 'factory_bot'
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/master/.github/workflows/build.yml)
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/master/GETTING_STARTED.md
57
- [NAME]: https://github.com/thoughtbot/factory_bot/blob/master/NAME.md
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/master/CONTRIBUTING.md).
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-2020 Joe Ferris and thoughtbot. It is free
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/master/LICENSE
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%3A.github%2Fworkflows%2Fbuild.yml+branch%3Amaster++
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
- when 1, -1, -2 then instance_exec(self, &block)
16
- else instance_exec(&block)
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
- def error_with_definition_name(error)
119
- message = error.message
120
- message.insert(
121
- message.index("\nDid you mean?") || message.length,
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
- error.class.new(message).tap do |new_error|
126
- new_error.set_backtrace(error.backtrace)
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
@@ -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
- error = KeyError.new(message)
43
- error.set_backtrace(key_error.backtrace)
44
- error
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
- nil
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
@@ -1,3 +1,3 @@
1
1
  module FactoryBot
2
- VERSION = "6.2.1".freeze
2
+ VERSION = "6.3.0".freeze
3
3
  end
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.2.1
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: 2022-03-18 00:00:00.000000000 Z
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
- post_install_message:
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.1.6
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.