Class: Dor::Services::Client::SDR

Inherits:
VersionedService show all
Defined in:
lib/dor/services/client/sdr.rb

Overview

API calls that are about preserved objects

Instance Method Summary collapse

Constructor Details

#initialize(connection:, version:, object_identifier:) ⇒ SDR

Returns a new instance of SDR.

Parameters:

  • object_identifier (String)

    the pid for the object



12
13
14
15
# File 'lib/dor/services/client/sdr.rb', line 12

def initialize(connection:, version:, object_identifier:)
  super(connection: connection, version: version)
  @object_identifier = object_identifier
end

Instance Method Details

#content_diff(current_content:, subset: 'all', version: nil) ⇒ Moab::FileInventoryDifference

Retrieves file difference manifest for contentMetadata from SDR

Parameters:

  • current_content (String)

    The contentMetadata xml

  • subset (String) (defaults to: 'all')

    (‘all’) The keyword for file attributes ‘shelve’, ‘preserve’, ‘publish’.

  • version (Integer, NilClass) (defaults to: nil)

    (nil)

Returns:

  • (Moab::FileInventoryDifference)

    the differences for the given content and subset (i.e.: cm_inv_diff manifest)

Raises:

  • (ArgumentError)


48
49
50
51
52
53
54
# File 'lib/dor/services/client/sdr.rb', line 48

def content_diff(current_content:, subset: 'all', version: nil)
  raise ArgumentError, "Invalid subset value: #{subset}" unless %w[all shelve preserve publish].include?(subset)

  resp = content_diff_response(current_content: current_content, subset: subset, version: version)

  Moab::FileInventoryDifference.parse(resp)
end

#current_versionInteger

Gets the current version number for the object

Returns:

  • (Integer)

    the current version

Raises:



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/dor/services/client/sdr.rb', line 21

def current_version
  xml = current_version_response
  begin
    doc = Nokogiri::XML xml
    raise if doc.root.name != 'currentVersion'

    return Integer(doc.text)
  rescue StandardError
    raise MalformedResponse, "Unable to parse XML from current_version API call: #{xml}"
  end
end

#metadata(datastream:) ⇒ String

Returns The datastream contents from the previous version of the digital object (fetched from SDR storage).

Parameters:

  • datastream (String)

    The identifier of the metadata datastream

Returns:

  • (String)

    The datastream contents from the previous version of the digital object (fetched from SDR storage)

Raises:



58
59
60
61
62
63
64
65
66
# File 'lib/dor/services/client/sdr.rb', line 58

def (datastream:)
  resp = connection.get do |req|
    req.url "#{base_path}/metadata/#{datastream}.xml"
  end
  return resp.body if resp.success?
  return if resp.status == 404

  raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body}) for #{object_identifier}"
end

#signature_catalogObject

Raises:



33
34
35
36
37
38
39
40
# File 'lib/dor/services/client/sdr.rb', line 33

def signature_catalog
  resp = signature_catalog_response

  return Moab::SignatureCatalog.new(digital_object_id: object_identifier, version_id: 0) if resp.status == 404
  raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body}) for #{object_identifier}" unless resp.success?

  Moab::SignatureCatalog.parse resp.body
end