rubocop-config-captive 2.0.3.pre.2.0.2 → 2.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 17029634a4b6ca56ebdd87ba7b6cc9202eb9c583ec2f0e8f30428ed571b82472
4
- data.tar.gz: f4e8a194f899171974832d4d2ec73a6a54c79a25ace7f41ac078dadde6cdfa19
3
+ metadata.gz: 3d110c3b8b4d74c53467fe19714dfc220ff2f82f65b5a52d81563e860ca8d107
4
+ data.tar.gz: e3f41020eef68b55149dae6ceaed53db082905169eece57a0eec54db6cbf956c
5
5
  SHA512:
6
- metadata.gz: 9eedf4b63ac334a3de870fe54ff3ad2b0b85f68cccf1d4162adf3641695122d56d2298be67d80c3191dc81fe3de0e900192f6f8568c72de8bd9df6f79974c512
7
- data.tar.gz: 6d2f399bf2bd774b05efb21d364e66c1d277264d6310c52aff87f3e3d7f3b7614d392783f217192780ac68b3a3d7840040f4acbe93c3c2740509578f98fd6c10
6
+ metadata.gz: 26f2dbad2e10ac9a7b59e0765648b6d4041329bda1c30e4469b8de9b6e169e4345389e2d886686d8863392f9a123ec0a89a1e01c114128bc56be494c8aeac207
7
+ data.tar.gz: e7805305fa74912ce3a8b6892f27e2b4627e32e2e41b57c6722d48b582b7687f8b69c21a6bd73028aa7916a69950f3d5dfaae474b29aeb77b0482b698fe3ac06
@@ -11,6 +11,7 @@ require:
11
11
  - ../lib/rubocop/cop/captive/rails/no_email_from_controller.rb
12
12
  - ../lib/rubocop/cop/captive/rails/no_float_price_columns.rb
13
13
  - ../lib/rubocop/cop/captive/rails/no_find_by_in_scope.rb
14
+ - ../lib/rubocop/cop/captive/rails/no_has_many_attached.rb
14
15
  - ../lib/rubocop/cop/captive/string_where_in_scope.rb
15
16
  - ../lib/rubocop/cop/captive/no_app_env.rb
16
17
 
@@ -82,6 +83,12 @@ Captive/Rails/NoFindByInScope:
82
83
  Include:
83
84
  - 'app/models/**/*'
84
85
 
86
+ Captive/Rails/NoHasManyAttached:
87
+ Description: "N'utilisez pas `has_many_attached` (Active Storage). Préférez un modèle associé avec `has_one_attached` pour pouvoir ajouter des attributs (position, image de couverture, etc.)."
88
+ Severity: error
89
+ Include:
90
+ - 'app/models/**/*'
91
+
85
92
  # other
86
93
  Captive/StringWhereInScope:
87
94
  Description: 'The `where` method should be used in a scope in a model.'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module Captive
5
- VERSION = "2.0.3-2.0.2"
5
+ VERSION = "2.1.1"
6
6
  end
7
7
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Captive
6
+ module Rails
7
+ # Interdit l'utilisation de `has_many_attached` (Active Storage) dans les modèles Rails.
8
+ #
9
+ # À chaque utilisation de `has_many_attached`, on finit par avoir besoin d'informations
10
+ # supplémentaires sur les fichiers (image de couverture, position, ordre, etc.), ce qu'on
11
+ # ne peut pas faire avec des blobs seuls. Par exemple, un produit avec `has_many_attached
12
+ # :images` permet d'afficher la première image en couverture, mais si cette image s'avère
13
+ # être une grille de tailles et qu'on veut en choisir une autre, c'est impossible : les
14
+ # pièces jointes sont de simples blobs sans attributs métier.
15
+ #
16
+ # La solution recommandée est d'utiliser un modèle associé (ex. `Photo`) avec
17
+ # `has_one_attached :file` et des attributs (position, type, etc.). Cela évite une
18
+ # migration coûteuse plus tard pour faire passer des millions d'images de blobs à un
19
+ # vrai modèle.
20
+ #
21
+ # @see https://discuss.rubyonrails.org/t/active-storage-in-production-lessons-learned-and-in-depth-look-at-how-it-works/83289#p-254385-bonus-1-if-someone-were-to-write-active-storage-the-good-parts-then-has_many_attached-would-not-be-in-it-31
22
+ class NoHasManyAttached < Base
23
+ MSG = "N'utilisez pas `has_many_attached`. Préférez un modèle associé avec " \
24
+ "`has_one_attached` pour pouvoir ajouter des attributs " \
25
+ "(position, image de couverture, etc.)."
26
+
27
+ def_node_matcher :has_many_attached?, <<~PATTERN
28
+ (send nil? :has_many_attached ...)
29
+ PATTERN
30
+
31
+ def on_send(node)
32
+ return unless has_many_attached?(node)
33
+
34
+ add_offense(node, message: MSG)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -23,14 +23,14 @@ Gem::Specification.new do |gem|
23
23
 
24
24
  # Pour mettre à jour les dépendances, vous pouvez utiliser le script :
25
25
  # ruby script/update_dependencies.rb
26
- gem.add_dependency("rubocop", "~> 1.77.0")
27
- gem.add_dependency("rubocop-performance", "~> 1.25.0")
28
- gem.add_dependency("rubocop-rake", "~> 0.7.1")
29
- gem.add_dependency("rubocop-rails", "~> 2.32.0")
30
- gem.add_dependency("rubocop-rspec", "~> 3.6.0")
31
- gem.add_dependency("rubocop-capybara", "~> 2.22.1")
32
- gem.add_dependency("rubocop-factory_bot", "~> 2.27.1")
33
- gem.add_dependency("rubocop-magic_numbers", "~> 0.5.0")
34
- gem.add_dependency("rubocop-rails-omakase", "~> 1.1.0")
26
+ gem.add_dependency("rubocop", "~> 1.77")
27
+ gem.add_dependency("rubocop-performance", "~> 1.25")
28
+ gem.add_dependency("rubocop-rake", "~> 0.7")
29
+ gem.add_dependency("rubocop-rails", "~> 2.32")
30
+ gem.add_dependency("rubocop-rspec", "~> 3.6")
31
+ gem.add_dependency("rubocop-capybara", "~> 2.22")
32
+ gem.add_dependency("rubocop-factory_bot", "~> 2.27")
33
+ gem.add_dependency("rubocop-magic_numbers", "~> 0.5")
34
+ gem.add_dependency("rubocop-rails-omakase", "~> 1.1")
35
35
  gem.add_development_dependency("rspec", "~> 3.12")
36
36
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-config-captive
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3.pre.2.0.2
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Captive
@@ -17,126 +17,126 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 1.77.0
20
+ version: '1.77'
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: 1.77.0
27
+ version: '1.77'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rubocop-performance
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 1.25.0
34
+ version: '1.25'
35
35
  type: :runtime
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: 1.25.0
41
+ version: '1.25'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rubocop-rake
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 0.7.1
48
+ version: '0.7'
49
49
  type: :runtime
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: 0.7.1
55
+ version: '0.7'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rubocop-rails
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: 2.32.0
62
+ version: '2.32'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: 2.32.0
69
+ version: '2.32'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rubocop-rspec
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: 3.6.0
76
+ version: '3.6'
77
77
  type: :runtime
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: 3.6.0
83
+ version: '3.6'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: rubocop-capybara
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: 2.22.1
90
+ version: '2.22'
91
91
  type: :runtime
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: 2.22.1
97
+ version: '2.22'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: rubocop-factory_bot
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: 2.27.1
104
+ version: '2.27'
105
105
  type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: 2.27.1
111
+ version: '2.27'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: rubocop-magic_numbers
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - "~>"
117
117
  - !ruby/object:Gem::Version
118
- version: 0.5.0
118
+ version: '0.5'
119
119
  type: :runtime
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
- version: 0.5.0
125
+ version: '0.5'
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: rubocop-rails-omakase
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - "~>"
131
131
  - !ruby/object:Gem::Version
132
- version: 1.1.0
132
+ version: '1.1'
133
133
  type: :runtime
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - "~>"
138
138
  - !ruby/object:Gem::Version
139
- version: 1.1.0
139
+ version: '1.1'
140
140
  - !ruby/object:Gem::Dependency
141
141
  name: rspec
142
142
  requirement: !ruby/object:Gem::Requirement
@@ -201,6 +201,7 @@ files:
201
201
  - lib/rubocop/cop/captive/rails/no_email_from_controller.rb
202
202
  - lib/rubocop/cop/captive/rails/no_find_by_in_scope.rb
203
203
  - lib/rubocop/cop/captive/rails/no_float_price_columns.rb
204
+ - lib/rubocop/cop/captive/rails/no_has_many_attached.rb
204
205
  - lib/rubocop/cop/captive/rspec/specify_before_parameter.rb
205
206
  - lib/rubocop/cop/captive/string_where_in_scope.rb
206
207
  - lib/rubocop/cop/captive/translation/devise_i18n_presence.rb