Sha256: 9a2f6c1ef1d525782980bff0cf0119333166e762453cd8a6de6d992b0ecd1a20

Contents?: true

Size: 1.86 KB

Versions: 44

Compression:

Stored size: 1.86 KB

Contents

# frozen_string_literal: true

module Cocina
  module Models
    module Mapping
      module ToMods
        # Maps identifiers from cocina to MODS XML
        class Identifier
          # @params [Nokogiri::XML::Builder] xml
          # @params [Array<Cocina::Models::DescriptiveValue>] identifiers
          # @params [IdGenerator] id_generator
          def self.write(xml:, identifiers:, id_generator:)
            new(xml: xml, identifiers: identifiers, id_generator: id_generator).write
          end

          def initialize(xml:, identifiers:, id_generator:)
            @xml = xml
            @identifiers = identifiers
            @id_generator = id_generator
          end

          def write
            Array(identifiers).each do |identifier|
              if identifier.parallelValue.present?
                write_parallel(identifier)
              else
                write_identifier(identifier)
              end
            end
          end

          private

          attr_reader :xml, :identifiers, :id_generator

          def write_parallel(parallel_identifier)
            altrepgroup_id = id_generator.next_altrepgroup
            parallel_identifier.parallelValue.each do |identifier|
              write_identifier(identifier, altrepgroup_id: altrepgroup_id)
            end
          end

          def write_identifier(identifier, altrepgroup_id: nil)
            id_attributes = {
              displayLabel: identifier.displayLabel,
              type: identifier.uri ? 'uri' : Cocina::Models::Mapping::FromMods::IdentifierType.mods_type_for_cocina_type(identifier.type),
              altRepGroup: altrepgroup_id
            }.tap do |attrs|
              attrs[:invalid] = 'yes' if identifier.status == 'invalid'
            end.compact
            xml.identifier identifier.value || identifier.uri, id_attributes
          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/to_mods/identifier.rb
cocina-models-0.99.4 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.99.3 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.99.2 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.99.1 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.99.0 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.98.1 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.98.0 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.96.0 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.95.1 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.95.0 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.94.2 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.94.1 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.94.0 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.93.1 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.93.0 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.92.0 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.91.4 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.91.3 lib/cocina/models/mapping/to_mods/identifier.rb
cocina-models-0.91.2 lib/cocina/models/mapping/to_mods/identifier.rb