diff options
Diffstat (limited to 'rubocop')
-rw-r--r-- | rubocop/cop/migration/with_lock_retries_with_change.rb | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/rubocop/cop/migration/with_lock_retries_with_change.rb b/rubocop/cop/migration/with_lock_retries_with_change.rb new file mode 100644 index 00000000000..36fc1f92833 --- /dev/null +++ b/rubocop/cop/migration/with_lock_retries_with_change.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +require_relative '../../migration_helpers' + +module RuboCop + module Cop + module Migration + # Cop that prevents usage of `with_lock_retries` within the `change` method. + class WithLockRetriesWithChange < RuboCop::Cop::Cop + include MigrationHelpers + + MSG = '`with_lock_retries` cannot be used within `change` so you must manually define ' \ + 'the `up` and `down` methods in your migration class and use `with_lock_retries` in both methods'.freeze + + def on_send(node) + return unless in_migration?(node) + return unless node.children[1] == :with_lock_retries + + node.each_ancestor(:def) do |def_node| + add_offense(def_node, location: :name) if method_name(def_node) == :change + end + end + + def method_name(node) + node.children.first + end + end + end + end +end |