Sha256: 38a7ae9e68b479c6476a8a5d9a91fe847f15cc280743dd418b4c535b5d94d826

Contents?: true

Size: 1.28 KB

Versions: 33

Compression:

Stored size: 1.28 KB

Contents

# frozen_string_literal: true

module SdrClient
  module Deposit
    # Updates a DRO so that the structural metadata references the uploaded file ids
    class UpdateDroWithFileIdentifiers
      # @param [Cocina::Model::RequestDRO] request_dro for depositing
      # @param [Array<Files::DirectUploadResponse>] upload_responses the responses from uploading files
      # @returns [Cocina::Models::RequestDRO]
      def self.update(request_dro:, upload_responses:)
        # Manipulating request_dro as hash since immutable
        structural = request_dro.to_h[:structural]
        return request_dro.new({}) unless structural

        signed_ids = signed_id_map(upload_responses)
        request_dro.new(structural: updated_structural(structural, signed_ids))
      end

      def self.signed_id_map(upload_responses)
        upload_responses.to_h { |response| [response.filename, response.signed_id] }
      end
      private_class_method :signed_id_map

      def self.updated_structural(structural, signed_ids)
        structural[:contains].each do |file_set|
          file_set[:structural][:contains].each do |file|
            file[:externalIdentifier] = signed_ids[file[:filename]]
          end
        end
        structural
      end
      private_class_method :updated_structural
    end
  end
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
sdr-client-0.93.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.92.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.91.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.90.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.89.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.88.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.87.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.86.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.85.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.84.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.83.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.82.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.81.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.80.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.79.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.78.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.77.1 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.77.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.76.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
sdr-client-0.75.0 lib/sdr_client/deposit/update_dro_with_file_identifiers.rb