Class: SdrClient::RedesignedClient
- Inherits:
-
Object
- Object
- SdrClient::RedesignedClient
- Includes:
- Singleton
- Defined in:
- lib/sdr_client/redesigned_client.rb,
lib/sdr_client/redesigned_client/cli.rb,
lib/sdr_client/redesigned_client/file.rb,
lib/sdr_client/redesigned_client/find.rb,
lib/sdr_client/redesigned_client/deposit.rb,
lib/sdr_client/redesigned_client/file_set.rb,
lib/sdr_client/redesigned_client/metadata.rb,
lib/sdr_client/redesigned_client/cli/update.rb,
lib/sdr_client/redesigned_client/job_status.rb,
lib/sdr_client/redesigned_client/upload_files.rb,
lib/sdr_client/redesigned_client/authenticator.rb,
lib/sdr_client/redesigned_client/operations/md5.rb,
lib/sdr_client/redesigned_client/cli/credentials.rb,
lib/sdr_client/redesigned_client/create_resource.rb,
lib/sdr_client/redesigned_client/operations/sha1.rb,
lib/sdr_client/redesigned_client/request_builder.rb,
lib/sdr_client/redesigned_client/update_resource.rb,
lib/sdr_client/redesigned_client/structural_grouper.rb,
lib/sdr_client/redesigned_client/unexpected_response.rb,
lib/sdr_client/redesigned_client/operations/mime_type.rb,
lib/sdr_client/redesigned_client/direct_upload_request.rb,
lib/sdr_client/redesigned_client/direct_upload_response.rb,
lib/sdr_client/redesigned_client/image_file_set_strategy.rb,
lib/sdr_client/redesigned_client/file_type_file_set_strategy.rb,
lib/sdr_client/redesigned_client/structural_metadata_builder.rb,
lib/sdr_client/redesigned_client/single_file_grouping_strategy.rb,
lib/sdr_client/redesigned_client/upload_files_metadata_builder.rb,
lib/sdr_client/redesigned_client/matching_file_grouping_strategy.rb,
lib/sdr_client/redesigned_client/update_dro_with_file_identifiers.rb
Overview
The SDR client reimagined, built using patterns successfully used in other client gems we maintain
Defined Under Namespace
Modules: Operations Classes: Authenticator, CLI, Config, CreateResource, Deposit, DirectUploadRequest, DirectUploadResponse, File, FileSet, FileTypeFileSetStrategy, Find, ImageFileSetStrategy, JobStatus, MatchingFileGroupingStrategy, Metadata, RequestBuilder, SingleFileGroupingStrategy, StructuralGrouper, StructuralMetadataBuilder, UnexpectedResponse, UpdateDroWithFileIdentifiers, UpdateResource, UploadFiles, UploadFilesMetadataBuilder
Instance Attribute Summary collapse
-
#config ⇒ Object
Returns the value of attribute config.
Class Method Summary collapse
-
.configure(url:, email: nil, password: nil, token_refresher: nil, token: default_token, request_options: default_request_options, logger: default_logger) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/ParameterLists.
- .default_logger ⇒ Object
- .default_request_options ⇒ Object
-
.default_timeout ⇒ Object
NOTE: This is the number of seconds it roughly takes for H2 to successfully shunt ~10GB files over to SDR API.
-
.default_token ⇒ Object
For the initial token, use a dummy value to avoid hitting any APIs during configuration, allowing
with_token_refresh_when_unauthorizedto handle auto-magic token refreshing.
Instance Method Summary collapse
- #build_and_deposit ⇒ Object
- #deposit_model ⇒ Object
- #find ⇒ Object
-
#get(path:) ⇒ Object
Send an authenticated GET request.
- #job_status ⇒ Object
-
#post(path:, body:, headers: {}, expected_status: nil) ⇒ Object
Send an authenticated POST request.
-
#put(path:, body:, headers: {}, params: {}, expected_status: nil) ⇒ Object
Send an authenticated PUT request.
- #update_model ⇒ Object
Instance Attribute Details
#config ⇒ Object
Returns the value of attribute config.
71 72 73 |
# File 'lib/sdr_client/redesigned_client.rb', line 71 def config @config end |
Class Method Details
.configure(url:, email: nil, password: nil, token_refresher: nil, token: default_token, request_options: default_request_options, logger: default_logger) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/ParameterLists
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/sdr_client/redesigned_client.rb', line 16 def configure(url:, email: nil, password: nil, token_refresher: nil, token: default_token, request_options: , logger: default_logger) if email.blank? && password.blank? && !token_refresher.respond_to?(:call) raise ArgumentError, 'email and password cannot be blank without a custom token refresher callable' end instance.config = Config.new( token: token, url: url, email: email, password: password, request_options: , logger: logger, token_refresher: token_refresher ) instance end |
.default_logger ⇒ Object
50 51 52 |
# File 'lib/sdr_client/redesigned_client.rb', line 50 def default_logger Logger.new($stdout) end |
.default_request_options ⇒ Object
54 55 56 57 58 59 |
# File 'lib/sdr_client/redesigned_client.rb', line 54 def { read_timeout: default_timeout, timeout: default_timeout } end |
.default_timeout ⇒ Object
NOTE: This is the number of seconds it roughly takes for H2 to successfully shunt ~10GB files over to SDR API
63 64 65 |
# File 'lib/sdr_client/redesigned_client.rb', line 63 def default_timeout 900 end |
.default_token ⇒ Object
For the initial token, use a dummy value to avoid hitting any APIs
during configuration, allowing with_token_refresh_when_unauthorized to handle
auto-magic token refreshing. Why not immediately get a valid token? Our apps
commonly invoke client .configure methods in the initializer in all
application environments, even those that are never expected to
connect to production APIs, such as local development machines.
NOTE: nil and blank string cannot be used as dummy values here as
they lead to a malformed request to be sent, which triggers an
exception not rescued by with_token_refresh_when_unauthorized
46 47 48 |
# File 'lib/sdr_client/redesigned_client.rb', line 46 def default_token 'a temporary dummy token to avoid hitting the API before it is needed' end |
Instance Method Details
#build_and_deposit ⇒ Object
89 90 91 |
# File 'lib/sdr_client/redesigned_client.rb', line 89 def build_and_deposit(...) Metadata.deposit(...) end |
#deposit_model ⇒ Object
73 74 75 |
# File 'lib/sdr_client/redesigned_client.rb', line 73 def deposit_model(...) Deposit.deposit_model(...) end |
#find ⇒ Object
81 82 83 |
# File 'lib/sdr_client/redesigned_client.rb', line 81 def find(...) Find.run(...) end |
#get(path:) ⇒ Object
Send an authenticated GET request
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/sdr_client/redesigned_client.rb', line 95 def get(path:) response = do connection.get(path) end UnexpectedResponse.call(response) unless response.success? return nil if response.body.blank? JSON.parse(response.body).with_indifferent_access end |
#job_status ⇒ Object
77 78 79 |
# File 'lib/sdr_client/redesigned_client.rb', line 77 def job_status(...) JobStatus.new(...) end |
#post(path:, body:, headers: {}, expected_status: nil) ⇒ Object
Send an authenticated POST request
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/sdr_client/redesigned_client.rb', line 112 def post(path:, body:, headers: {}, expected_status: nil) # rubocop:disable Metrics/MethodLength response = do connection.post(path) do |request| request.body = body request.headers = default_headers.merge(headers) end end if expected_status UnexpectedResponse.call(response) if response.status != expected_status elsif !response.success? UnexpectedResponse.call(response) end return nil if response.body.blank? JSON.parse(response.body).with_indifferent_access end |
#put(path:, body:, headers: {}, params: {}, expected_status: nil) ⇒ Object
Send an authenticated PUT request
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/sdr_client/redesigned_client.rb', line 137 def put(path:, body:, headers: {}, params: {}, expected_status: nil) # rubocop:disable Metrics/MethodLength response = do connection.put(path) do |request| request.body = body request.headers = default_headers.merge(headers) request.params = params if params.present? end end if expected_status UnexpectedResponse.call(response) if response.status != expected_status elsif !response.success? UnexpectedResponse.call(response) end return nil if response.body.blank? JSON.parse(response.body).with_indifferent_access end |
#update_model ⇒ Object
85 86 87 |
# File 'lib/sdr_client/redesigned_client.rb', line 85 def update_model(...) UpdateResource.run(...) end |