class Nokogiri::XML::Node

Monkey patches for Nokogiri::XML::Node @see www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Node Nokogiri::XML::Node

Public Class Methods

selector_to_css_nodes(selector) click to toggle source
# File lib/kitchen/patches/nokogiri.rb, line 77
def self.selector_to_css_nodes(selector)
  # No need to parse the same selector more than once.
  @parsed_selectors ||= {}
  @parsed_selectors[selector] ||= Nokogiri::CSS::Parser.new.parse(selector)
end

Public Instance Methods

classes() click to toggle source
# File lib/kitchen/patches/nokogiri.rb, line 66
def classes
  self[:class]&.split || []
end
inspect() click to toggle source

Calls to_s on the node

@return [String]

# File lib/kitchen/patches/nokogiri.rb, line 58
def inspect
  to_s
end
previous() click to toggle source
# File lib/kitchen/patches/nokogiri.rb, line 70
def previous
  prev = previous_element
  return nil if prev.nil?

  prev.text? ? prev.previous : prev
end
quick_matches?(selector) click to toggle source
# File lib/kitchen/patches/nokogiri.rb, line 62
def quick_matches?(selector)
  self.class.selector_to_css_nodes(selector).any? { |css_node| matches_css_node?(css_node) }
end

Protected Instance Methods

matches_css_node?(css_node) click to toggle source

rubocop:disable Metrics/CyclomaticComplexity

# File lib/kitchen/patches/nokogiri.rb, line 86
def matches_css_node?(css_node)
  case css_node.type
  when :CONDITIONAL_SELECTOR
    css_node.value.all? { |inner_css_node| matches_css_node?(inner_css_node) }
  when :ELEMENT_NAME
    css_node.value == ['*'] || css_node.value.include?(name)
  when :CLASS_CONDITION
    (css_node.value & classes).any?
  when :ATTRIBUTE_CONDITION
    attribute, operator, value = css_node.value

    raise "Unknown attribute condition operator in #{css_node}" if operator != :equal

    attribute_name = attribute.value
    raise "More attribute names than expected, #{attribute_name}" if attribute_name.many?

    self[attribute_name.first] == value.gsub('"', '').gsub("'", '')
  else
    raise "Unknown Nokogiri::CSS:Node type in #{css_node}"
  end
end