factory_bot_rails 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b742728304ad03cf96bd0894d77fc2e692bedd7577dab1c7758a0e7cc49fc6e
4
- data.tar.gz: fa05b3990a3a3d0a819e3afc79bcc7eb218a3b54a4aa071f9e23b3018b349ffd
3
+ metadata.gz: 5742c3086e009bf4ba09d13c5f912e547b06b71552747f9c2a8c8da26680025c
4
+ data.tar.gz: d789dd365195a302bd7888d2d927b34b797280f06614fa0e73d22b7d3f446755
5
5
  SHA512:
6
- metadata.gz: b99d122d606f1ff76388d3d617d600f78870c4cace484b26ddf69782ee4db752c75b168e2920d00d9b077123fbdabeb82984dbf241aa2fc18555d32f313d9e85
7
- data.tar.gz: afb2e89740609a4f49765a937f54b8c47f4d569ce8d89f9c6ee2490d76ded24b69b07de95a5924c6afe41a9890d2905d1bc0ce96bd79d1a5a20bb17cd7243adf
6
+ metadata.gz: '09f24e068c621baa9d6e2721abdaa54df0f4eeb88b3b258f394cdd7a6f1366bb66e8d0d7cf3ab000f86c7e1d93e0e3f333f1ac16158f9f789a5b80e7893549b9'
7
+ data.tar.gz: 6d5c4d46d035618cfb995db650b27cabc9f67439a0eabaf974e805dd9a989eb80d04082eebad64bf1a7575151a8062f91bea0f5d0b30123771da035198745177
data/CONTRIBUTING.md CHANGED
@@ -35,5 +35,5 @@ Some things that will increase the chance that your pull request is accepted:
35
35
  * Follow our [style guide][style].
36
36
  * Write a [good commit message][commit].
37
37
 
38
- [style]: https://github.com/thoughtbot/guides/tree/master/style
38
+ [style]: https://github.com/thoughtbot/guides/tree/main/general
39
39
  [commit]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
data/NEWS.md CHANGED
@@ -3,6 +3,25 @@ there might not be any notable changes in new versions of this project.
3
3
 
4
4
  # NEWS
5
5
 
6
+ ## 6.3.0 (November 17, 2023)
7
+
8
+ * Changed: reject sequence definitions for ActiveRecord primary keys (Sean
9
+ Doyle).
10
+ * Changed: factory\_bot dependency to ~> 6.4 (Mike Burns).
11
+ * Changed: upgrade dependencies (Daniel Colson).
12
+ * Add: `projections.json` for Rails.vim (Caleb Hearth).
13
+ * Docs: fix broken link (Edu Depetris).
14
+ * Docs: mention Rails generator in docs (Edu Depetris).
15
+ * Docs: fix typo (Yudai Takada).
16
+ * Internal: skip Spring version 2.1.1 due to a bug in that release (Christina
17
+ Entcheva, Daniel Colson).
18
+ * Internal: test against Rails 6.1 (Antonis Berkakis).
19
+ * Internal: test against Ruby 3 (Daniel Colson).
20
+ * Internal: fewer warnings in Cucumber tests (Daniel Colson).
21
+ * Internal: use GitHub Actions for CI (Mathieu Jobin).
22
+ * Internal: a whole bunch of cleanup (Daniel Colson).
23
+ * Internal: fix CI due to a Bundler output change (Mike Burns).
24
+
6
25
  ## 6.2.0 (May 7, 2021)
7
26
 
8
27
  * Changed: factory\_bot dependency to ~> 6.2.0
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # factory_bot_rails [![Build Status][ci-image]][ci] [![Code Climate][grade-image]][grade] [![Gem Version][version-image]][version]
1
+ # factory_bot_rails [![Code Climate][grade-image]][grade] [![Gem Version][version-image]][version]
2
2
 
3
3
  [factory_bot][fb] is a fixtures replacement with a straightforward definition
4
4
  syntax, support for multiple build strategies (saved instances, unsaved
@@ -15,7 +15,7 @@ Check out the [guide](https://github.com/thoughtbot/factory_bot/blob/4-9-0-stabl
15
15
  factory\_bot\_rails provides Rails integration for [factory_bot][fb].
16
16
 
17
17
  Supported Rails versions are listed in [`Appraisals`](Appraisals). Supported
18
- Ruby versions are listed in [`.travis.yml`](.travis.yml).
18
+ Ruby versions are listed in [`.github/workflows/build.yml`](.github/workflows/build.yml).
19
19
 
20
20
  ## Download
21
21
 
@@ -144,8 +144,30 @@ Note that factory\_bot\_rails will only use this custom template if you are
144
144
  generating each factory in a separate file; it will have no effect if you are
145
145
  generating all of your factories in `test/factories.rb` or `spec/factories.rb`.
146
146
 
147
+ Factory\_bot\_rails will add a custom generator:
148
+
149
+ ```shell
150
+ rails generate factory_bot:model NAME [field:type field:type] [options]
151
+ ```
152
+
147
153
  [default factory template]: https://github.com/thoughtbot/factory_bot_rails/tree/master/lib/generators/factory_bot/model/templates/factories.erb
148
154
 
155
+ ### Active Record Configuration
156
+
157
+ By default, FactoryBot will refuse to generate Active Record primary key
158
+ columns. Without additional configuration, an Active Record model treats a
159
+ column named `id` as its primary key.
160
+
161
+ For example, defining an `id` attribute with `add_attribute(:id)`, `id { ... }`,
162
+ or `sequence(:id)` will raise a `FactoryBot::AttributeDefinitionError`.
163
+
164
+ You can disable this behavior by adding the following to `config/application.rb`
165
+ or the appropriate environment configuration in `config/environments`:
166
+
167
+ ```ruby
168
+ config.factory_bot.reject_primary_key_attributes = false
169
+ ```
170
+
149
171
  ## Contributing
150
172
 
151
173
  Please see [CONTRIBUTING.md](CONTRIBUTING.md).
@@ -171,8 +193,6 @@ See [our other projects][community].
171
193
  We are [available for hire][hire].
172
194
 
173
195
  [fb]: https://github.com/thoughtbot/factory_bot
174
- [ci]: http://travis-ci.org/thoughtbot/factory_bot_rails?branch=master
175
- [ci-image]: https://secure.travis-ci.org/thoughtbot/factory_bot_rails.svg
176
196
  [grade]: https://codeclimate.com/github/thoughtbot/factory_bot_rails
177
197
  [grade-image]: https://codeclimate.com/github/thoughtbot/factory_bot_rails.svg
178
198
  [community]: https://thoughtbot.com/community?utm_source=github
@@ -0,0 +1,18 @@
1
+ module FactoryBotRails
2
+ class FactoryValidator
3
+ class ActiveRecordValidator
4
+ def validate!(payload)
5
+ attributes, for_class = payload.values_at(:attributes, :class)
6
+ attributes.each do |attribute|
7
+ if for_class < ActiveRecord::Base && for_class.primary_key == attribute.name.to_s
8
+ raise FactoryBot::AttributeDefinitionError, <<~ERROR
9
+ Attribute generates #{for_class.primary_key.inspect} primary key for #{for_class.name}"
10
+
11
+ Do not define #{for_class.primary_key.inspect}. Instead, rely on the database to generate it.
12
+ ERROR
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,39 @@
1
+ module FactoryBotRails
2
+ class FactoryValidator
3
+ def initialize(validators = [])
4
+ @validators = Array(validators)
5
+ end
6
+
7
+ def add_validator(validator)
8
+ @validators << validator
9
+ end
10
+
11
+ def run
12
+ ActiveSupport::Notifications.subscribe("factory_bot.compile_factory", &validate_compiled_factory)
13
+ end
14
+
15
+ private
16
+
17
+ def validate_compiled_factory
18
+ if Rails.version >= "6.0"
19
+ rails_6_0_support
20
+ else
21
+ rails_5_2_support
22
+ end
23
+ end
24
+
25
+ def rails_6_0_support
26
+ proc do |event|
27
+ @validators.each { |validator| validator.validate!(event.payload) }
28
+ end
29
+ end
30
+
31
+ def rails_5_2_support
32
+ proc do |*notification_event_arguments|
33
+ event = ActiveSupport::Notifications::Event.new(*notification_event_arguments)
34
+
35
+ rails_6_0_support.call(event)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,7 +1,7 @@
1
1
  module FactoryBotRails
2
2
  module Generators
3
3
  class NullGenerator
4
- def initialize(generators)
4
+ def initialize(*)
5
5
  end
6
6
 
7
7
  def run
@@ -3,12 +3,15 @@
3
3
  require "factory_bot"
4
4
  require "factory_bot_rails/generator"
5
5
  require "factory_bot_rails/reloader"
6
+ require "factory_bot_rails/factory_validator"
6
7
  require "rails"
7
8
 
8
9
  module FactoryBotRails
9
10
  class Railtie < Rails::Railtie
10
11
  config.factory_bot = ActiveSupport::OrderedOptions.new
11
12
  config.factory_bot.definition_file_paths = FactoryBot.definition_file_paths
13
+ config.factory_bot.reject_primary_key_attributes = true
14
+ config.factory_bot.validator = FactoryBotRails::FactoryValidator.new
12
15
 
13
16
  initializer "factory_bot.set_fixture_replacement" do
14
17
  Generator.new(config).run
@@ -18,9 +21,20 @@ module FactoryBotRails
18
21
  FactoryBot.definition_file_paths = definition_file_paths
19
22
  end
20
23
 
24
+ ActiveSupport.on_load :active_record do
25
+ config = Rails.configuration.factory_bot
26
+
27
+ if config.reject_primary_key_attributes
28
+ require "factory_bot_rails/factory_validator/active_record_validator"
29
+
30
+ config.validator.add_validator FactoryValidator::ActiveRecordValidator.new
31
+ end
32
+ end
33
+
21
34
  config.after_initialize do |app|
22
35
  FactoryBot.find_definitions
23
36
  Reloader.new(app).run
37
+ app.config.factory_bot.validator.run
24
38
  end
25
39
 
26
40
  private
@@ -2,7 +2,7 @@ require "rails/generators/named_base"
2
2
 
3
3
  module FactoryBot
4
4
  module Generators
5
- class Base < Rails::Generators::NamedBase #:nodoc:
5
+ class Base < Rails::Generators::NamedBase # :nodoc:
6
6
  def self.source_root
7
7
  path = File.join(
8
8
  File.dirname(__FILE__),
@@ -0,0 +1,26 @@
1
+ {
2
+ "spec/factories/*.rb": {
3
+ "alternate": "app/models/{singular}.rb",
4
+ "collection": "model",
5
+ "command": "factory",
6
+ "template": [
7
+ "FactoryBot.define do",
8
+ " factory :{singular} do",
9
+ " end",
10
+ "end"
11
+ ],
12
+ "test": "spec/models/{singular}_spec.rb"
13
+ },
14
+ "test/factories/*.rb": {
15
+ "alternate": "app/models/{singular}.rb",
16
+ "collection": "model",
17
+ "command": "factory",
18
+ "template": [
19
+ "FactoryBot.define do",
20
+ " factory :{singular} do",
21
+ " end",
22
+ "end"
23
+ ],
24
+ "test": "test/models/{singular}_test.rb"
25
+ }
26
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_bot_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.2.0
4
+ version: 6.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Ferris
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-07 00:00:00.000000000 Z
11
+ date: 2023-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: factory_bot
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 6.2.0
19
+ version: '6.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 6.2.0
26
+ version: '6.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: railties
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 5.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: sqlite3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activerecord
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 5.0.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 5.0.0
41
69
  description: factory_bot_rails provides integration between factory_bot and rails
42
70
  5.0 or newer
43
71
  email: jferris@thoughtbot.com
@@ -51,6 +79,8 @@ files:
51
79
  - README.md
52
80
  - lib/factory_bot_rails.rb
53
81
  - lib/factory_bot_rails/definition_file_paths.rb
82
+ - lib/factory_bot_rails/factory_validator.rb
83
+ - lib/factory_bot_rails/factory_validator/active_record_validator.rb
54
84
  - lib/factory_bot_rails/generator.rb
55
85
  - lib/factory_bot_rails/generators/non_rspec_generator.rb
56
86
  - lib/factory_bot_rails/generators/null_generator.rb
@@ -60,6 +90,7 @@ files:
60
90
  - lib/generators/factory_bot.rb
61
91
  - lib/generators/factory_bot/model/model_generator.rb
62
92
  - lib/generators/factory_bot/model/templates/factories.erb
93
+ - lib/rails/projections.json
63
94
  homepage: https://github.com/thoughtbot/factory_bot_rails
64
95
  licenses:
65
96
  - MIT
@@ -79,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
110
  - !ruby/object:Gem::Version
80
111
  version: '0'
81
112
  requirements: []
82
- rubygems_version: 3.1.6
113
+ rubygems_version: 3.4.6
83
114
  signing_key:
84
115
  specification_version: 4
85
116
  summary: factory_bot_rails provides integration between factory_bot and rails 5.0