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

Inherits:
VersionedService show all
Extended by:
Deprecation
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



15
16
17
18
# File 'lib/dor/services/client/sdr.rb', line 15

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)


52
53
54
55
56
57
58
# File 'lib/dor/services/client/sdr.rb', line 52

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:



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/dor/services/client/sdr.rb', line 24

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, NilClass

Returns datastream content from previous version of the object (from SDR storage), or nil if response status is 404.

Parameters:

  • datastream (String)

    The identifier of the metadata datastream

Returns:

  • (String, NilClass)

    datastream content from previous version of the object (from SDR storage), or nil if response status is 404

Raises:



63
64
65
66
67
68
69
70
71
# File 'lib/dor/services/client/sdr.rb', line 63

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, ResponseErrorFormatter.format(response: resp, object_identifier: object_identifier)
end

#signature_catalogObject

Raises:



37
38
39
40
41
42
43
44
# File 'lib/dor/services/client/sdr.rb', line 37

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, ResponseErrorFormatter.format(response: resp, object_identifier: object_identifier) unless resp.success?

  Moab::SignatureCatalog.parse resp.body
end