lib/aixm/concerns/xml_builder.rb

Summary

Maintainability
A
0 mins
Test Coverage
module AIXM
  module Concerns

    # Adds the XML builder wrapped to generate a document fragment.
    module XMLBuilder
      include AIXM::Concerns::Memoize

      # Build a XML document fragment.
      #
      # @yield [Nokogiri::XML::Builder]
      # @return [Nokogiri::XML::DocumentFragment]
      def build_fragment
        Nokogiri::XML::DocumentFragment.parse('').tap do |fragment|
          Nokogiri::XML::Builder.with(fragment) do |builder|
            yield builder
          end
          fragment.elements.each { _1.add_next_sibling("\n") }   # add newline between tags on top level
        end
      end

      # @return [Nokogiri::XML::DocumentFragment] UID fragment
      def to_uid(...)
        build_fragment { add_uid_to(_1, ...) }
      end
      memoize :to_uid

      # @return [String] AIXM or OFMX fragment
      def to_xml(...)
        build_fragment { add_to(_1, ...) }.to_xml.strip.concat("\n")
      end

    end
  end
end