Sha256: afb97e22783e5ebab3f2576a0fc0a0969f7189138a81e64baee98988b0db6599

Contents?: true

Size: 930 Bytes

Versions: 3

Compression:

Stored size: 930 Bytes

Contents

# frozen_string_literal: true

require 'xml/mapping_extensions'

module Datacite
  module Mapping

    module EmptyNodeUtils
      def not_empty(element)
        return unless element

        text = element.text
        empty = text.nil? || text.strip.empty?
        warn "Ignoring empty element #{element}" if empty
        !empty
      end
    end

    # An {XML::Mapping::ArrayNode} that ignores empty tags, including tags
    # containing only blank text.
    class EmptyFilteringArrayNode < XML::Mapping::ArrayNode
      include EmptyNodeUtils
      def extract_attr_value(xml)
        elements = default_when_xpath_err { @reader_path.all(xml) }
        non_empty_elements = elements.select { |e| not_empty(e) }
        non_empty_elements.map { |e| unmarshal(e) }
      end

      def unmarshal(element)
        @unmarshaller.call(element)
      end
    end
    XML::Mapping.add_node_class EmptyFilteringArrayNode
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
datacite-mapping-0.5.0 lib/datacite/mapping/empty_filtering_nodes.rb
datacite-mapping-0.4.1 lib/datacite/mapping/empty_filtering_nodes.rb
datacite-mapping-0.4.0 lib/datacite/mapping/empty_filtering_nodes.rb