module RuboCop::Cop::RSpec::CapybaraHelp

def include_option?(node, option)

Returns:
  • (Boolean) -

Parameters:
  • option (Symbol) --
  • node (RuboCop::AST::SendNode) --
def include_option?(node, option)
  node.each_descendant(:sym).find { |opt| opt.value == option }
end

def replaceable_element?(node, element, attrs)

Returns:
  • (Boolean) -

Parameters:
  • attrs (Array) --
  • element (String) --
  • node (RuboCop::AST::SendNode) --
def replaceable_element?(node, element, attrs)
  case element
  when 'link' then replaceable_to_link?(node, attrs)
  else true
  end
end

def replaceable_pseudo_class?(pseudo_class, locator)

Returns:
  • (Boolean) -

Parameters:
  • locator (String) --
  • pseudo_class (String) --
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

def replaceable_pseudo_class_not?(locator)

Returns:
  • (Boolean) -

Parameters:
  • locator (String) --
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

def replaceable_to_link?(node, attrs)

Returns:
  • (Boolean) -

Parameters:
  • attrs (Array) --
  • node (RuboCop::AST::SendNode) --
def replaceable_to_link?(node, attrs)
  include_option?(node, :href) || attrs.include?('href')
end

def specific_option?(node, locator, element)

Returns:
  • (Boolean) -

Parameters:
  • element (String) --
  • locator (String) --
  • node (RuboCop::AST::SendNode) --
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

def specific_pseudo_classes?(locator)

Returns:
  • (Boolean) -

Parameters:
  • locator (String) --
def specific_pseudo_classes?(locator)
  CssSelector.pseudo_classes(locator).all? do |pseudo_class|
    replaceable_pseudo_class?(pseudo_class, locator)
  end
end