carwow_rubocop 6.3.0 → 6.6.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: 155060a8f6d990d618687a7c78f42c43c9cf039f53ab41fff623a1803b2995ec
4
- data.tar.gz: e4d0cf349f5d5b913ab121ec888ab42f60dc985a08f4502fcd3b0e6184b9753c
3
+ metadata.gz: 3e153a088c0b69fa290062f7af76614067043033ccc9dc5cad5e96253b5c85bf
4
+ data.tar.gz: 02bb3cb5fef08391e34a518a6722b1fc23672784be9f62a32b54bea54943c3ea
5
5
  SHA512:
6
- metadata.gz: 2858d9cf05878f208ecf351e5def3ff65f06f9d4181eae139ff770848210a505b5b3b720b0412c32ffd678954fb283d4c2be2e9f67ccc53869e4a78ea339580c
7
- data.tar.gz: 5ac22f55117d6b77749338a70b941e0df2f5a4da889d1a342e94086724e2d47f9aaffe40c6bb8a9427fc36fafcdaaa8023aeb99bf4dc7293fbdae305883e20dc
6
+ metadata.gz: 9a991a2a692417cd5833058df9de060471684ecd0a59e2700438a1c2655bbc624884ae88d200174ec4bdf8780164ec2755e28b508fe73c981abe5986824749f4
7
+ data.tar.gz: 9c0c9b783c7288a0ed8f6fc0e7dd70b49116ff96bca7007e38874a77e3e1667f7e587033daf2c595d550646b6c75ca0ea95592b7bf31cb213fc4e3823362c506
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- carwow_rubocop (6.3.0)
4
+ carwow_rubocop (6.6.0)
5
5
  rubocop (>= 1.75)
6
6
  rubocop-factory_bot
7
7
  rubocop-performance
data/config/default.yml CHANGED
@@ -20,6 +20,7 @@ AllCops:
20
20
  - 'public/**/*'
21
21
  - 'tmp/**/*'
22
22
  - 'vendor/**/*'
23
+ SuggestExtensions: false
23
24
 
24
25
  inherit_from:
25
26
  - './rubocop-bundler.yml'
@@ -36,3 +36,6 @@ Carwow/AddColumnWithComment:
36
36
  Enabled: true
37
37
  Include: &migrations_only
38
38
  - "**/db/migrate/**/*.rb"
39
+
40
+ Carwow/NoVehicleBrandModelSideload:
41
+ Enabled: true
@@ -1,6 +1,9 @@
1
1
  Style/AsciiComments:
2
2
  Enabled: false
3
3
 
4
+ Style/HashSyntax:
5
+ EnforcedShorthandSyntax: always
6
+
4
7
  Style/Documentation:
5
8
  Enabled: false
6
9
 
@@ -1,5 +1,5 @@
1
1
  module RuboCop
2
2
  module Carwow
3
- VERSION = '6.3.0'.freeze
3
+ VERSION = '6.6.0'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Carwow
6
+ class NoVehicleBrandModelSideload < Base
7
+ MSG = 'Do not sideload vehicle brand/model with includes.' \
8
+ 'Request brand/model via extra_fields(vehicles: ...).'
9
+
10
+ RESTRICT_ON_SEND = %i[includes].freeze
11
+
12
+ DEAL_CONST = 'DealsServiceApiClient::Deal'
13
+ VEHICLE_CONST = 'DealsServiceApiClient::Vehicle'
14
+
15
+ def_node_matcher :brand_or_model_sym?, <<~PATTERN
16
+ (sym {:brand :model})
17
+ PATTERN
18
+
19
+ def_node_matcher :vehicle_with_brand_or_model?, <<~PATTERN
20
+ (pair (sym :vehicle) (array <#brand_or_model_sym? ...>))
21
+ PATTERN
22
+
23
+ def on_send(node)
24
+ offending_sideloads(node).each { |sideload| add_offense(sideload) }
25
+ end
26
+
27
+ private
28
+
29
+ def offending_sideloads(node)
30
+ case root_receiver_const(node.receiver)
31
+ when DEAL_CONST then deal_offenses(node.arguments)
32
+ when VEHICLE_CONST then vehicle_offenses(node.arguments)
33
+ else []
34
+ end
35
+ end
36
+
37
+ def deal_offenses(arguments)
38
+ arguments.flat_map do |arg|
39
+ next [] unless arg.hash_type?
40
+
41
+ arg.pairs.filter_map { |pair| pair.value if vehicle_with_brand_or_model?(pair) }
42
+ end
43
+ end
44
+
45
+ def vehicle_offenses(arguments)
46
+ arguments.select { |arg| brand_or_model_sym?(arg) }
47
+ end
48
+
49
+ def root_receiver_const(node)
50
+ return unless node
51
+ return node.const_name if node.const_type?
52
+
53
+ root_receiver_const(node.receiver) if node.send_type?
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carwow_rubocop
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.3.0
4
+ version: 6.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - carwow Developers
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2025-05-12 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -170,12 +169,12 @@ files:
170
169
  - lib/rubocop/cop/carwow/jobs_must_define_queue.rb
171
170
  - lib/rubocop/cop/carwow/jobs_queue_name_style.rb
172
171
  - lib/rubocop/cop/carwow/no_stubbing_business_event.rb
172
+ - lib/rubocop/cop/carwow/no_vehicle_brand_model_sideload.rb
173
173
  homepage: https://github.com/carwow/carwow_rubocop
174
174
  licenses:
175
175
  - MIT
176
176
  metadata:
177
177
  rubygems_mfa_required: 'true'
178
- post_install_message:
179
178
  rdoc_options: []
180
179
  require_paths:
181
180
  - lib
@@ -190,8 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
189
  - !ruby/object:Gem::Version
191
190
  version: '0'
192
191
  requirements: []
193
- rubygems_version: 3.4.19
194
- signing_key:
192
+ rubygems_version: 4.0.9
195
193
  specification_version: 4
196
194
  summary: carwow's rubocop configuration
197
195
  test_files: []