summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rubocop/cop/migration/update_large_table.rb9
-rw-r--r--spec/rubocop/cop/migration/update_large_table_spec.rb20
2 files changed, 28 insertions, 1 deletions
diff --git a/rubocop/cop/migration/update_large_table.rb b/rubocop/cop/migration/update_large_table.rb
index bb14d0f4f56..e3e3de0a4d7 100644
--- a/rubocop/cop/migration/update_large_table.rb
+++ b/rubocop/cop/migration/update_large_table.rb
@@ -34,8 +34,15 @@ module RuboCop
users
].freeze
+ BATCH_UPDATE_METHODS = %w[
+ :add_column_with_default
+ :change_column_type_concurrently
+ :rename_column_concurrently
+ :update_column_in_batches
+ ].join(' ').freeze
+
def_node_matcher :batch_update?, <<~PATTERN
- (send nil? ${:add_column_with_default :update_column_in_batches} $(sym ...) ...)
+ (send nil? ${#{BATCH_UPDATE_METHODS}} $(sym ...) ...)
PATTERN
def on_send(node)
diff --git a/spec/rubocop/cop/migration/update_large_table_spec.rb b/spec/rubocop/cop/migration/update_large_table_spec.rb
index ef724fc8bad..5e08eb4f772 100644
--- a/spec/rubocop/cop/migration/update_large_table_spec.rb
+++ b/spec/rubocop/cop/migration/update_large_table_spec.rb
@@ -32,6 +32,14 @@ describe RuboCop::Cop::Migration::UpdateLargeTable do
include_examples 'large tables', 'add_column_with_default'
end
+ context 'for the change_column_type_concurrently method' do
+ include_examples 'large tables', 'change_column_type_concurrently'
+ end
+
+ context 'for the rename_column_concurrently method' do
+ include_examples 'large tables', 'rename_column_concurrently'
+ end
+
context 'for the update_column_in_batches method' do
include_examples 'large tables', 'update_column_in_batches'
end
@@ -60,6 +68,18 @@ describe RuboCop::Cop::Migration::UpdateLargeTable do
expect(cop.offenses).to be_empty
end
+ it 'registers no offense for change_column_type_concurrently' do
+ inspect_source("change_column_type_concurrently :#{table}, :column, default: true")
+
+ expect(cop.offenses).to be_empty
+ end
+
+ it 'registers no offense for update_column_in_batches' do
+ inspect_source("rename_column_concurrently :#{table}, :column, default: true")
+
+ expect(cop.offenses).to be_empty
+ end
+
it 'registers no offense for update_column_in_batches' do
inspect_source("add_column_with_default :#{table}, :column, default: true")