lib/rubocop/cop/rspec/capybara/specific_finders.rb in rubocop-rspec-2.17.1 vs lib/rubocop/cop/rspec/capybara/specific_finders.rb in rubocop-rspec-2.18.0

- old
+ new

@@ -2,92 +2,23 @@ module RuboCop module Cop module RSpec module Capybara - # Checks if there is a more specific finder offered by Capybara. - # - # @example - # # bad - # find('#some-id') - # find('[visible][id=some-id]') - # - # # good - # find_by_id('some-id') - # find_by_id('some-id', visible: true) - # - class SpecificFinders < ::RuboCop::Cop::Base - extend AutoCorrector - - include RangeHelp - - MSG = 'Prefer `find_by` over `find`.' - RESTRICT_ON_SEND = %i[find].freeze - - # @!method find_argument(node) - def_node_matcher :find_argument, <<~PATTERN - (send _ :find (str $_) ...) - PATTERN - - def on_send(node) - find_argument(node) do |arg| - next if CssSelector.multiple_selectors?(arg) - - on_attr(node, arg) if attribute?(arg) - on_id(node, arg) if CssSelector.id?(arg) - end - end - - private - - def on_attr(node, arg) - return unless (id = CssSelector.attributes(arg)['id']) - - register_offense(node, replaced_arguments(arg, id)) - end - - def on_id(node, arg) - register_offense(node, "'#{arg.to_s.delete('#')}'") - end - - def attribute?(arg) - CssSelector.attribute?(arg) && - CssSelector.common_attributes?(arg) - end - - def register_offense(node, arg_replacement) - add_offense(offense_range(node)) do |corrector| - corrector.replace(node.loc.selector, 'find_by_id') - corrector.replace(node.first_argument.loc.expression, - arg_replacement) - end - end - - def replaced_arguments(arg, id) - options = to_options(CssSelector.attributes(arg)) - options.empty? ? id : "#{id}, #{options}" - end - - def to_options(attrs) - attrs.each.map do |key, value| - next if key == 'id' - - "#{key}: #{value}" - end.compact.join(', ') - end - - def offense_range(node) - range_between(node.loc.selector.begin_pos, end_pos(node)) - end - - def end_pos(node) - if node.loc.end - node.loc.end.end_pos - else - node.loc.expression.end_pos - end - end - end + # @!parse + # # Checks if there is a more specific finder offered by Capybara. + # # + # # @example + # # # bad + # # find('#some-id') + # # find('[visible][id=some-id]') + # # + # # # good + # # find_by_id('some-id') + # # find_by_id('some-id', visible: true) + # # + # class SpecificFinders < ::RuboCop::Cop::Base; end + SpecificFinders = ::RuboCop::Cop::Capybara::SpecificFinders end end end end