Sha256: 7660934410772425da3afa99644f64d95d940824605fdd117522d52b9a4620a1

Contents?: true

Size: 1.6 KB

Versions: 44

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

module Cocina
  module Models
    module Mapping
      module FromMods
        # Support for mapping PURLs.
        class Purl
          def self.primary_purl_node(resource_element, purl)
            purl_nodes = resource_element.xpath('mods:location/mods:url',
                                                mods: Description::DESC_METADATA_NS).select do |url_node|
              Cocina::Models::Mapping::Purl.purl?(url_node.text)
            end

            return purl_nodes.find { |purl_node| purl_value(purl_node) == purl } if purl

            # Prefer a primary PURL node
            primary_purl_node = purl_nodes.find { |purl_node| purl_node[:usage] == 'primary display' }

            primary_purl_node || purl_nodes.first
          end

          def self.purl_note(purl_node)
            notes = []
            if purl_node[:note]
              notes << {
                value: purl_node['note'],
                appliesTo: [{ value: 'purl' }]
              }
            end
            if purl_node['displayLabel']
              notes << {
                value: purl_node['displayLabel'],
                type: 'display label',
                appliesTo: [{ value: 'purl' }]
              }
            end
            notes
          end

          def self.primary_purl_value(resource_element, purl)
            purl_value(primary_purl_node(resource_element, purl))
          end

          def self.purl_value(purl_node)
            # Note that normalizing http to https
            purl_node&.content&.sub(/^https?/, 'https')&.presence
          end
        end
      end
    end
  end
end

Version data entries

44 entries across 44 versions & 1 rubygems

Version Path
cocina-models-0.100.0 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.99.4 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.99.3 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.99.2 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.99.1 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.99.0 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.98.1 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.98.0 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.96.0 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.95.1 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.95.0 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.94.2 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.94.1 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.94.0 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.93.1 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.93.0 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.92.0 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.91.4 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.91.3 lib/cocina/models/mapping/from_mods/purl.rb
cocina-models-0.91.2 lib/cocina/models/mapping/from_mods/purl.rb