Module: RuboCop::Cop::RSpec::CapybaraHelp

Defined in:
lib/rubocop/cop/rspec/mixin/capybara_help.rb

Overview

Help methods for capybara.

Class Method Summary collapse

Class Method Details

.include_option?(node, option) ⇒ Boolean

Parameters:

  • node (RuboCop::AST::SendNode)
  • option (Symbol)

Returns:

  • (Boolean)


74
75
76
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 74

def include_option?(node, option)
  node.each_descendant(:sym).find { |opt| opt.value == option }
end

.replaceable_element?(node, element, attrs) ⇒ Boolean

Parameters:

  • node (RuboCop::AST::SendNode)
  • element (String)
  • attrs (Array<String>)

Returns:

  • (Boolean)


57
58
59
60
61
62
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 57

def replaceable_element?(node, element, attrs)
  case element
  when 'link' then replaceable_to_link?(node, attrs)
  else true
  end
end

.replaceable_pseudo_class?(pseudo_class, locator) ⇒ Boolean

Parameters:

  • pseudo_class (String)
  • locator (String)

Returns:

  • (Boolean)


34
35
36
37
38
39
40
41
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 34

def replaceable_pseudo_class?(pseudo_class, locator)
  return false unless CssSelector.specific_pesudo_classes?(pseudo_class)

  case pseudo_class
  when 'not()' then replaceable_pseudo_class_not?(locator)
  else true
  end
end

.replaceable_pseudo_class_not?(locator) ⇒ Boolean

Parameters:

  • locator (String)

Returns:

  • (Boolean)


45
46
47
48
49
50
51
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 45

def replaceable_pseudo_class_not?(locator)
  locator.scan(/not\(.*?\)/).all? do |negation|
    CssSelector.attributes(negation).values.all? do |v|
      v.is_a?(TrueClass) || v.is_a?(FalseClass)
    end
  end
end

.replaceable_to_link?(node, attrs) ⇒ Boolean

Parameters:

  • node (RuboCop::AST::SendNode)
  • attrs (Array<String>)

Returns:

  • (Boolean)


67
68
69
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 67

def replaceable_to_link?(node, attrs)
  include_option?(node, :href) || attrs.include?('href')
end

.specific_option?(node, locator, element) ⇒ Boolean

Parameters:

  • node (RuboCop::AST::SendNode)
  • locator (String)
  • element (String)

Returns:

  • (Boolean)


14
15
16
17
18
19
20
21
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 14

def specific_option?(node, locator, element)
  attrs = CssSelector.attributes(locator).keys
  return false unless replaceable_element?(node, element, attrs)

  attrs.all? do |attr|
    CssSelector.specific_options?(element, attr)
  end
end

.specific_pseudo_classes?(locator) ⇒ Boolean

Parameters:

  • locator (String)

Returns:

  • (Boolean)


25
26
27
28
29
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 25

def specific_pseudo_classes?(locator)
  CssSelector.pseudo_classes(locator).all? do |pseudo_class|
    replaceable_pseudo_class?(pseudo_class, locator)
  end
end