Class: REXML::CSSSelector::Adapters::REXMLAdapter

Inherits:
BaseAdapter
  • Object
show all
Defined in:
lib/rexml/css_selector/adapters/rexml_adapter.rb

Overview

REXMLAdapter is an adapter implementation for REXML.

Constant Summary collapse

INSTANCE =

INSTANCE is the default instance.

new

Instance Method Summary collapse

Methods inherited from BaseAdapter

#checked?, #disabled?, #get_children_elements, #get_class_names, #get_element_index, #get_id, #root?

Instance Method Details

#each_child_element(element) ⇒ Object



64
65
66
# File 'lib/rexml/css_selector/adapters/rexml_adapter.rb', line 64

def each_child_element(element, &)
  element.each_child { yield _1 if element?(_1) }
end

#each_recursive_element(element) ⇒ Object



68
69
70
# File 'lib/rexml/css_selector/adapters/rexml_adapter.rb', line 68

def each_recursive_element(element, &)
  element.each_recursive(&)
end

#element?(node) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
# File 'lib/rexml/css_selector/adapters/rexml_adapter.rb', line 8

def element?(node)
  node.instance_of?(::REXML::Element)
end

#empty?(node) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/rexml/css_selector/adapters/rexml_adapter.rb', line 12

def empty?(node)
  node.children.all? do |child|
    case child
    when ::REXML::Element
      false
    when ::REXML::Text
      child.to_s.match?(/\A\s*\z/)
    else
      true
    end
  end
end

#get_attribute(element, name, namespace = nil, attribute_name_case = :sensitive) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/rexml/css_selector/adapters/rexml_adapter.rb', line 33

def get_attribute(element, name, namespace = nil, attribute_name_case = :sensitive)
  namespace = element.namespace(namespace) if namespace

  case attribute_name_case
  in :sensitive
    element.attribute(name, namespace)&.value
  in :insensitive
    name = name.downcase(:ascii)
    target_attr = nil
    element.attributes.each_attribute do |attr|
      if attr.name.downcase(:ascii) == name && (!namespace || attr.namespace == namespace)
        target_attr = attr
        break
      end
    end
    target_attr&.value
  end
end

#get_document_node(node) ⇒ Object



52
53
54
# File 'lib/rexml/css_selector/adapters/rexml_adapter.rb', line 52

def get_document_node(node)
  node.root_node
end

#get_namespace(element) ⇒ Object



29
30
31
# File 'lib/rexml/css_selector/adapters/rexml_adapter.rb', line 29

def get_namespace(element)
  element.prefix
end

#get_parent_node(element) ⇒ Object



56
57
58
# File 'lib/rexml/css_selector/adapters/rexml_adapter.rb', line 56

def get_parent_node(element)
  element.parent
end

#get_previous_sibling_element(element) ⇒ Object



60
61
62
# File 'lib/rexml/css_selector/adapters/rexml_adapter.rb', line 60

def get_previous_sibling_element(element)
  element.previous_element
end

#get_tag_name(element) ⇒ Object



25
26
27
# File 'lib/rexml/css_selector/adapters/rexml_adapter.rb', line 25

def get_tag_name(element)
  element.name
end