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

- old
+ new

@@ -2,84 +2,28 @@ module RuboCop module Cop module RSpec module Capybara - # Checks for there is a more specific actions offered by Capybara. - # - # @example - # - # # bad - # find('a').click - # find('button.cls').click - # find('a', exact_text: 'foo').click - # find('div button').click - # - # # good - # click_link - # click_button(class: 'cls') - # click_link(exact_text: 'foo') - # find('div').click_button - # - class SpecificActions < ::RuboCop::Cop::Base - MSG = "Prefer `%<good_action>s` over `find('%<selector>s').click`." - RESTRICT_ON_SEND = %i[click].freeze - SPECIFIC_ACTION = { - 'button' => 'button', - 'a' => 'link' - }.freeze - - # @!method click_on_selector(node) - def_node_matcher :click_on_selector, <<-PATTERN - (send _ :find (str $_) ...) - PATTERN - - def on_send(node) - click_on_selector(node.receiver) do |arg| - next unless supported_selector?(arg) - # Always check the last selector in the case of multiple selectors - # separated by whitespace. - # because the `.click` is executed on the element to - # which the last selector points. - next unless (selector = last_selector(arg)) - next unless (action = specific_action(selector)) - next unless CapybaraHelp.specific_option?(node.receiver, arg, - action) - next unless CapybaraHelp.specific_pseudo_classes?(arg) - - range = offense_range(node, node.receiver) - add_offense(range, message: message(action, selector)) - end - end - - private - - def specific_action(selector) - SPECIFIC_ACTION[last_selector(selector)] - end - - def supported_selector?(selector) - !selector.match?(/[>,+~]/) - end - - def last_selector(arg) - arg.split.last[/^\w+/, 0] - end - - def offense_range(node, receiver) - receiver.loc.selector.with(end_pos: node.loc.expression.end_pos) - end - - def message(action, selector) - format(MSG, - good_action: good_action(action), - selector: selector) - end - - def good_action(action) - "click_#{action}" - end - end + # @!parse + # # Checks for there is a more specific actions offered by Capybara. + # # + # # @example + # # + # # # bad + # # find('a').click + # # find('button.cls').click + # # find('a', exact_text: 'foo').click + # # find('div button').click + # # + # # # good + # # click_link + # # click_button(class: 'cls') + # # click_link(exact_text: 'foo') + # # find('div').click_button + # # + # class SpecificActions < ::RuboCop::Cop::Base; end + SpecificActions = ::RuboCop::Cop::Capybara::SpecificActions end end end end