sevencop 0.22.0 → 0.23.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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +0 -16
- data/config/default.yml +0 -143
- data/lib/sevencop/cop_concerns.rb +0 -3
- data/lib/sevencop/version.rb +1 -1
- data/lib/sevencop.rb +0 -16
- metadata +2 -21
- data/lib/rubocop/cop/sevencop/rails_migration_add_check_constraint.rb +0 -111
- data/lib/rubocop/cop/sevencop/rails_migration_add_column_with_default_value.rb +0 -229
- data/lib/rubocop/cop/sevencop/rails_migration_add_foreign_key.rb +0 -166
- data/lib/rubocop/cop/sevencop/rails_migration_add_index_concurrently.rb +0 -164
- data/lib/rubocop/cop/sevencop/rails_migration_batch_in_batches.rb +0 -95
- data/lib/rubocop/cop/sevencop/rails_migration_batch_in_transaction.rb +0 -83
- data/lib/rubocop/cop/sevencop/rails_migration_batch_with_throttling.rb +0 -108
- data/lib/rubocop/cop/sevencop/rails_migration_change_column.rb +0 -113
- data/lib/rubocop/cop/sevencop/rails_migration_change_column_null.rb +0 -128
- data/lib/rubocop/cop/sevencop/rails_migration_create_table_force.rb +0 -89
- data/lib/rubocop/cop/sevencop/rails_migration_jsonb.rb +0 -131
- data/lib/rubocop/cop/sevencop/rails_migration_remove_column.rb +0 -258
- data/lib/rubocop/cop/sevencop/rails_migration_rename_column.rb +0 -81
- data/lib/rubocop/cop/sevencop/rails_migration_rename_table.rb +0 -79
- data/lib/rubocop/cop/sevencop/rails_migration_reserved_word_mysql.rb +0 -232
- data/lib/rubocop/cop/sevencop/rails_migration_unique_index_columns_count.rb +0 -92
- data/lib/sevencop/cop_concerns/batch_processing.rb +0 -32
- data/lib/sevencop/cop_concerns/column_type_method.rb +0 -26
- data/lib/sevencop/cop_concerns/disable_ddl_transaction.rb +0 -49
@@ -1,81 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module Sevencop
|
6
|
-
# Avoid renaming columns that are in use.
|
7
|
-
#
|
8
|
-
# It will cause errors in your application.
|
9
|
-
# A safer approach is to:
|
10
|
-
#
|
11
|
-
# 1. Create a new column
|
12
|
-
# 2. Write to both columns
|
13
|
-
# 3. Backfill data from the old column to the new column
|
14
|
-
# 4. Move reads from the old column to the new column
|
15
|
-
# 5. Stop writing to the old column
|
16
|
-
# 6. Drop the old column
|
17
|
-
#
|
18
|
-
# @safety
|
19
|
-
# Only meaningful if the column is in use.
|
20
|
-
#
|
21
|
-
# @example
|
22
|
-
# # bad
|
23
|
-
# class RenameUsersSettingsToProperties < ActiveRecord::Migration[7.0]
|
24
|
-
# def change
|
25
|
-
# rename_column :users, :settings, :properties
|
26
|
-
# end
|
27
|
-
# end
|
28
|
-
#
|
29
|
-
# # good
|
30
|
-
# class AddUsersProperties < ActiveRecord::Migration[7.0]
|
31
|
-
# def change
|
32
|
-
# add_column :users, :properties, :jsonb
|
33
|
-
# end
|
34
|
-
# end
|
35
|
-
#
|
36
|
-
# class User < ApplicationRecord
|
37
|
-
# self.ignored_columns += %w[settings]
|
38
|
-
# end
|
39
|
-
#
|
40
|
-
# class RemoveUsersSettings < ActiveRecord::Migration[7.0]
|
41
|
-
# def change
|
42
|
-
# remove_column :users, :settings
|
43
|
-
# end
|
44
|
-
# end
|
45
|
-
class RailsMigrationRenameColumn < RuboCop::Cop::Base
|
46
|
-
MSG = 'Avoid renaming columns that are in use.'
|
47
|
-
|
48
|
-
RESTRICT_ON_SEND = %i[
|
49
|
-
rename_column
|
50
|
-
].freeze
|
51
|
-
|
52
|
-
# @param node [RuboCop::AST::SendNode]
|
53
|
-
# @return [void]
|
54
|
-
def on_send(node)
|
55
|
-
return unless bad?(node)
|
56
|
-
|
57
|
-
add_offense(node)
|
58
|
-
end
|
59
|
-
|
60
|
-
private
|
61
|
-
|
62
|
-
# @!method rename_column?(node)
|
63
|
-
# @param node [RuboCop::AST::SendNode]
|
64
|
-
# @return [Boolean]
|
65
|
-
def_node_matcher :rename_column?, <<~PATTERN
|
66
|
-
(send
|
67
|
-
nil?
|
68
|
-
:rename_column
|
69
|
-
...
|
70
|
-
)
|
71
|
-
PATTERN
|
72
|
-
|
73
|
-
# @param node [RuboCop::AST::SendNode]
|
74
|
-
# @return [Boolean]
|
75
|
-
def bad?(node)
|
76
|
-
rename_column?(node)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module Sevencop
|
6
|
-
# Avoid renaming tables that are in use.
|
7
|
-
#
|
8
|
-
# It will cause errors in your application.
|
9
|
-
# A safer approach is to:
|
10
|
-
#
|
11
|
-
# 1. Create a new table
|
12
|
-
# 2. Write to both tables
|
13
|
-
# 3. Backfill data from the old table to new table
|
14
|
-
# 4. Move reads from the old table to the new table
|
15
|
-
# 5. Stop writing to the old table
|
16
|
-
# 6. Drop the old table
|
17
|
-
#
|
18
|
-
# @safety
|
19
|
-
# Only meaningful if the table is in use.
|
20
|
-
#
|
21
|
-
# @example
|
22
|
-
# # bad
|
23
|
-
# class RenameUsersToAccouts < ActiveRecord::Migration[7.0]
|
24
|
-
# def change
|
25
|
-
# rename_table :users, :accounts
|
26
|
-
# end
|
27
|
-
# end
|
28
|
-
#
|
29
|
-
# # good
|
30
|
-
# class AddAccounts < ActiveRecord::Migration[7.0]
|
31
|
-
# def change
|
32
|
-
# create_table :accounts do |t|
|
33
|
-
# t.string :name, null: false
|
34
|
-
# end
|
35
|
-
# end
|
36
|
-
# end
|
37
|
-
#
|
38
|
-
# class RemoveUsers < ActiveRecord::Migration[7.0]
|
39
|
-
# def change
|
40
|
-
# remove_table :users
|
41
|
-
# end
|
42
|
-
# end
|
43
|
-
class RailsMigrationRenameTable < RuboCop::Cop::Base
|
44
|
-
MSG = 'Avoid renaming tables that are in use.'
|
45
|
-
|
46
|
-
RESTRICT_ON_SEND = %i[
|
47
|
-
rename_table
|
48
|
-
].freeze
|
49
|
-
|
50
|
-
# @param node [RuboCop::AST::SendNode]
|
51
|
-
# @return [void]
|
52
|
-
def on_send(node)
|
53
|
-
return unless bad?(node)
|
54
|
-
|
55
|
-
add_offense(node)
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
# @!method rename_table?(node)
|
61
|
-
# @param node [RuboCop::AST::SendNode]
|
62
|
-
# @return [Boolean]
|
63
|
-
def_node_matcher :rename_table?, <<~PATTERN
|
64
|
-
(send
|
65
|
-
nil?
|
66
|
-
:rename_table
|
67
|
-
...
|
68
|
-
)
|
69
|
-
PATTERN
|
70
|
-
|
71
|
-
# @param node [RuboCop::AST::SendNode]
|
72
|
-
# @return [Boolean]
|
73
|
-
def bad?(node)
|
74
|
-
rename_table?(node)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
@@ -1,232 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'set'
|
4
|
-
|
5
|
-
module RuboCop
|
6
|
-
module Cop
|
7
|
-
module Sevencop
|
8
|
-
# Avoid using MySQL reserved words as identifiers.
|
9
|
-
#
|
10
|
-
# @example
|
11
|
-
# # bad
|
12
|
-
# # NOTE: `role` is a reserved word in MySQL.
|
13
|
-
# add_column :users, :role, :string
|
14
|
-
#
|
15
|
-
# # good
|
16
|
-
# add_column :users, :some_other_good_name, :string
|
17
|
-
class RailsMigrationReservedWordMysql < RuboCop::Cop::Base
|
18
|
-
include ::Sevencop::CopConcerns::ColumnTypeMethod
|
19
|
-
|
20
|
-
MSG = 'Avoid using MySQL reserved words as identifiers.'
|
21
|
-
|
22
|
-
# Obtained from https://dev.mysql.com/doc/refman/8.0/en/keywords.html.
|
23
|
-
PATH_TO_RESERVED_WORDS_FILE = File.expand_path(
|
24
|
-
'../../../../data/reserved_words_mysql.txt',
|
25
|
-
__dir__
|
26
|
-
).freeze
|
27
|
-
|
28
|
-
RESTRICT_ON_SEND = [
|
29
|
-
:add_column,
|
30
|
-
:add_index,
|
31
|
-
:add_reference,
|
32
|
-
:create_join_table,
|
33
|
-
:create_table,
|
34
|
-
:rename,
|
35
|
-
:rename_column,
|
36
|
-
:rename_index,
|
37
|
-
:rename_table,
|
38
|
-
*COLUMN_TYPE_METHOD_NAMES
|
39
|
-
].freeze
|
40
|
-
|
41
|
-
class << self
|
42
|
-
# @return [Array<String>]
|
43
|
-
def reserved_words
|
44
|
-
@reserved_words ||= ::Set.new(
|
45
|
-
::File.read(PATH_TO_RESERVED_WORDS_FILE).split("\n")
|
46
|
-
).freeze
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
# @param node [RuboCop::AST::DefNode]
|
51
|
-
# @return [void]
|
52
|
-
def on_send(node)
|
53
|
-
offended_identifier_nodes_from(node).each do |identifier_node|
|
54
|
-
add_offense(identifier_node)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
# @!method index_name_option_from_add_index(node)
|
61
|
-
# @param node [RuboCop::AST::SendNode]
|
62
|
-
# @return [RuboCop::AST::Node, nil]
|
63
|
-
def_node_matcher :index_name_option_from_add_index, <<~PATTERN
|
64
|
-
(send
|
65
|
-
nil?
|
66
|
-
:add_index
|
67
|
-
_
|
68
|
-
_
|
69
|
-
(hash
|
70
|
-
<
|
71
|
-
(pair
|
72
|
-
(sym :name)
|
73
|
-
$_
|
74
|
-
)
|
75
|
-
>
|
76
|
-
...
|
77
|
-
)
|
78
|
-
)
|
79
|
-
PATTERN
|
80
|
-
|
81
|
-
# @!method index_name_option_from_add_reference(node)
|
82
|
-
# @param node [RuboCop::AST::SendNode]
|
83
|
-
# @return [RuboCop::AST::Node, nil]
|
84
|
-
def_node_matcher :index_name_option_from_add_reference, <<~PATTERN
|
85
|
-
(send
|
86
|
-
nil?
|
87
|
-
:add_reference
|
88
|
-
_
|
89
|
-
_
|
90
|
-
(hash
|
91
|
-
<
|
92
|
-
(pair
|
93
|
-
(sym :index)
|
94
|
-
(hash
|
95
|
-
<
|
96
|
-
(pair
|
97
|
-
(sym :name)
|
98
|
-
$_
|
99
|
-
)
|
100
|
-
>
|
101
|
-
...
|
102
|
-
)
|
103
|
-
)
|
104
|
-
>
|
105
|
-
...
|
106
|
-
)
|
107
|
-
)
|
108
|
-
PATTERN
|
109
|
-
|
110
|
-
# @!method index_name_option_from_column_type(node)
|
111
|
-
# @param node [RuboCop::AST::SendNode]
|
112
|
-
# @return [RuboCop::AST::Node, nil]
|
113
|
-
def_node_matcher :index_name_option_from_column_type, <<~PATTERN
|
114
|
-
(send
|
115
|
-
lvar
|
116
|
-
COLUMN_TYPE_METHOD_NAMES
|
117
|
-
_
|
118
|
-
(hash
|
119
|
-
<
|
120
|
-
(pair
|
121
|
-
(sym :index)
|
122
|
-
(hash
|
123
|
-
<
|
124
|
-
(pair
|
125
|
-
(sym :name)
|
126
|
-
$_
|
127
|
-
)
|
128
|
-
...
|
129
|
-
>
|
130
|
-
)
|
131
|
-
)
|
132
|
-
...
|
133
|
-
>
|
134
|
-
)
|
135
|
-
)
|
136
|
-
PATTERN
|
137
|
-
|
138
|
-
# @!method table_name_option_from(node)
|
139
|
-
# @param node [RuboCop::AST::SendNode]
|
140
|
-
# @return [RuboCop::AST::Node, nil]
|
141
|
-
def_node_matcher :table_name_option_from, <<~PATTERN
|
142
|
-
(send
|
143
|
-
nil?
|
144
|
-
:create_join_table
|
145
|
-
_
|
146
|
-
_
|
147
|
-
(hash
|
148
|
-
<
|
149
|
-
(pair
|
150
|
-
(sym :table_name)
|
151
|
-
$_
|
152
|
-
)
|
153
|
-
...
|
154
|
-
>
|
155
|
-
)
|
156
|
-
)
|
157
|
-
PATTERN
|
158
|
-
|
159
|
-
# @param node [RuboCop::AST::SendNode]
|
160
|
-
# @return [Array<RuboCop::AST::Node>]
|
161
|
-
def identifier_column_name_nodes_from(node)
|
162
|
-
case node.method_name
|
163
|
-
when :add_column, :rename
|
164
|
-
[node.arguments[1]]
|
165
|
-
when :rename_column
|
166
|
-
[node.arguments[2]]
|
167
|
-
when *COLUMN_TYPE_METHOD_NAMES
|
168
|
-
[node.arguments[0]]
|
169
|
-
else
|
170
|
-
[]
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
# @param node [RuboCop::AST::SendNode]
|
175
|
-
# @return [Array<RuboCop::AST::Node>]
|
176
|
-
def identifier_index_name_nodes_from(node)
|
177
|
-
case node.method_name
|
178
|
-
when :add_index
|
179
|
-
[index_name_option_from_add_index(node)].compact
|
180
|
-
when :add_reference
|
181
|
-
[index_name_option_from_add_reference(node)].compact
|
182
|
-
when :rename_index
|
183
|
-
[node.arguments[2]]
|
184
|
-
when *COLUMN_TYPE_METHOD_NAMES
|
185
|
-
[index_name_option_from_column_type(node)].compact
|
186
|
-
else
|
187
|
-
[]
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
# @param node [RuboCop::AST::SendNode]
|
192
|
-
# @return [Array<RuboCop::AST::Node>]
|
193
|
-
def identifier_nodes_from(node)
|
194
|
-
identifier_table_name_nodes_from(node) +
|
195
|
-
identifier_column_name_nodes_from(node) +
|
196
|
-
identifier_index_name_nodes_from(node)
|
197
|
-
end
|
198
|
-
|
199
|
-
# @param node [RuboCop::AST::SendNode]
|
200
|
-
# @return [Array<RuboCop::AST::Node>]
|
201
|
-
def identifier_table_name_nodes_from(node)
|
202
|
-
case node.method_name
|
203
|
-
when :create_join_table
|
204
|
-
[table_name_option_from(node)].compact
|
205
|
-
when :create_table
|
206
|
-
[node.arguments[0]]
|
207
|
-
when :rename_table
|
208
|
-
[node.arguments[1]]
|
209
|
-
else
|
210
|
-
[]
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
# @param node [RuboCop::AST::Node]
|
215
|
-
# @return [Array<RuboCop::AST::Node>]
|
216
|
-
def offended_identifier_nodes_from(node)
|
217
|
-
identifier_nodes_from(node).select do |identifier_node|
|
218
|
-
reserved_word_identifier_node?(identifier_node)
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
# @param node [RuboCop::AST::Node]
|
223
|
-
# @return [Boolean]
|
224
|
-
def reserved_word_identifier_node?(node)
|
225
|
-
return false unless node.respond_to?(:value)
|
226
|
-
|
227
|
-
self.class.reserved_words.include?(node.value.to_s)
|
228
|
-
end
|
229
|
-
end
|
230
|
-
end
|
231
|
-
end
|
232
|
-
end
|
@@ -1,92 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module Sevencop
|
6
|
-
# Keep unique index columns count less than a specified number.
|
7
|
-
#
|
8
|
-
# Adding a non-unique index with more than three columns rarely improves performance.
|
9
|
-
# Instead, start an index with columns that narrow down the results the most.
|
10
|
-
#
|
11
|
-
# @example
|
12
|
-
# # bad
|
13
|
-
# add_index :users, %i[a b c d]
|
14
|
-
#
|
15
|
-
# # good (`MaxColumnsCount: 3` by default)
|
16
|
-
# add_index :users, %i[a b c]
|
17
|
-
class RailsMigrationUniqueIndexColumnsCount < RuboCop::Cop::Base
|
18
|
-
RESTRICT_ON_SEND = %i[
|
19
|
-
add_index
|
20
|
-
index
|
21
|
-
].freeze
|
22
|
-
|
23
|
-
# @param node [RuboCop::AST::SendNode]
|
24
|
-
# @return [void]
|
25
|
-
def on_send(node)
|
26
|
-
column_names_node = column_names_node_from(node)
|
27
|
-
return unless column_names_node
|
28
|
-
|
29
|
-
column_names_count = columns_count_from(column_names_node)
|
30
|
-
return if column_names_count <= max_columns_count
|
31
|
-
|
32
|
-
add_offense(
|
33
|
-
column_names_node,
|
34
|
-
message: "Keep unique index columns count less than #{max_columns_count}."
|
35
|
-
)
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
# @!method column_names_node_from_add_index(node)
|
41
|
-
# @param node [RuboCop::AST::SendNode]
|
42
|
-
# @return [RuboCop::AST::Node, nil]
|
43
|
-
def_node_matcher :column_names_node_from_add_index, <<~PATTERN
|
44
|
-
(send
|
45
|
-
nil?
|
46
|
-
_
|
47
|
-
_
|
48
|
-
$({array | sym} ...)
|
49
|
-
)
|
50
|
-
PATTERN
|
51
|
-
|
52
|
-
# @!method column_names_node_from_index(node)
|
53
|
-
# @param node [RuboCop::AST::SendNode]
|
54
|
-
# @return [RuboCop::AST::Node, nil]
|
55
|
-
def_node_matcher :column_names_node_from_index, <<~PATTERN
|
56
|
-
(send
|
57
|
-
(lvar ...)
|
58
|
-
_
|
59
|
-
$({array | sym} ...)
|
60
|
-
)
|
61
|
-
PATTERN
|
62
|
-
|
63
|
-
# @param node [RuboCop::AST::SendNode]
|
64
|
-
# @return [RuboCop::AST::Node, nil]
|
65
|
-
def column_names_node_from(node)
|
66
|
-
case node.method_name
|
67
|
-
when :add_index
|
68
|
-
column_names_node_from_add_index(node)
|
69
|
-
when :index
|
70
|
-
column_names_node_from_index(node)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
# @param node [RuboCop::AST::Node]
|
75
|
-
# @return [Integer, nil]
|
76
|
-
def columns_count_from(node)
|
77
|
-
case node.type
|
78
|
-
when :array
|
79
|
-
node.values.count
|
80
|
-
when :sym
|
81
|
-
1
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
# @return [Integer]
|
86
|
-
def max_columns_count
|
87
|
-
cop_config['MaxColumnsCount']
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Sevencop
|
4
|
-
module CopConcerns
|
5
|
-
module BatchProcessing
|
6
|
-
BATCH_PROCESSING_METHOD_NAMES = ::Set.new(
|
7
|
-
%i[
|
8
|
-
delete_all
|
9
|
-
update_all
|
10
|
-
]
|
11
|
-
).freeze
|
12
|
-
|
13
|
-
class << self
|
14
|
-
def included(klass)
|
15
|
-
super
|
16
|
-
klass.class_eval do
|
17
|
-
# @!method batch_processing?(node)
|
18
|
-
# @param node [RuboCop::AST::SendNode]
|
19
|
-
# @return [Boolean]
|
20
|
-
def_node_matcher :batch_processing?, <<~PATTERN
|
21
|
-
(send
|
22
|
-
!nil?
|
23
|
-
BATCH_PROCESSING_METHOD_NAMES
|
24
|
-
...
|
25
|
-
)
|
26
|
-
PATTERN
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Sevencop
|
4
|
-
module CopConcerns
|
5
|
-
module ColumnTypeMethod
|
6
|
-
COLUMN_TYPE_METHOD_NAMES = ::Set.new(
|
7
|
-
%i[
|
8
|
-
bigint
|
9
|
-
binary
|
10
|
-
blob
|
11
|
-
boolean
|
12
|
-
date
|
13
|
-
datetime
|
14
|
-
decimal
|
15
|
-
float
|
16
|
-
integer
|
17
|
-
numeric
|
18
|
-
primary_key
|
19
|
-
string
|
20
|
-
text
|
21
|
-
time
|
22
|
-
]
|
23
|
-
).freeze
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Sevencop
|
4
|
-
module CopConcerns
|
5
|
-
module DisableDdlTransaction
|
6
|
-
class << self
|
7
|
-
def included(klass)
|
8
|
-
super
|
9
|
-
klass.class_eval do
|
10
|
-
# @!method disable_ddl_transaction?(node)
|
11
|
-
# @param node [RuboCop::AST::SendNode]
|
12
|
-
# @return [Boolean]
|
13
|
-
def_node_matcher :disable_ddl_transaction?, <<~PATTERN
|
14
|
-
(send
|
15
|
-
nil?
|
16
|
-
:disable_ddl_transaction!
|
17
|
-
...
|
18
|
-
)
|
19
|
-
PATTERN
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
# @param corrector [RuboCop::Cop::Corrector]
|
27
|
-
# @param node [RuboCop::AST::SendNode]
|
28
|
-
# @return [void]
|
29
|
-
def insert_disable_ddl_transaction(
|
30
|
-
corrector,
|
31
|
-
node
|
32
|
-
)
|
33
|
-
corrector.insert_before(
|
34
|
-
node.each_ancestor(:def).first,
|
35
|
-
"disable_ddl_transaction!\n\n "
|
36
|
-
)
|
37
|
-
end
|
38
|
-
|
39
|
-
# @param node [RuboCop::AST::SendNode]
|
40
|
-
# @return [Boolean]
|
41
|
-
def within_disable_ddl_transaction?(node)
|
42
|
-
node.each_ancestor(:def).first&.left_siblings&.any? do |sibling|
|
43
|
-
sibling.is_a?(::RuboCop::AST::SendNode) &&
|
44
|
-
disable_ddl_transaction?(sibling)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|