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