Class: Dor::Services::Client::ObjectVersion

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

Overview

API calls that are about versions

Defined Under Namespace

Classes: Version, VersionStatus

Constant Summary

Constants inherited from VersionedService

VersionedService::EXCEPTION_CLASS, VersionedService::JSON_API_MIME_TYPE

Instance Method Summary collapse

Methods inherited from VersionedService

#async_result, #with_querystring

Constructor Details

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

Returns a new instance of ObjectVersion.

Parameters:

  • object_identifier (String)

    the pid for the object



45
46
47
48
# File 'lib/dor/services/client/object_version.rb', line 45

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

Instance Method Details

#close(**params) ⇒ String

Close current version for an object

Parameters:

  • description (String)

    (optional) - a description of the object version being opened

  • user_name (String)

    (optional) - sunetid

  • start_accession (Boolean)

    (optional) - whether to start accessioning workflow; defaults to true

  • user_versions (String)

    (optional - values are none, new, or update) - create, update, or do nothing with user versions on close; defaults to none.

Returns:

  • (String)

    a message confirming successful closing

Raises:



123
124
125
126
127
128
129
130
131
# File 'lib/dor/services/client/object_version.rb', line 123

def close(**params)
  resp = connection.post do |req|
    req.url with_querystring(url: close_version_path, params: params)
    req.headers['Content-Type'] = 'application/json'
  end
  return resp.body if resp.success?

  raise_exception_based_on_response!(resp)
end

#currentString

Get the current version for a DOR object. This comes from ObjectVersion table in the DSA

Returns:

  • (String)

    the version identifier

Raises:



65
66
67
68
69
70
71
72
# File 'lib/dor/services/client/object_version.rb', line 65

def current
  resp = connection.get do |req|
    req.url "#{base_path}/current"
  end
  return resp.body if resp.success?

  raise_exception_based_on_response!(resp)
end

#find(version) ⇒ Cocina::Models::DROWithMetadata

Returns the object metadata.

Returns:

  • (Cocina::Models::DROWithMetadata)

    the object metadata

Raises:



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

def find(version)
  resp = connection.get do |req|
    req.url "#{base_path}/#{version}"
  end
  raise_exception_based_on_response!(resp) unless resp.success?

  build_cocina_from_response(resp, validate: false)
end

#inventoryArray

Returns a list of the versions.

Returns:

  • (Array)

    a list of the versions

Raises:



135
136
137
138
139
140
141
142
# File 'lib/dor/services/client/object_version.rb', line 135

def inventory
  resp = connection.get do |req|
    req.url base_path
  end
  raise_exception_based_on_response!(resp, object_identifier) unless resp.success?

  JSON.parse(resp.body).fetch('versions').map { |params| Version.new(**params.symbolize_keys!) }
end

#open(**params) ⇒ Cocina::Models::DROWithMetadata|CollectionWithMetadata|AdminPolicyWithMetadata

Open new version for an object

Parameters:

  • description (String)

    a description of the object version being opened - required

  • opening_user_name (String)

    sunetid - defaults to nil

  • assume_accessioned (Boolean)

    if true, does not check whether object has been accessioned; defaults to false

Returns:

  • (Cocina::Models::DROWithMetadata|CollectionWithMetadata|AdminPolicyWithMetadata)

    cocina model with updated version

Raises:



104
105
106
107
108
109
110
111
112
113
# File 'lib/dor/services/client/object_version.rb', line 104

def open(**params)
  resp = connection.post do |req|
    req.url with_querystring(url: open_new_version_path, params: params)
    req.headers['Content-Type'] = 'application/json'
  end

  raise_exception_based_on_response!(resp) unless resp.success?

  build_cocina_from_response(resp)
end

#openable?Boolean

Determines if a new version can be opened for a DOR object. rubocop:disable Metrics/MethodLength

Returns:

  • (Boolean)

    true if a new version can be opened

Raises:



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/dor/services/client/object_version.rb', line 79

def openable?
  resp = connection.get do |req|
    req.url "#{base_path}/openable"
  end

  raise_exception_based_on_response!(resp) unless resp.success?

  case resp.body
  when 'true'
    true
  when 'false'
    false
  else
    raise MalformedResponse, "Expected true or false, not #{resp.body}"
  end
end

#solr(version) ⇒ Hash

Returns the solr document for the user version.

Returns:

  • (Hash)

    the solr document for the user version

Raises:



157
158
159
160
161
162
163
164
# File 'lib/dor/services/client/object_version.rb', line 157

def solr(version)
  resp = connection.get do |req|
    req.url "#{base_path}/#{version}/solr"
  end
  raise_exception_based_on_response!(resp) unless resp.success?

  JSON.parse(resp.body)
end

#statusVersionStatus

Returns status of the version.

Returns:

Raises:



146
147
148
149
150
151
152
153
# File 'lib/dor/services/client/object_version.rb', line 146

def status
  resp = connection.get do |req|
    req.url "#{base_path}/status"
  end
  raise_exception_based_on_response!(resp, object_identifier) unless resp.success?

  VersionStatus.new(JSON.parse(resp.body).symbolize_keys!)
end