Class: Lutaml::Xml::AdapterElement
- Inherits:
-
XmlElement
- Object
- XmlElement
- Lutaml::Xml::AdapterElement
- Defined in:
- lib/lutaml/xml/adapter_element.rb
Overview
Base element wrapper for moxml-backed XML adapters. NokogiriElement, Ox::Element, Oga::Element, Rexml::Element all inherit from this class.
Direct Known Subclasses
Constant Summary collapse
- NamespaceData =
Lutaml::Xml::Adapter::NamespaceData
Constants inherited from XmlElement
XmlElement::CDATA_NODE_NAME, XmlElement::EMPTY_CHILDREN_ARRAY, XmlElement::EMPTY_NAMESPACES, XmlElement::NODE_TYPES, XmlElement::TEXT_NODE_NAME, XmlElement::XMLNS_PREFIX, XmlElement::XML_NAMESPACE_URI
Instance Attribute Summary
Attributes inherited from XmlElement
#adapter_node, #attributes, #children, #namespace_prefix, #namespace_prefix_explicit, #node_type, #order_cache, #parent_document, #processing_instructions
Instance Method Summary collapse
- #build_xml(builder = nil) ⇒ Object
-
#initialize(node, parent: nil, default_namespace: nil) ⇒ AdapterElement
constructor
A new instance of AdapterElement.
- #inner_xml ⇒ Object
- #text ⇒ Object
- #text? ⇒ Boolean
- #to_xml(_builder = nil) ⇒ Object
Methods inherited from XmlElement
#[], #add_namespace, #attribute_is_namespace?, #cdata, #cdata?, #cdata_children, #comment?, #default_namespace, detect_explicit_no_namespace, #document, #element?, #element_children, #element_children_index, #ensure_attribute_index, #ensure_children_index, #find_attribute_value, #find_child_by_name, #find_children_by_name, fpi?, fpi_to_urn, #name, #namespace, #namespace_scope_config, #namespace_uri, #namespaced_name, #namespaces, #nil_element?, #order, #original_namespace_uri, #original_xml_element, #own_namespaces, #pretty_print_instance_variables, #processing_instruction?, #root, #text_children, #to_h, #unprefixed_name, #xml_declaration, #xml_namespace_prefix
Constructor Details
#initialize(node, parent: nil, default_namespace: nil) ⇒ AdapterElement
Returns a new instance of AdapterElement.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/lutaml/xml/adapter_element.rb', line 11 def initialize(node, parent: nil, default_namespace: nil) @moxml_node = node node_type = case node when Moxml::Cdata then :cdata when Moxml::Text then :text when Moxml::Comment then :comment else :element end text = case node when Moxml::Element namespace_name = node.namespace&.prefix ns_defs = node.namespaces has_empty_xmlns = ns_defs.any? do |ns| ns.prefix.nil? && ns.uri == "" end explicit_no_namespace = XmlElement.detect_explicit_no_namespace( has_empty_xmlns: has_empty_xmlns, node_namespace_nil: node.namespace.nil? || node.namespace&.uri == "", ) add_namespaces_from_defs(ns_defs, is_root: parent.nil?) if parent.nil? && !namespace_name && node.namespace&.uri && node.namespace.uri != "" default_namespace = node.namespace.uri end children = parse_children(node, default_namespace: default_namespace) attributes = node_attributes(node) @root = node EncodingNormalizer.normalize_to_utf8(node.inner_text) when Moxml::Text EncodingNormalizer.normalize_to_utf8(node.content) when Moxml::Cdata EncodingNormalizer.normalize_to_utf8(node.content) when Moxml::Comment EncodingNormalizer.normalize_to_utf8(node.content) end name = adapter_class.name_of(node) super( node, Hash(attributes), Array(children), text, name: name, parent_document: parent, namespace_prefix: namespace_name, default_namespace: default_namespace, explicit_no_namespace: explicit_no_namespace || false, node_type: node_type ) end |
Instance Method Details
#build_xml(builder = nil) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/lutaml/xml/adapter_element.rb', line 82 def build_xml(builder = nil) if cdata? builder.add_text(builder.current_node, @text.to_s, cdata: true) elsif comment? builder.add_comment(builder.current_node, @text.to_s) elsif text? && !element? builder.add_text(builder.current_node, build_text_for_xml.to_s) else build_element_xml(builder) end builder end |
#inner_xml ⇒ Object
96 97 98 |
# File 'lib/lutaml/xml/adapter_element.rb', line 96 def inner_xml children.map(&:to_xml).join end |
#text ⇒ Object
74 75 76 |
# File 'lib/lutaml/xml/adapter_element.rb', line 74 def text super || @text end |
#text? ⇒ Boolean
70 71 72 |
# File 'lib/lutaml/xml/adapter_element.rb', line 70 def text? %i[text cdata].include?(@node_type) end |
#to_xml(_builder = nil) ⇒ Object
78 79 80 |
# File 'lib/lutaml/xml/adapter_element.rb', line 78 def to_xml(_builder = nil) @moxml_node.to_xml(declaration: false, expand_empty: false) end |