folio_client 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad8e1c9733f1bba9dc63d5f8c19edb7f4b40a7c16084c3f434175582d466d70a
4
- data.tar.gz: 32beb6817690d4e95a7ce741fbde1466ccc75b7a13489230b0f1d859af6b7baa
3
+ metadata.gz: e5e7b3edaad66a7bca966c6316eb979f722fe0eb2336def7f45eda9952a2a5ee
4
+ data.tar.gz: 7d4d555e56d607acbb4649ef59e94e5ab417ee1f4f78fce2a999864f9e8486ee
5
5
  SHA512:
6
- metadata.gz: c49e0286404a94fc67bc973b40501885410e5b560e24a922664c2d8e9031766fdfb85af55896cadf21ea8eb91fe85eea6829fa35f7a0645d6a543055c63ef44b
7
- data.tar.gz: 6f1deeee160c8625a5c84c68c57cfb35e3d28d16af0b08c4423478dc8026ebc8a637dcda752b21b814169c49970c0d399511d9c79020ead609470c90ecb150f8
6
+ metadata.gz: ad63a3b363409b8561ca3ecf0f94b05f915ffe8ec621915e692f7d805d1f1c140b7626d2c95d613cc35974c08425a313e33ac72cc3249f68a1b3aece8d182688
7
+ data.tar.gz: 6e0bfb061e5fafda66cc4690726bb69a17e3ccdd474997bb433d3fa9f02d55f2e6c103edc263ab82e22d69c36960576a7acc5ab73f23b7e6364acee487efb99e
@@ -0,0 +1,19 @@
1
+ #!/bin/bash --login
2
+
3
+ # This script is called by our weekly dependency update job in Jenkins after updating Ruby and other deps
4
+
5
+ # Switch to Ruby 3.1 for FolioClient (3.0 is default in Jenkinsfile)
6
+ rvm use 3.1.2@folio_client --create &&
7
+ gem install bundler &&
8
+ bundle install --gemfile Gemfile
9
+
10
+ standardrb --fix > folio_client_standard.txt
11
+
12
+ retVal=$?
13
+
14
+ git commit -am "Update to latest standard style guide"
15
+
16
+ if [ $retVal -ne 0 ]; then
17
+ echo "ERROR UPDATING RUBY TO STANDARD STYLE (folio_client)"
18
+ cat folio_client_standard.txt
19
+ fi
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- folio_client (0.10.0)
4
+ folio_client (0.11.0)
5
5
  activesupport (>= 4.2, < 8)
6
6
  dry-monads
7
7
  faraday
@@ -116,6 +116,7 @@ PLATFORMS
116
116
  x86_64-darwin-19
117
117
  x86_64-darwin-20
118
118
  x86_64-darwin-21
119
+ x86_64-darwin-22
119
120
  x86_64-linux
120
121
 
121
122
  DEPENDENCIES
@@ -7,6 +7,8 @@ require "stringio"
7
7
  class FolioClient
8
8
  # Imports MARC records into FOLIO
9
9
  class DataImport
10
+ JOB_PROFILE_ATTRIBUTES = %w[id name description dataType].freeze
11
+
10
12
  # @param client [FolioClient] the configured client
11
13
  def initialize(client)
12
14
  @client = client
@@ -15,6 +17,7 @@ class FolioClient
15
17
  # @param record [MARC::Record] record to be imported
16
18
  # @param job_profile_id [String] job profile id to use for import
17
19
  # @param job_profile_name [String] job profile name to use for import
20
+ # @return [JobStatus] a job status instance to get information about the data import job
18
21
  def import(marc:, job_profile_id:, job_profile_name:)
19
22
  response_hash = client.post("/data-import/uploadDefinitions", {fileDefinitions: [{name: marc_filename}]})
20
23
  upload_definition_id = response_hash.dig("fileDefinitions", 0, "uploadDefinitionId")
@@ -38,6 +41,14 @@ class FolioClient
38
41
  JobStatus.new(client, job_execution_id: job_execution_id)
39
42
  end
40
43
 
44
+ # @return [Array<Hash<String,String>>] a list of job profile hashes
45
+ def job_profiles
46
+ client
47
+ .get("/data-import-profiles/jobProfiles")
48
+ .fetch("jobProfiles", [])
49
+ .map { |profile| profile.slice(*JOB_PROFILE_ATTRIBUTES) }
50
+ end
51
+
41
52
  private
42
53
 
43
54
  attr_reader :client, :marc, :job_profile_id, :job_profile_name
@@ -13,7 +13,8 @@ class FolioClient
13
13
  # get marc bib data from folio given an instance HRID
14
14
  # @param instance_hrid [String] the key to use for MARC lookup
15
15
  # @return [Hash] hash representation of the MARC. should be usable by MARC::Record.new_from_hash (from ruby-marc gem)
16
- # @raises NotFound, MultipleRecordsForIdentifier
16
+ # @raise [ResourceNotFound]
17
+ # @raise [MultipleResourcesFound]
17
18
  def fetch_marc_hash(instance_hrid:)
18
19
  response_hash = client.get("/source-storage/source-records", {instanceHrid: instance_hrid})
19
20
 
@@ -12,10 +12,12 @@ class FolioClient
12
12
  raise ForbiddenError, "The operation requires privileges which the client does not have: #{response.body}"
13
13
  when 404
14
14
  raise ResourceNotFound, "Endpoint not found or resource does not exist: #{response.body}"
15
+ when 409
16
+ raise ConflictError, "Resource cannot be updated: #{response.body}"
15
17
  when 422
16
- raise ValidationError, "There was a validation problem with the request: #{response.body} "
18
+ raise ValidationError, "There was a validation problem with the request: #{response.body}"
17
19
  when 500
18
- raise ServiceUnavailable, "The remote server returned an internal server error."
20
+ raise ServiceUnavailable, "The remote server returned an internal server error: #{response.body}"
19
21
  else
20
22
  raise StandardError, "Unexpected response: #{response.status} #{response.body}"
21
23
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class FolioClient
4
- VERSION = "0.10.0"
4
+ VERSION = "0.11.0"
5
5
  end
data/lib/folio_client.rb CHANGED
@@ -35,6 +35,9 @@ class FolioClient
35
35
  # Error raised when the Folio API returns a 422 Unprocessable Entity
36
36
  class ValidationError < Error; end
37
37
 
38
+ # Error raised when the Folio API returns a 409 Conflict
39
+ class ConflictError < Error; end
40
+
38
41
  DEFAULT_HEADERS = {
39
42
  accept: "application/json, text/plain",
40
43
  content_type: "application/json"
@@ -44,24 +47,32 @@ class FolioClient
44
47
  # @param url [String] the folio API URL
45
48
  # @param login_params [Hash] the folio client login params (username:, password:)
46
49
  # @param okapi_headers [Hash] the okapi specific headers to add (X-Okapi-Tenant:, User-Agent:)
47
- def configure(url:, login_params:, okapi_headers:)
48
- instance.config = OpenStruct.new(url: url, login_params: login_params, okapi_headers: okapi_headers, token: nil)
49
-
50
+ def configure(url:, login_params:, okapi_headers:, timeout: default_timeout)
51
+ instance.config = OpenStruct.new(
52
+ url: url,
53
+ login_params: login_params,
54
+ okapi_headers: okapi_headers,
55
+ timeout: timeout
56
+ )
57
+
58
+ # NOTE: The token cannot be set above, since `#connection` relies on
59
+ # `instance.config` parameters having already been set.
50
60
  instance.config.token = Authenticator.token(login_params, connection)
51
61
 
52
62
  self
53
63
  end
54
64
 
55
- delegate :config, :connection, :get, :post, :put, to: :instance
56
- delegate :fetch_hrid, :fetch_external_id, :fetch_instance_info, :fetch_marc_hash, :has_instance_status?, :data_import, :edit_marc_json,
57
- :organizations, :organization_interfaces, :interface_details, to: :instance
65
+ delegate :config, :connection, :data_import, :default_timeout, :edit_marc_json,
66
+ :fetch_external_id, :fetch_hrid, :fetch_instance_info, :fetch_marc_hash, :get,
67
+ :has_instance_status?, :interface_details, :job_profiles, :organization_interfaces,
68
+ :organizations, :post, :put, to: :instance
58
69
  end
59
70
 
60
71
  attr_accessor :config
61
72
 
62
73
  # Send an authenticated get request
63
74
  # @param path [String] the path to the Folio API request
64
- # @param request [Hash] params to get to the API
75
+ # @param params [Hash] params to get to the API
65
76
  def get(path, params = {})
66
77
  response = TokenWrapper.refresh(config, connection) do
67
78
  connection.get(path, params, {"x-okapi-token": config.token})
@@ -120,7 +131,8 @@ class FolioClient
120
131
  def connection
121
132
  @connection ||= Faraday.new(
122
133
  url: config.url,
123
- headers: DEFAULT_HEADERS.merge(config.okapi_headers || {})
134
+ headers: DEFAULT_HEADERS.merge(config.okapi_headers || {}),
135
+ request: {timeout: config.timeout}
124
136
  )
125
137
  end
126
138
 
@@ -168,28 +180,42 @@ class FolioClient
168
180
  .import(...)
169
181
  end
170
182
 
171
- # @see RecordsEditor.edit_marc_json
183
+ # @ see DataImport#job_profiles
184
+ def job_profiles(...)
185
+ DataImport
186
+ .new(self)
187
+ .job_profiles(...)
188
+ end
189
+
190
+ # @see RecordsEditor#edit_marc_json
172
191
  def edit_marc_json(...)
173
192
  RecordsEditor
174
193
  .new(self)
175
194
  .edit_marc_json(...)
176
195
  end
177
196
 
197
+ # @see Organizations#fetch_list
178
198
  def organizations(...)
179
199
  Organizations
180
200
  .new(self)
181
201
  .fetch_list(...)
182
202
  end
183
203
 
204
+ # @see Organizations#fetch_interface_list
184
205
  def organization_interfaces(...)
185
206
  Organizations
186
207
  .new(self)
187
208
  .fetch_interface_list(...)
188
209
  end
189
210
 
211
+ # @see Organizations#fetch_interface_details
190
212
  def interface_details(...)
191
213
  Organizations
192
214
  .new(self)
193
215
  .fetch_interface_details(...)
194
216
  end
217
+
218
+ def default_timeout
219
+ 120
220
+ end
195
221
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: folio_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Mangiafico
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-28 00:00:00.000000000 Z
11
+ date: 2023-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -177,6 +177,7 @@ executables: []
177
177
  extensions: []
178
178
  extra_rdoc_files: []
179
179
  files:
180
+ - ".autoupdate/postupdate"
180
181
  - ".rspec"
181
182
  - ".rubocop.yml"
182
183
  - ".rubocop/custom.yml"
@@ -205,7 +206,7 @@ metadata:
205
206
  source_code_uri: https://github.com/sul-dlss/folio_client
206
207
  changelog_uri: https://github.com/sul-dlss/folio_client/releases
207
208
  rubygems_mfa_required: 'true'
208
- post_install_message:
209
+ post_install_message:
209
210
  rdoc_options: []
210
211
  require_paths:
211
212
  - lib
@@ -220,8 +221,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
220
221
  - !ruby/object:Gem::Version
221
222
  version: '0'
222
223
  requirements: []
223
- rubygems_version: 3.4.5
224
- signing_key:
224
+ rubygems_version: 3.3.7
225
+ signing_key:
225
226
  specification_version: 4
226
227
  summary: Interface for interacting with the Folio ILS API.
227
228
  test_files: []