carwow_rubocop 6.4.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: bab9089484b0743c7fd6f25a35d667677321e6041b4dd0e621dfbf880110b2b1
4
- data.tar.gz: 7296b387885978bc627d7284a10872f8a777bd6420ef533e569990c8daa891e6
3
+ metadata.gz: 3e153a088c0b69fa290062f7af76614067043033ccc9dc5cad5e96253b5c85bf
4
+ data.tar.gz: 02bb3cb5fef08391e34a518a6722b1fc23672784be9f62a32b54bea54943c3ea
5
5
  SHA512:
6
- metadata.gz: afaaa806525c1b1d124ecaa2df2ad2c6a874ef10f44bc809b172f64f1a67a0b2980b39a6f46ded6276d3a7e8cbcc85ee2d5d939f0827794cf14a67e7a4403dd3
7
- data.tar.gz: 0b315d1c176472f63c27c0c0c1f923f3a8fc03b694b869c351533bbcbd7b7f4489007b034182173a1821fda281782951444d4f037a06dc98dcafd54d6d57bd6d
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.4.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,5 +1,5 @@
1
1
  module RuboCop
2
2
  module Carwow
3
- VERSION = '6.4.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,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carwow_rubocop
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.4.0
4
+ version: 6.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - carwow Developers
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2026-03-16 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: bundler
@@ -169,6 +169,7 @@ files:
169
169
  - lib/rubocop/cop/carwow/jobs_must_define_queue.rb
170
170
  - lib/rubocop/cop/carwow/jobs_queue_name_style.rb
171
171
  - lib/rubocop/cop/carwow/no_stubbing_business_event.rb
172
+ - lib/rubocop/cop/carwow/no_vehicle_brand_model_sideload.rb
172
173
  homepage: https://github.com/carwow/carwow_rubocop
173
174
  licenses:
174
175
  - MIT
@@ -188,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
189
  - !ruby/object:Gem::Version
189
190
  version: '0'
190
191
  requirements: []
191
- rubygems_version: 3.6.2
192
+ rubygems_version: 4.0.9
192
193
  specification_version: 4
193
194
  summary: carwow's rubocop configuration
194
195
  test_files: []