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, #attribute_order, #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 69 |
# 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, attr_order = node_attributes_with_order(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, attribute_order: attr_order ) end |
Instance Method Details
#build_xml(builder = nil) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/lutaml/xml/adapter_element.rb', line 83 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
97 98 99 |
# File 'lib/lutaml/xml/adapter_element.rb', line 97 def inner_xml children.map(&:to_xml).join end |
#text ⇒ Object
75 76 77 |
# File 'lib/lutaml/xml/adapter_element.rb', line 75 def text super || @text end |
#text? ⇒ Boolean
71 72 73 |
# File 'lib/lutaml/xml/adapter_element.rb', line 71 def text? %i[text cdata].include?(@node_type) end |
#to_xml(_builder = nil) ⇒ Object
79 80 81 |
# File 'lib/lutaml/xml/adapter_element.rb', line 79 def to_xml(_builder = nil) @moxml_node.to_xml(declaration: false, expand_empty: false) end |