Class: Nokogiri::XML::Node

Inherits:
Object show all
Defined in:
lib/kitchen/patches/nokogiri.rb

Overview

Monkey patches for Nokogiri::XML::Node

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.selector_to_css_nodes(selector) ⇒ Object



94
95
96
97
98
# File 'lib/kitchen/patches/nokogiri.rb', line 94

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

Instance Method Details

#classesObject



66
67
68
# File 'lib/kitchen/patches/nokogiri.rb', line 66

def classes
  self[:class]&.split || []
end

#has_namespace_defined_on_ancestor?(attribute: nil) ⇒ Boolean

Returns:

  • (Boolean)


78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/kitchen/patches/nokogiri.rb', line 78

def has_namespace_defined_on_ancestor?(attribute: nil)
  element = attribute || self

  ancestors.each do |a|
    next if a.document?

    namespace = a.namespace_definitions.find do |ns|
      ns.prefix == element.namespace.prefix && ns.href == element.namespace.href
    end

    return true if namespace
  end

  false
end

#inspectString

Calls to_s on the node

Returns:



58
59
60
# File 'lib/kitchen/patches/nokogiri.rb', line 58

def inspect
  to_s
end

#preceded_by_text?Boolean

Returns:

  • (Boolean)


70
71
72
73
74
75
76
# File 'lib/kitchen/patches/nokogiri.rb', line 70

def preceded_by_text?
  prev = previous_sibling
  prev = prev.previous_sibling while !prev.nil? && prev.blank?
  return false if prev.nil?

  prev.text?
end

#quick_matches?(selector) ⇒ Boolean

Returns:

  • (Boolean)


62
63
64
# 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