Class: RuboCop::Cop::Rails::LexicallyScopedActionFilter
- Inherits:
-
Base
- Object
- Base
- RuboCop::Cop::Rails::LexicallyScopedActionFilter
- Defined in:
- lib/rubocop/cop/rails/lexically_scoped_action_filter.rb
Overview
Checks that methods specified in the filter’s ‘only` or `except` options are defined within the same class or module.
Constant Summary collapse
- MSG =
'%<action>s not explicitly defined on the %<type>s.'
- RESTRICT_ON_SEND =
%i[ after_action append_after_action append_around_action append_before_action around_action before_action prepend_after_action prepend_around_action prepend_before_action skip_after_action skip_around_action skip_before_action skip_action_callback ].freeze
- FILTERS =
RESTRICT_ON_SEND.map { |method_name| ":#{method_name}" }
Instance Method Summary collapse
Instance Method Details
#on_send(node) ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/rubocop/cop/rails/lexically_scoped_action_filter.rb', line 118 def on_send(node) methods_node = only_or_except_filter_methods(node) return unless methods_node parent = node.each_ancestor(:class, :module).first return unless parent # NOTE: a `:begin` node may not exist if the class/module consists of a single statement block = parent.each_child_node(:begin).first defined_action_methods = defined_action_methods(block) unmatched_methods = array_values(methods_node) - defined_action_methods return if unmatched_methods.empty? = (unmatched_methods, parent) add_offense(node, message: ) end |