Sha256: 293fb0a69761b31fe918ec6c17547aaaaa02fecab27450871be60cc9c6a6a412

Contents?: true

Size: 1.44 KB

Versions: 20

Compression:

Stored size: 1.44 KB

Contents

module Ddr
  module Models
    #
    # Wraps a Nokogiri (XML) Document
    #
    class Structure < SimpleDelegator

      def initialize(xml_doc=nil)
        super
      end

      def struct_maps
        @struct_maps ||= build_struct_maps(structMap_nodes)
      end

      def default_struct_map
        struct_maps['default'] || struct_maps[struct_maps.keys.first]
      end

      def default_struct_map_ids
        default_struct_map.pids
      end

      def structMap_node(type='default')
        xpath("//xmlns:structMap[@TYPE='#{type}']").first
      end

      def fptr_nodes(type='default')
        structMap_node(type).xpath('//xmlns:fptr')
      end

      def as_xml_document
        __getobj__
      end

      private

      def structMap_nodes
        xpath("//xmlns:structMap")
      end

      def build_struct_maps(structMap_nodes)
        smaps = {}
        structMap_nodes.each do |structMap_node|
          type = structMap_node['TYPE'] || 'default'
          raise StandardError, "Multiple '#{type}' structMaps" if smaps[type].present?
          smaps[type] = Ddr::Models::StructDiv.new(structMap_node)
        end
        smaps
      end

      def self.template
        Nokogiri::XML(
            '<mets xmlns="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink">
              <structMap TYPE="default" />
            </mets>'
            ) do |config|
                config.noblanks
              end
      end

    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
ddr-models-3.0.8 lib/ddr/models/structure.rb
ddr-models-3.0.7 lib/ddr/models/structure.rb
ddr-models-3.0.6 lib/ddr/models/structure.rb
ddr-models-3.0.5 lib/ddr/models/structure.rb
ddr-models-3.0.4 lib/ddr/models/structure.rb
ddr-models-3.0.3 lib/ddr/models/structure.rb
ddr-models-3.0.2 lib/ddr/models/structure.rb
ddr-models-3.0.1 lib/ddr/models/structure.rb
ddr-models-3.0.0 lib/ddr/models/structure.rb
ddr-models-3.0.0.rc6 lib/ddr/models/structure.rb
ddr-models-3.0.0.rc5 lib/ddr/models/structure.rb
ddr-models-3.0.0.rc4 lib/ddr/models/structure.rb
ddr-models-3.0.0.rc3 lib/ddr/models/structure.rb
ddr-models-3.0.0.rc2 lib/ddr/models/structure.rb
ddr-models-3.0.0.rc1 lib/ddr/models/structure.rb
ddr-models-3.0.0.beta.22 lib/ddr/models/structure.rb
ddr-models-3.0.0.beta.21 lib/ddr/models/structure.rb
ddr-models-3.0.0.beta.20 lib/ddr/models/structure.rb
ddr-models-3.0.0.beta.18 lib/ddr/models/structure.rb
ddr-models-3.0.0.beta.17 lib/ddr/models/structure.rb