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_unauthorized` to 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 |