class RuboCop::Cop::Rails::ActionFilter

skip_after_filter :do_stuff
append_around_filter :do_stuff
after_filter :do_stuff
# good
skip_after_action :do_stuff
append_around_action :do_stuff
after_action :do_stuff
# bad
@example EnforcedStyle: filter
skip_after_action :do_stuff
append_around_action :do_stuff
after_action :do_stuff
# good
skip_after_filter :do_stuff
append_around_filter :do_stuff
after_filter :do_stuff
# bad
@example EnforcedStyle: action (default)
the use of filter methods.
If the TargetRailsVersion is set to less than 4.0, the cop will enforce
something_filter methods or the newer something_action methods.
The cop is configurable and can enforce the use of the older
This cop enforces the consistent use of action filter methods.

def autocorrect(node)

def autocorrect(node)
  lambda do |corrector|
    corrector.replace(node.loc.selector,
                      preferred_method(node.loc.selector.source).to_s)
  end
end

def bad_methods

def bad_methods
  style == :action ? FILTER_METHODS : ACTION_METHODS
end

def check_method_node(node)

def check_method_node(node)
  return unless bad_methods.include?(node.method_name)
  add_offense(node, location: :selector)
end

def good_methods

def good_methods
  style == :action ? ACTION_METHODS : FILTER_METHODS
end

def message(node)

def message(node)
  format(MSG, prefer: preferred_method(node.method_name),
              current: node.method_name)
end

def on_block(node)

def on_block(node)
  check_method_node(node.send_node)
end

def on_send(node)

def on_send(node)
  check_method_node(node) unless node.receiver
end

def preferred_method(method)

def preferred_method(method)
  good_methods[bad_methods.index(method.to_sym)]
end