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