rubocop-sequel 0.3.7 → 0.3.8

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: 4023b536f86132312aefef7c17bbef5f85b3036bb0a1ac61fb8b53a532afbc19
4
- data.tar.gz: 2a317cc181637b43163e3757e11235298ff49d3bf2a8cb284a1a30302623432a
3
+ metadata.gz: 43689260646cb1428cd6629924d01648a005939d8f1094a6fcbb88ecc1a7fc68
4
+ data.tar.gz: b95f6400f9d2857ac7ce9d32c8931a71db14ba6e8cd86e128289fe1ef836d95b
5
5
  SHA512:
6
- metadata.gz: 9992c88db3726a7ffa555f3a978f3985245d4cf606fecf5710a02e850b04325849c9b48c11c86e7e80d3a4c24efcc909399d77181e51ad0e51db2f5aff0ffc8b
7
- data.tar.gz: a195f6dab7e9bcec0e129cb1cee6f9cacfccde5db0ef7e99d5e7d7960e71442add297face4f04b72d874e7b328aa0262b03ad1be09e75ccab514fe5fd57c2ac8
6
+ metadata.gz: a78387c550cc09564f2fffee05a5dda77c370130dd41f9c8b8a0f8bb26683813b97c1c2540250574c95ae7a192743d1873f59b82cdf02de501ff1d679a029bb5
7
+ data.tar.gz: 2e91b8df57f918c221d2d2319037264d347b84eaa082ed6f378d85f5023f9b6bcf19a5b2854553cc56707e986551c9bf5dd2ff1f17aaa1e04a3e5bd7c94221a9
data/config/default.yml CHANGED
@@ -17,7 +17,7 @@ Sequel/IrreversibleMigration:
17
17
  Reference: https://www.rubydoc.info/gems/rubocop-sequel/RuboCop/Cop/Sequel/IrreversibleMigration
18
18
  Enabled: true
19
19
  VersionAdded: 0.3.5
20
- VersionChanged: 0.3.7
20
+ VersionChanged: 0.3.8
21
21
 
22
22
  Sequel/JSONColumn:
23
23
  Description: >-
@@ -28,7 +28,7 @@ module RuboCop
28
28
  set_column_allow_null
29
29
  ].freeze
30
30
 
31
- MSG = 'Avoid using "%<name>s" inside a "change" block. Use "up" & "down" blocks instead.'
31
+ MSG = 'Using "%<name>s" inside a "change" block may cause an irreversible migration. Use "up" & "down" instead.'
32
32
  PRIMARY_KEY_MSG = 'Avoid using "add_primary_key" with an array argument inside a "change" block.'
33
33
 
34
34
  def on_block(node)
@@ -46,6 +46,8 @@ module RuboCop
46
46
  def validate_node(node)
47
47
  return if within_create_table_block?(node)
48
48
 
49
+ return if part_of_method_call?(node)
50
+
49
51
  add_offense(node.loc.selector, message: format(MSG, name: node.method_name)) unless valid_change_method?(node)
50
52
 
51
53
  add_offense(node.loc.selector, message: PRIMARY_KEY_MSG) if invalid_primary_key_method?(node)
@@ -68,6 +70,10 @@ module RuboCop
68
70
  ancestor.method_name == :create_table
69
71
  end
70
72
  end
73
+
74
+ def part_of_method_call?(node)
75
+ node.each_ancestor(:send).count.positive?
76
+ end
71
77
  end
72
78
  end
73
79
  end
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Sequel
5
5
  # This module holds the RuboCop Sequel version information.
6
6
  module Version
7
- STRING = '0.3.7'
7
+ STRING = '0.3.8'
8
8
  end
9
9
  end
10
10
  end
@@ -12,7 +12,7 @@ Gem::Specification.new do |gem|
12
12
  gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
13
13
  gem.name = 'rubocop-sequel'
14
14
  gem.require_paths = ['lib']
15
- gem.version = '0.3.7'
15
+ gem.version = '0.3.8'
16
16
  gem.metadata['rubygems_mfa_required'] = 'true'
17
17
 
18
18
  gem.required_ruby_version = '>= 2.5'
@@ -103,6 +103,52 @@ RSpec.describe RuboCop::Cop::Sequel::IrreversibleMigration do
103
103
  expect(offenses.size).to eq(1)
104
104
  end
105
105
  end
106
+
107
+ describe 'and a method is used within an argument' do
108
+ let(:source) do
109
+ <<~SOURCE
110
+ change do
111
+ alter_table(:stores) do
112
+ add_column(:products, JSON, null: false, default: Sequel.pg_json({}))
113
+ add_constraint(
114
+ :only_one_user,
115
+ (
116
+ Sequel.cast(Sequel.~(user_id: nil), Integer) +
117
+ Sequel.cast(Sequel.~(owner_id: nil), Integer)
118
+ ) => 1,
119
+ )
120
+ end
121
+ end
122
+ SOURCE
123
+ end
124
+
125
+ it 'does not register an offense with valid methods' do
126
+ offenses = inspect_source_within_migration(source)
127
+ expect(offenses).to be_empty
128
+ end
129
+ end
130
+
131
+ describe 'and an invalid change method contains another invalid change method as an argument' do
132
+ let(:source) do
133
+ <<~SOURCE
134
+ change do
135
+ alter_table(:stores) do
136
+ drop_column(:products, JSON, null: false, default: Sequel.pg_json({}))
137
+ end
138
+ end
139
+ SOURCE
140
+ end
141
+
142
+ it 'only registers 1 offense' do
143
+ offenses = inspect_source_within_migration(source)
144
+ expect(offenses.size).to eq(1)
145
+ end
146
+
147
+ it 'only registers an offense for the parent method' do
148
+ offenses = inspect_source_within_migration(source)
149
+ expect(offenses.first.message).to include('drop_column')
150
+ end
151
+ end
106
152
  end
107
153
 
108
154
  context 'when inside an up block' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Timothée Peignier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-05 00:00:00.000000000 Z
11
+ date: 2024-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop