sdr-client 0.35.1 → 0.40.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 551ee50a8e581a8a0e7cadcffec518168ef2b0fbba5368520ffeaaa086ccb66e
4
- data.tar.gz: 5ca9d3232ccfac283d09d68310c9c4fa3355943c90ef5d5bc911f3367bea5396
3
+ metadata.gz: cf5c97821bfab525a4f0b272b9519f26dd5bf46b164ab475965a1273588a31d0
4
+ data.tar.gz: 7545a75643e71bcdbd8bddfa6afdff6303e4ce05251746ea49d831669a48fc85
5
5
  SHA512:
6
- metadata.gz: fa183be1fd002a39f25816b3f990123b3a5324e87f26fda44115537d31aeeace1915f53ba45e4432760ba9e08089da9afcec7b96061fd96ea8108a7d6d0b2cf3
7
- data.tar.gz: ee6b43d4d29222f0aaec528ff85e1e2c8c657c9c659fd8089bd105c634a94c59d14275501501af4707c929d9e16606f11b815b267be0d95073d8579e7b2055ea
6
+ metadata.gz: da880356f2d5bcfac1bc39c765411538e52b9449e4eb8ce3ccdcc5a9fd1ec8044cd5784905b76be318dc705b404df283b3ea0102b63059e877cb1cf36d8458bc
7
+ data.tar.gz: 6a55918f74cd35898ad80d991ae61102ce7971170d5a29c94a9791cbb3e23d46ea4f38736e05d99c7610ecd95eb22f012ac11dd159efe100ff850889c6457955
data/README.md CHANGED
@@ -45,3 +45,9 @@ sdr --service-url https://sdr-api-server:3000 deposit --label 'hey there' \
45
45
  --collection 'druid:gh456kw9876' \
46
46
  --source-id 'googlebooks:stanford_12345' image42.jp2 ocr.html
47
47
  ```
48
+
49
+ View the object:
50
+ ```
51
+ sdr --service-url https://sdr-api-server:3000 get druid:bw581ng3176
52
+ {"type":"http://cocina.sul.stanford.edu/models/document.jsonld","externalIdentifier":"druid:bw581ng3176","label":"Something something better title","version":1,"access":{"access":"stanford","copyright":"This work is copyrighted by the creator.","download":"stanford","useAndReproductionStatement":"This document is available only to the Stanford faculty, staff and student community."},"administrative":{"hasAdminPolicy":"druid:zx485kb6348"},"description":{"title":[{"value":"Something something better title"}],"contributor":[{"name":[{"value":"Hodge, Amy"}],"type":"person","role":[{"value":"Author"},{"value":"author","uri":"http://id.loc.gov/vocabulary/relators/aut","source":{"code":"marcrelator","uri":"http://id.loc.gov/vocabulary/relators/"}},{"value":"Creator"}]}],"form":[{"structuredValue":[{"value":"Text","type":"type"},{"value":"Report","type":"subtype"}],"type":"resource type","source":{"value":"Stanford self-deposit resource types"}},{"value":"reports","type":"genre","uri":"http://vocab.getty.edu/aat/300027267","source":{"code":"aat"}},{"value":"text","type":"resource type","source":{"value":"MODS resource types"}}],"note":[{"value":";alkdfjlsadkjf;l","type":"summary"},{"value":"amyhodge@stanford.edu","type":"contact","displayLabel":"Contact"}],"subject":[{"value":"lkfj","type":"topic"},{"value":";kfj","type":"topic"},{"value":"fjwelkb","type":"topic"}]},"identification":{"sourceId":"hydrus:20"},"structural":{"contains":[{"type":"http://cocina.sul.stanford.edu/models/fileset.jsonld","externalIdentifier":"bw581ng3176_1","label":"Test file","version":1,"structural":{"contains":[{"type":"http://cocina.sul.stanford.edu/models/file.jsonld","externalIdentifier":"druid:bw581ng3176/test.txt","label":"test.txt","filename":"test.txt","size":11,"version":1,"hasMimeType":"text/plain","hasMessageDigests":[{"type":"sha1","digest":"5d39343e4bb48abd97f759828282f5ebbac56c5e"},{"type":"md5","digest":"63b8812b0c05722a9d6c51cbd2bfb54b"}],"access":{"access":"world","download":"world"},"administrative":{"sdrPreserve":true,"shelve":true}}]}}]}}
53
+ ```
data/exe/sdr CHANGED
@@ -19,6 +19,9 @@ end
19
19
  global.order!
20
20
  command = ARGV.shift
21
21
 
22
+ retrieve_options = OptionParser.new do |opts|
23
+ end
24
+
22
25
  deposit_options = OptionParser.new do |opts|
23
26
  opts.banner = "Usage: sdr #{command} [options]"
24
27
  opts.on('--label LABEL', 'The object label') do |label|
@@ -94,6 +97,7 @@ end
94
97
  SdrClient::CLI.help unless command
95
98
 
96
99
  subcommands = {
100
+ 'get' => retrieve_options,
97
101
  'deposit' => deposit_options,
98
102
  'register' => deposit_options,
99
103
  'login' => OptionParser.new
@@ -106,11 +110,10 @@ end
106
110
 
107
111
  subcommands[command].order!
108
112
 
109
- options[:files] = ARGV unless ARGV.empty?
110
113
  options[:url] ||= 'https://sdr-api-prod.stanford.edu'
111
114
 
112
115
  begin
113
- SdrClient::CLI.start(command, options)
116
+ SdrClient::CLI.start(command, options, ARGV)
114
117
  rescue StandardError => e
115
118
  warn "There was a problem making your request:\n\n"
116
119
  warn e.message
@@ -11,6 +11,7 @@ require 'cocina/models'
11
11
  require 'sdr_client/version'
12
12
  require 'sdr_client/deposit'
13
13
  require 'sdr_client/credentials'
14
+ require 'sdr_client/find'
14
15
  require 'sdr_client/login'
15
16
  require 'sdr_client/login_prompt'
16
17
  require 'sdr_client/cli'
@@ -23,6 +23,9 @@ module SdrClient
23
23
 
24
24
 
25
25
  COMMANDS:
26
+ get
27
+ Retrieve an object from the SDR
28
+
26
29
  deposit
27
30
  Accession an object into the SDR
28
31
 
@@ -34,12 +37,12 @@ module SdrClient
34
37
 
35
38
  HELP
36
39
 
37
- def self.start(command, options)
40
+ def self.start(command, options, arguments = [])
38
41
  case command
42
+ when 'get'
43
+ puts SdrClient::Find.run(arguments.first, **options)
39
44
  when 'deposit', 'register'
40
- display_errors(validate_deposit_options(options))
41
- job_id = SdrClient::Deposit.run(accession: command == 'deposit', **options)
42
- poll_for_job_complete(job_id: job_id, url: options[:url]) # TODO: add an option that skips this
45
+ deposit(command, options, arguments)
43
46
  when 'login'
44
47
  status = SdrClient::Login.run(options)
45
48
  puts status.failure if status.failure?
@@ -51,6 +54,13 @@ module SdrClient
51
54
  exit(1)
52
55
  end
53
56
 
57
+ def self.deposit(command, options, arguments)
58
+ options[:files] = arguments if arguments.present?
59
+ display_errors(validate_deposit_options(options))
60
+ job_id = SdrClient::Deposit.run(accession: command == 'deposit', **options)
61
+ poll_for_job_complete(job_id: job_id, url: options[:url]) # TODO: add an option that skips this
62
+ end
63
+
54
64
  def self.display_errors(errors)
55
65
  return if errors.empty?
56
66
 
@@ -32,7 +32,7 @@ module SdrClient
32
32
  end
33
33
  end
34
34
 
35
- delegate :put, :post, to: :connection
35
+ delegate :put, :post, :get, to: :connection
36
36
 
37
37
  private
38
38
 
@@ -52,6 +52,7 @@ module SdrClient
52
52
  # rubocop:enable Metrics/MethodLength
53
53
  # rubocop:enable Metrics/ParameterLists
54
54
 
55
+ # @param [Array<String>] files absolute paths to files
55
56
  def self.model_run(request_dro:,
56
57
  files: [],
57
58
  url:,
@@ -67,6 +68,7 @@ module SdrClient
67
68
  end
68
69
  end
69
70
  require 'json'
71
+ require 'sdr_client/deposit/create_resource'
70
72
  require 'sdr_client/deposit/single_file_grouping_strategy'
71
73
  require 'sdr_client/deposit/matching_file_grouping_strategy'
72
74
  require 'sdr_client/deposit/files/direct_upload_request'
@@ -78,5 +80,8 @@ require 'sdr_client/deposit/request'
78
80
  require 'sdr_client/deposit/metadata_builder'
79
81
  require 'sdr_client/deposit/model_process'
80
82
  require 'sdr_client/deposit/process'
83
+ require 'sdr_client/deposit/unexpected_response'
84
+ require 'sdr_client/deposit/update_resource'
85
+ require 'sdr_client/deposit/update_dro_with_file_identifiers'
81
86
  require 'sdr_client/deposit/upload_files'
82
- require 'sdr_client/deposit/upload_resource'
87
+ require 'sdr_client/deposit/upload_files_metadata_builder'
@@ -2,8 +2,8 @@
2
2
 
3
3
  module SdrClient
4
4
  module Deposit
5
- # Uploads a resource (metadata) to the server
6
- class UploadResource
5
+ # Creates a resource (metadata) in SDR
6
+ class CreateResource
7
7
  DRO_PATH = '/v1/resources'
8
8
 
9
9
  def self.run(accession:, metadata:, logger:, connection:)
@@ -11,7 +11,7 @@ module SdrClient
11
11
  end
12
12
 
13
13
  # @param [Boolean] accession should the accessionWF be started
14
- # @param [String] metadata
14
+ # @param [Cocina::Models::RequestDRO, Cocina::Models::RequestCollection] metadata
15
15
  # @param [Hash<Symbol,String>] the result of the metadata call
16
16
  def initialize(accession:, metadata:, logger:, connection:)
17
17
  @accession = accession
@@ -24,7 +24,7 @@ module SdrClient
24
24
  # @return [String] job id for the background job result
25
25
  def run
26
26
  response = metadata_request
27
- unexpected_response(response) unless response.status == 201
27
+ UnexpectedResponse.call(response) unless response.status == 201
28
28
 
29
29
  logger.info("Response from server: #{response.body}")
30
30
 
@@ -36,16 +36,10 @@ module SdrClient
36
36
  attr_reader :metadata, :logger, :connection
37
37
 
38
38
  def metadata_request
39
- logger.debug("Starting upload metadata: #{metadata}")
39
+ json = metadata.to_json
40
+ logger.debug("Starting upload metadata: #{json}")
40
41
 
41
- connection.post(path, metadata, 'Content-Type' => 'application/json')
42
- end
43
-
44
- def unexpected_response(response)
45
- raise "There was an error with your request: #{response.body}" if response.status == 400
46
- raise 'There was an error with your credentials. Perhaps they have expired?' if response.status == 401
47
-
48
- raise "unexpected response: #{response.status} #{response.body}"
42
+ connection.post(path, json, 'Content-Type' => 'application/json')
49
43
  end
50
44
 
51
45
  def accession?
@@ -24,13 +24,13 @@ module SdrClient
24
24
  check_files_exist
25
25
  child_files_match
26
26
 
27
- upload_responses = UploadFiles.new(files: files,
28
- logger: logger,
29
- connection: connection,
30
- mime_types: mime_types).run
31
- new_request_dro = with_external_identifiers(upload_responses)
32
- UploadResource.run(accession: @accession,
33
- metadata: new_request_dro.to_json,
27
+ file_metadata = UploadFilesMetadataBuilder.build(files: files, mime_types: mime_types)
28
+ upload_responses = UploadFiles.upload(file_metadata: file_metadata,
29
+ logger: logger,
30
+ connection: connection)
31
+ new_request_dro = UpdateDroWithFileIdentifiers.update(request_dro: request_dro, upload_responses: upload_responses)
32
+ CreateResource.run(accession: @accession,
33
+ metadata: new_request_dro,
34
34
  logger: logger,
35
35
  connection: connection)
36
36
  end
@@ -85,24 +85,6 @@ module SdrClient
85
85
  ]
86
86
  end
87
87
  end
88
-
89
- # rubocop:disable Metrics/AbcSize
90
- def with_external_identifiers(upload_responses)
91
- signed_id_map = Hash[upload_responses.map { |response| [response.filename, response.signed_id] }]
92
-
93
- # Manipulating request_dro as hash since immutable
94
- request_dro_hash = request_dro.to_h
95
- if request_dro_hash[:structural]
96
- request_dro_hash[:structural][:contains].each do |file_set|
97
- file_set[:structural][:contains].each do |file|
98
- file[:externalIdentifier] = signed_id_map[file[:filename]]
99
- end
100
- end
101
- end
102
-
103
- Cocina::Models::RequestDRO.new(request_dro_hash)
104
- end
105
- # rubocop:enable Metrics/AbcSize
106
88
  end
107
89
  end
108
90
  end
@@ -29,17 +29,18 @@ module SdrClient
29
29
  # @return [String] job id for the background job result
30
30
  def run
31
31
  check_files_exist
32
- upload_responses = UploadFiles.new(files: files,
33
- logger: logger,
34
- connection: connection,
35
- mime_types: mime_types).run
32
+
33
+ file_metadata = UploadFilesMetadataBuilder.build(files: files, mime_types: mime_types)
34
+ upload_responses = UploadFiles.upload(file_metadata: file_metadata,
35
+ logger: logger,
36
+ connection: connection)
36
37
  metadata_builder = MetadataBuilder.new(metadata: metadata,
37
38
  grouping_strategy: grouping_strategy,
38
39
  logger: logger)
39
40
  request = metadata_builder.with_uploads(upload_responses)
40
41
  model = Cocina::Models.build_request(request.as_json.with_indifferent_access)
41
- UploadResource.run(accession: @accession,
42
- metadata: JSON.generate(model.to_h),
42
+ CreateResource.run(accession: @accession,
43
+ metadata: model,
43
44
  logger: logger,
44
45
  connection: connection)
45
46
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SdrClient
4
+ module Deposit
5
+ # Handles unexpected responses when manipulating resources
6
+ class UnexpectedResponse
7
+ # @param [Faraday::Response] response
8
+ def self.call(response)
9
+ raise "There was an error with your request: #{response.body}" if response.status == 400
10
+ raise 'There was an error with your credentials. Perhaps they have expired?' if response.status == 401
11
+
12
+ raise "unexpected response: #{response.status} #{response.body}"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SdrClient
4
+ module Deposit
5
+ # Updates a DRO so that the structural metadata references the uploaded file ids
6
+ class UpdateDroWithFileIdentifiers
7
+ # @param [Cocina::Model::RequestDRO] request_dro for depositing
8
+ # @param [Array<Files::DirectUploadResponse>] upload_responses the responses from uploading files
9
+ # @returns [Cocina::Models::RequestDRO]
10
+ def self.update(request_dro:, upload_responses:)
11
+ # Manipulating request_dro as hash since immutable
12
+ structural = request_dro.to_h[:structural]
13
+ return request_dro.new({}) unless structural
14
+
15
+ signed_ids = signed_id_map(upload_responses)
16
+ request_dro.new(structural: updated_structural(structural, signed_ids))
17
+ end
18
+
19
+ def self.signed_id_map(upload_responses)
20
+ Hash[upload_responses.map { |response| [response.filename, response.signed_id] }]
21
+ end
22
+ private_class_method :signed_id_map
23
+
24
+ def self.updated_structural(structural, signed_ids)
25
+ structural[:contains].each do |file_set|
26
+ file_set[:structural][:contains].each do |file|
27
+ file[:externalIdentifier] = signed_ids[file[:filename]]
28
+ end
29
+ end
30
+ structural
31
+ end
32
+ private_class_method :updated_structural
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SdrClient
4
+ module Deposit
5
+ # Updates a resource (metadata) in SDR
6
+ class UpdateResource
7
+ DRO_PATH = '/v1/resources/%<id>s'
8
+
9
+ def self.run(metadata:, logger:, connection:)
10
+ new(metadata: metadata, logger: logger, connection: connection).run
11
+ end
12
+
13
+ # @param [Cocina::Models::DRO] metadata
14
+ # @param [Hash<Symbol,String>] the result of the metadata call
15
+ def initialize(metadata:, logger:, connection:)
16
+ @metadata = metadata
17
+ @logger = logger
18
+ @connection = connection
19
+ end
20
+
21
+ # @param [Hash<Symbol,String>] the result of the metadata call
22
+ # @return [String] job id for the background job result
23
+ def run
24
+ response = metadata_request
25
+ UnexpectedResponse.call(response) unless response.status == 202
26
+
27
+ logger.info("Response from server: #{response.body}")
28
+
29
+ JSON.parse(response.body)['jobId']
30
+ end
31
+
32
+ private
33
+
34
+ attr_reader :metadata, :logger, :connection
35
+
36
+ def metadata_request
37
+ json = metadata.to_json
38
+ logger.debug("Starting upload metadata: #{json}")
39
+
40
+ connection.put(path(metadata), json, 'Content-Type' => 'application/json')
41
+ end
42
+
43
+ def path(metadata)
44
+ format(DRO_PATH, id: metadata.externalIdentifier)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -7,40 +7,34 @@ module SdrClient
7
7
  # The file uploading part of a deposit
8
8
  class UploadFiles
9
9
  BLOB_PATH = '/v1/direct_uploads'
10
- # @param [Array<String>] files a list of filepaths to upload
10
+ # @param [Hash<String,Files::DirectUploadRequest>] the metadata for uploading the files
11
11
  # @param [Logger] logger the logger to use
12
12
  # @param [Connection] connection
13
- # @param [Hash<String,String] mime_types a map of filenames to mime types
14
- def initialize(files:, mime_types:, logger:, connection:)
15
- @files = files
16
- @mime_types = mime_types
13
+ def self.upload(file_metadata:, logger:, connection:)
14
+ new(file_metadata: file_metadata, logger: logger, connection: connection).run
15
+ end
16
+
17
+ # @param [Hash<String,Files::DirectUploadRequest>] the metadata for uploading the files
18
+ # @param [Logger] logger the logger to use
19
+ # @param [Connection] connection
20
+ def initialize(file_metadata:, logger:, connection:)
21
+ @file_metadata = file_metadata
17
22
  @logger = logger
18
23
  @connection = connection
19
24
  end
20
25
 
21
26
  # @return [Array<SdrClient::Deposit::Files::DirectUploadResponse>] the responses from the server for the uploads
22
27
  def run
23
- file_metadata = collect_file_metadata
24
- upload_responses = upload_file_metadata(file_metadata)
28
+ upload_responses = upload_file_metadata
25
29
  upload_files(upload_responses)
26
30
  upload_responses.values
27
31
  end
28
32
 
29
33
  private
30
34
 
31
- attr_reader :files, :mime_types, :logger, :connection
32
-
33
- def collect_file_metadata
34
- files.each_with_object({}) do |path, obj|
35
- file_name = ::File.basename(path)
36
- obj[path] = Files::DirectUploadRequest.from_file(path,
37
- file_name: file_name,
38
- content_type: mime_types[file_name])
39
- end
40
- end
35
+ attr_reader :logger, :connection, :file_metadata
41
36
 
42
- # @param [Hash<String,Files::DirectUploadRequest>] file_metadata the filenames and their upload request
43
- def upload_file_metadata(file_metadata)
37
+ def upload_file_metadata
44
38
  Hash[file_metadata.map { |filename, metadata| [filename, direct_upload(metadata.to_json)] }]
45
39
  end
46
40
 
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+
5
+ module SdrClient
6
+ module Deposit
7
+ # Collecting all the metadata about the files for a deposit
8
+ class UploadFilesMetadataBuilder
9
+ # @param [Array<String>] files a list of filepaths to upload
10
+ # @param [Hash<String,String>] mime_types a map of filenames to mime types
11
+ # @return [Hash<String, Files::DirectUploadRequest>] the metadata for uploading the files
12
+ def self.build(files:, mime_types:)
13
+ new(files: files, mime_types: mime_types).build
14
+ end
15
+
16
+ # @param [Array<String>] files a list of filepaths to upload
17
+ # @param [Hash<String,String>] mime_types a map of filenames to mime types
18
+ def initialize(files:, mime_types:)
19
+ @files = files
20
+ @mime_types = mime_types
21
+ end
22
+
23
+ attr_reader :files, :mime_types
24
+
25
+ # @return [Hash<String, Files::DirectUploadRequest>] the metadata for uploading the files
26
+ def build
27
+ files.each_with_object({}) do |path, obj|
28
+ obj[path] = Files::DirectUploadRequest.from_file(path,
29
+ file_name: filename_for(path),
30
+ content_type: mime_type_for(path))
31
+ end
32
+ end
33
+
34
+ # This can be overridden in the case that the file on disk has a different
35
+ # name than we want to repo to know about.
36
+ def filename_for(file_path)
37
+ ::File.basename(file_path)
38
+ end
39
+
40
+ def mime_type_for(file_path)
41
+ mime_types[filename_for(file_path)]
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+
5
+ module SdrClient
6
+ # The namespace for the "get" command
7
+ module Find
8
+ DRO_PATH = '/v1/resources/%<id>s'
9
+ # @return [String] job id for the background job result
10
+ def self.run(druid, url:, logger: Logger.new(STDOUT))
11
+ connection = Connection.new(url: url)
12
+ path = format(DRO_PATH, id: druid)
13
+ logger.info("Retrieving metadata from: #{path}")
14
+ response = connection.get(path)
15
+ response.body
16
+ end
17
+ end
18
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SdrClient
4
- VERSION = '0.35.1'
4
+ VERSION = '0.40.0'
5
5
  end
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.require_paths = ['lib']
29
29
 
30
30
  spec.add_dependency 'activesupport'
31
- spec.add_dependency 'cocina-models', '~> 0.42.1'
31
+ spec.add_dependency 'cocina-models', '~> 0.44.0'
32
32
  spec.add_dependency 'dry-monads'
33
33
  spec.add_dependency 'faraday', '>= 0.16'
34
34
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sdr-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.35.1
4
+ version: 0.40.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-26 00:00:00.000000000 Z
11
+ date: 2020-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.42.1
33
+ version: 0.44.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.42.1
40
+ version: 0.44.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: dry-monads
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -193,6 +193,7 @@ files:
193
193
  - lib/sdr_client/connection.rb
194
194
  - lib/sdr_client/credentials.rb
195
195
  - lib/sdr_client/deposit.rb
196
+ - lib/sdr_client/deposit/create_resource.rb
196
197
  - lib/sdr_client/deposit/file.rb
197
198
  - lib/sdr_client/deposit/file_metadata_builder.rb
198
199
  - lib/sdr_client/deposit/file_metadata_builder_operations/md5.rb
@@ -207,8 +208,12 @@ files:
207
208
  - lib/sdr_client/deposit/process.rb
208
209
  - lib/sdr_client/deposit/request.rb
209
210
  - lib/sdr_client/deposit/single_file_grouping_strategy.rb
211
+ - lib/sdr_client/deposit/unexpected_response.rb
212
+ - lib/sdr_client/deposit/update_dro_with_file_identifiers.rb
213
+ - lib/sdr_client/deposit/update_resource.rb
210
214
  - lib/sdr_client/deposit/upload_files.rb
211
- - lib/sdr_client/deposit/upload_resource.rb
215
+ - lib/sdr_client/deposit/upload_files_metadata_builder.rb
216
+ - lib/sdr_client/find.rb
212
217
  - lib/sdr_client/login.rb
213
218
  - lib/sdr_client/login_prompt.rb
214
219
  - lib/sdr_client/version.rb
@@ -234,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
239
  - !ruby/object:Gem::Version
235
240
  version: '0'
236
241
  requirements: []
237
- rubygems_version: 3.0.3
242
+ rubygems_version: 3.1.4
238
243
  signing_key:
239
244
  specification_version: 4
240
245
  summary: The CLI for https://github.com/sul-dlss/sdr-api