class RuboCop::Cop::Rails::IgnoredSkipActionFilterOption

end
if: -> { trusted_origin? && action_name != “admin” }
skip_before_action :login_required,
class MyPageController < ApplicationController
# good
end
except: :admin, if: :trusted_origin?
skip_before_action :login_required,
class MyPageController < ApplicationController
# bad
@example
end
if: -> { trusted_origin? && action_name == “show” }
skip_before_action :login_required,
class MyPageController < ApplicationController
# good
end
only: :show, if: :trusted_origin?
skip_before_action :login_required,
class MyPageController < ApplicationController
# bad
@example
are used together.
Similarly, the ‘except` option will be ignored when `if` and `except`
The `if` option will be ignored when `if` and `only` are used together.
as options of `skip_*` action filter.
Checks that `if` and `only` (or `except`) are not used together

def if_and_except?(options)

def if_and_except?(options)
  options.key?(:if) && options.key?(:except)
end

def if_and_only?(options)

def if_and_only?(options)
  options.key?(:if) && options.key?(:only)
end

def on_send(node)

def on_send(node)
  options = filter_options(node)
  return unless options
  return unless options.hash_type?
  options = options_hash(options)
  if if_and_only?(options)
    add_offense(options[:if], message: format(MSG, prefer: :only, ignore: :if)) do |corrector|
      remove_node_with_left_space_and_comma(corrector, options[:if])
    end
  elsif if_and_except?(options)
    add_offense(options[:except], message: format(MSG, prefer: :if, ignore: :except)) do |corrector|
      remove_node_with_left_space_and_comma(corrector, options[:except])
    end
  end
end

def options_hash(options)

def options_hash(options)
  options.pairs
         .select { |pair| pair.key.sym_type? }
         .to_h { |pair| [pair.key.value, pair] }
end

def remove_node_with_left_space_and_comma(corrector, node)

def remove_node_with_left_space_and_comma(corrector, node)
  corrector.remove(
    range_with_surrounding_comma(
      range_with_surrounding_space(
        node.source_range,
        side: :left
      ),
      :left
    )
  )
end