alma_api 1.0.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +93 -30
- data/lib/alma_api/client.rb +76 -34
- data/lib/alma_api/configuration.rb +21 -8
- data/lib/alma_api/version.rb +1 -1
- data/lib/alma_api.rb +7 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0285277d54273b7ad7bc88e92941b3b5dc8d687f185da09e178b4634374f9888'
|
4
|
+
data.tar.gz: 74705ba4e5216b96c4c2855a6122d888d26fcf13d5c59cc2d6816851971b573a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdf8362e4e389cecb7c5d51627115b54d764696903b1745415a651bc375788c4b12b8c061dd476222e60b7f714a100d0a419ba755f017bc8bd2761bcac4ea9c2
|
7
|
+
data.tar.gz: afe0e7c68cfb16c0564dad09b7a67dd2896b023abf9a710e7dbd58d1e2815a7999a9b2e6f23846d1644f516537e2621161dc2abc32669919cdd5ce683cdb8955
|
data/README.md
CHANGED
@@ -13,7 +13,7 @@ The main purpose of this library is to abstract authentication, error handling,
|
|
13
13
|
|
14
14
|
It uses [`faraday`](https://github.com/lostisland/faraday) as the underlying http client, [`nokogiri`](https://github.com/sparklemotion/nokogiri) for XML parsing, and [`oj`](https://github.com/ohler55/oj) and [`hashie`](https://github.com/hashie/hashie) for JSON processing.
|
15
15
|
|
16
|
-
__Note: This is
|
16
|
+
__Note: This is _NOT_ an official Alma API client. It is developed at the [University Library of Paderborn](https://ub.uni-paderborn.de) as an open source project and used in production as part of the library's [discovery portal](https://katalog.ub.uni-paderborn.de).__
|
17
17
|
|
18
18
|
## Installation
|
19
19
|
|
@@ -28,38 +28,64 @@ and run the `bundle install` command in your terminal.
|
|
28
28
|
|
29
29
|
> You need an API key for your Alma Instance in order to use this client. Please consult the [Ex Libris developer documentation on how to use the Alma REST APIs](https://developers.exlibrisgroup.com/alma/apis/#using) for more information how to get and setup your API keys.
|
30
30
|
|
31
|
+
__Note: There a some breaking changes when upgrading from 1.x to 2.x. [Please read the section on upgrading below](#upgrading).__
|
32
|
+
|
33
|
+
### Quick example
|
34
|
+
|
35
|
+
Here is a minimal example to get started. Read the sections below for more information on how to use this library.
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
# Create a client
|
39
|
+
client = AlmaApi::Client.configure do |config|
|
40
|
+
config.api_key = "YOUR API KEY"
|
41
|
+
end
|
42
|
+
|
43
|
+
# Use the client to get some users
|
44
|
+
users = client.get("users", params: {limit: 2})
|
45
|
+
```
|
46
|
+
|
31
47
|
### Creating a configuration
|
32
48
|
|
33
|
-
To use this library you need an `AlmaApi::Client` instance.
|
49
|
+
To use this library you need an `AlmaApi::Client` instance. To create a client you first need an `AlmaApi::Configuration`.
|
34
50
|
|
35
51
|
```ruby
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
52
|
+
# Normal method
|
53
|
+
configuration = AlmaApi::Configuration.new(api_key: "YOUR API KEY")
|
54
|
+
# ... or
|
55
|
+
configuration = AlmaApi::Configuration.new
|
56
|
+
configuration.api_key = "YOUR API KEY"
|
57
|
+
|
58
|
+
# Block-style
|
59
|
+
configuration = AlmaApi::Configuration.new do |config|
|
60
|
+
config.api_key = "YOUR API KEY"
|
61
|
+
end
|
42
62
|
```
|
63
|
+
The API key is the only required option to get a functional configuration. There are sensible default values for all other options.
|
64
|
+
|
65
|
+
The following options are available:
|
43
66
|
|
44
67
|
1. `api_key`
|
45
|
-
|
68
|
+
Set your Alma API key. This is the only option that can be passed to the constructor as a shortcut. All other options must be set using setters.
|
46
69
|
2. `base_url`
|
47
|
-
|
70
|
+
Set the base URL to be used for each request. Ex Libris provides different API gateways for different geographical locations. See [the documentation here](https://developers.exlibrisgroup.com/alma/apis/#calling) for more information. This parameter is optional and defaults to the Alma API Gateway for Europe: `https://api-eu.hosted.exlibrisgroup.com/almaws/v1`.
|
48
71
|
|
49
|
-
|
72
|
+
This expects a `String` with a valid URL. However, you can use a `Symbol` as a shortcut to set the `base_url` for one of the preconfigured gateways `:na` (North America), `:eu` (Europe), `:ap` (Asia-Pacific), `:ca` (Canada), `:cn` (China).
|
50
73
|
|
51
74
|
For example, to set the `base_url` for the canadian gateway, use
|
52
75
|
|
53
76
|
```ruby
|
54
|
-
configuration = AlmaApi::Configuration.new
|
55
|
-
|
56
|
-
|
77
|
+
configuration = AlmaApi::Configuration.new do |config|
|
78
|
+
config.api_key = "YOUR API KEY"
|
79
|
+
config.base_url = :ca
|
57
80
|
)
|
58
81
|
```
|
59
82
|
3. `default_format`
|
60
|
-
The default format to use for each request. The client supports `json` and `xml`. The default is `json`.
|
83
|
+
The default format to use for each request. The client supports `"json"` and `"xml"`. The default is `"json"`.
|
61
84
|
4. `language`
|
62
|
-
The language used by Alma for error messages and textual information. The default is English (`en`). To change this, set this parameter to any 2-letter language code that is supported and enabled in Alma (see the mapping table "Institution Languages" in Alma).
|
85
|
+
The language used by Alma for error messages and textual information. The default is English (`"en"`). To change this, set this parameter to any 2-letter language code that is supported and enabled in Alma (see the mapping table "Institution Languages" in Alma).
|
86
|
+
5. `timeout`
|
87
|
+
The max number of seconds (Integer, Float) to wait for a request to complete. The default is `nil` which uses
|
88
|
+
the default of the underlying Faraday adapter (`Net::HTTP`).
|
63
89
|
|
64
90
|
### Creating a client
|
65
91
|
|
@@ -68,28 +94,31 @@ With the configuration ready, you can create the client.
|
|
68
94
|
```ruby
|
69
95
|
client = AlmaApi::Client.new(configuration)
|
70
96
|
```
|
71
|
-
|
72
|
-
As a shortcut, you can call `AlmaApi.configure` to get the client instance. Note that each call to `AlmaApi.configure` returns a new `AlmaApi::Client` instance.
|
97
|
+
As a shortcut, you can call `AlmaApi.configure` with a block to get the client instance. Note that each call to `AlmaApi.configure` returns a new `AlmaApi::Client` instance.
|
73
98
|
|
74
99
|
```ruby
|
75
|
-
client = AlmaApi.configure do |config|
|
76
|
-
api_key
|
77
|
-
|
78
|
-
default_format: "...",
|
79
|
-
language: "..."
|
100
|
+
client = AlmaApi::Client.configure do |config|
|
101
|
+
config.api_key = "..."
|
102
|
+
...
|
80
103
|
end
|
81
104
|
```
|
82
105
|
### Using the client
|
83
106
|
|
107
|
+
#### Calling Alma
|
108
|
+
|
84
109
|
The client provides the following methods: `#get`, `#post`, `#put` and `#delete` to call the Alma APIs with the corresponding HTTP methods `GET`, `POST`, `PUT` and `DELETE`.
|
85
110
|
|
86
111
|
Each method expects a URL path to the resource relative to the configured `base_url` as it's first parameter. Parameters that the Alma API expects as part of the URL path must be included here.
|
87
112
|
|
88
|
-
To set query string parameters, set the `params:` option and provide a Ruby `hash`. To override the `default_format` for an individual request, you can set the `format:` option to `json` or `xml`, depending on your needs. Setting the format to `xml` is preferable for Alma APIs that work with MARCXML data.
|
113
|
+
To set query string parameters, set the `params:` option and provide a Ruby `hash`. To override the `default_format` for an individual request, you can set the `format:` option to `"json"` or `"xml"`, depending on your needs. Setting the format to `"xml"` is preferable for Alma APIs that work with MARCXML data.
|
114
|
+
|
115
|
+
To set the body of a `#post` or `#put` request, you can set the `body:` option. If the request format is `"json"`, the `body:` option should contain a valid json string. Otherwise, if the request format is `"xml"`, the option should be a valid XML string.
|
116
|
+
|
117
|
+
In the case of a JSON request, the result of the call is a Ruby `hash`. For a XML request, the result is a `Nokogiri::XML::Document` instance, as this library uses [`nokogiri`](https://github.com/sparklemotion/nokogiri) under the hood for XML processing.
|
89
118
|
|
90
|
-
|
119
|
+
#### Get remaining API calls
|
91
120
|
|
92
|
-
|
121
|
+
Alma reports the number of remaining API calls as part of the response. You can call `#remaining_api_calls` on the client to get this number. In case of an error this simply returns `-1`.
|
93
122
|
|
94
123
|
## Examples
|
95
124
|
|
@@ -156,11 +185,22 @@ client.delete("users/#{user_id}") # user_id is a URL parameter
|
|
156
185
|
|
157
186
|
## Error handling
|
158
187
|
|
159
|
-
There are
|
188
|
+
There are four types of errors that can occur when calling the Alma APIs with this library.
|
160
189
|
|
161
|
-
|
190
|
+
### 1. `AlmaApi::Error`
|
162
191
|
|
163
|
-
|
192
|
+
This is the base error class for this library. All errors raised within this library during a request will result in an `AlmaApi::Error` or in one of the more specific sub classes listed below.
|
193
|
+
|
194
|
+
This error is also raised if something goes wrong when opening the connection, on SSL errors, network timeouts, etc.
|
195
|
+
|
196
|
+
The original error is wrapped and is available via the `#cause` method.
|
197
|
+
|
198
|
+
Each error exposes `#message` and `#code` methods for further inspection.
|
199
|
+
Messages that are generated by Alma are returned in the language set in the configuration (default is English).
|
200
|
+
|
201
|
+
The code is generated by Alma. For gateway errors, the code is a string token (e.g. REQUEST_TOO_LARGE). For logical errors, the code is usually a number (e.g. 401850). See the "Possible Error Codes" section for each resource in the [documentation](https://developers.exlibrisgroup.com/alma/apis/) for details.
|
202
|
+
|
203
|
+
### 2. `AlmaApi::GatewayError`
|
164
204
|
|
165
205
|
If the Alma API responds with a `4xx` OR `5xx` HTTP status AND one of the following error codes, an `AlmaApi::GatewayError` is thrown.
|
166
206
|
|
@@ -178,7 +218,7 @@ Any `4xx` HTTP status that does not result in an `AlmaApi::GatewayError` will be
|
|
178
218
|
|
179
219
|
This is the most common error you will encounter and can be used to manage the control flow in your application.
|
180
220
|
|
181
|
-
For example, if you're loading a user's details, you don't want your application to blow up if a user with the specified user ID doesn't exist. Instead, you can handle the error like this:
|
221
|
+
For example, if you're loading a user's details, you usually don't want your application to blow up if a user with the specified user ID doesn't exist. Instead, you can handle the error like this:
|
182
222
|
|
183
223
|
```ruby
|
184
224
|
def load_user(user_id)
|
@@ -200,3 +240,26 @@ else
|
|
200
240
|
end
|
201
241
|
|
202
242
|
```
|
243
|
+
|
244
|
+
## Tweaking a request
|
245
|
+
|
246
|
+
As stated before this library uses [`faraday`](https://github.com/lostisland/faraday) as the underlying http client. It manages the Faraday connection, sets up the necessary headers and params and performs the requests against Alma.
|
247
|
+
|
248
|
+
Therefore there should be no need to tweak a request before sending it to Alma. This should be considered as a bug and we are happy to receive feature requests.
|
249
|
+
|
250
|
+
However, there is a way to tweak a request. For `#get`, `#post`, `#put` and `#delete` you can open a block that gives you access to the [`Faraday::Request`](https://www.rubydoc.info/github/lostisland/faraday/Faraday/Request) instance.
|
251
|
+
|
252
|
+
```ruby
|
253
|
+
client.get("some/path") do |req|
|
254
|
+
req.headers["foo"] = "bar"
|
255
|
+
end
|
256
|
+
```
|
257
|
+
|
258
|
+
## Upgrading
|
259
|
+
|
260
|
+
### From 1.x to 2.x
|
261
|
+
|
262
|
+
* `AlmaApi.configure` is deprecated. Use `AlmaApi::Client.configure` instead.
|
263
|
+
* All errors that get raised during a request result in an `AlmaApi::Error`. Use `#cause` to get the causing error.
|
264
|
+
* `AlmaApi::Client#remaining_api_calls` performs a request to read the value from Alma.
|
265
|
+
* `AlmaApi::Configuration` can be used to set a request timeout.
|
data/lib/alma_api/client.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
module AlmaApi
|
2
2
|
class Client
|
3
|
+
class << self
|
4
|
+
def configure
|
5
|
+
configuration = Configuration.new
|
6
|
+
yield(configuration) if block_given?
|
7
|
+
new(configuration)
|
8
|
+
end
|
9
|
+
end
|
3
10
|
|
4
|
-
attr_reader :configuration
|
5
|
-
:remaining_api_calls
|
11
|
+
attr_reader :configuration
|
6
12
|
|
7
13
|
def initialize(configuration)
|
8
14
|
@configuration = configuration
|
@@ -11,7 +17,9 @@ module AlmaApi
|
|
11
17
|
|
12
18
|
def get(url, params: {}, format: nil)
|
13
19
|
perform_request do
|
14
|
-
connection(format: format, params: params).get(url)
|
20
|
+
connection(format: format, params: params).get(url) do |req|
|
21
|
+
yield(req) if block_given?
|
22
|
+
end
|
15
23
|
end
|
16
24
|
end
|
17
25
|
|
@@ -19,6 +27,7 @@ module AlmaApi
|
|
19
27
|
perform_request do
|
20
28
|
connection(format: format, params: params).post(url) do |req|
|
21
29
|
req.body = body
|
30
|
+
yield(req) if block_given?
|
22
31
|
end
|
23
32
|
end
|
24
33
|
end
|
@@ -27,19 +36,32 @@ module AlmaApi
|
|
27
36
|
perform_request do
|
28
37
|
connection(format: format, params: params).put(url) do |req|
|
29
38
|
req.body = body
|
39
|
+
yield(req) if block_given?
|
30
40
|
end
|
31
41
|
end
|
32
42
|
end
|
33
43
|
|
34
44
|
def delete(url, params: {}, format: nil)
|
35
45
|
perform_request do
|
36
|
-
connection(format: format, params: params).delete(url)
|
46
|
+
connection(format: format, params: params).delete(url) do |req|
|
47
|
+
yield(req) if block_given?
|
48
|
+
end
|
37
49
|
end
|
38
50
|
end
|
39
51
|
|
52
|
+
def remaining_api_calls
|
53
|
+
response = connection.get("users/operation/test")
|
54
|
+
rac = response.headers["x-exl-api-remaining"]
|
55
|
+
rac.present? ? rac.to_i : -1
|
56
|
+
rescue StandardError
|
57
|
+
-1
|
58
|
+
end
|
59
|
+
|
40
60
|
private
|
41
61
|
|
42
62
|
def connection(format: nil, params: {})
|
63
|
+
# The format parameter is used to specify the format of the request.
|
64
|
+
# Alma supports both JSON and XML, but the default is JSON.
|
43
65
|
format = case AlmaApi.validate_format!(format)
|
44
66
|
when "xml" then "application/xml"
|
45
67
|
when "json" then "application/json"
|
@@ -47,20 +69,40 @@ module AlmaApi
|
|
47
69
|
"application/json"
|
48
70
|
end
|
49
71
|
|
72
|
+
# Setup default parameters. For now just the language.
|
73
|
+
# If the language is not specified, then the default language is English.
|
50
74
|
default_params = {
|
51
75
|
lang: configuration.language
|
52
76
|
}.reject do |k, v|
|
53
77
|
k == :lang && (v.blank? || v == "en")
|
54
78
|
end
|
55
79
|
|
80
|
+
# Merge the default parameters with the parameters passed in.
|
81
|
+
params = default_params.reverse_merge(params)
|
82
|
+
|
83
|
+
# Setup the headers for the request.
|
84
|
+
headers = {
|
85
|
+
"Authorization" => "apikey #{configuration.api_key}",
|
86
|
+
"Accept" => format,
|
87
|
+
"Content-Type" => format
|
88
|
+
}
|
89
|
+
|
90
|
+
# If the params contains a password parameter, delete that from the params
|
91
|
+
# and add it to the headers. This is a special case for the Alma API when
|
92
|
+
# authenticating a user.
|
93
|
+
# @see https://developers.exlibrisgroup.com/alma/apis/docs/users/UE9TVCAvYWxtYXdzL3YxL3VzZXJzL3t1c2VyX2lkfQ==/
|
94
|
+
if (password = params.delete(:password) || params.delete("password")).present?
|
95
|
+
headers["Exl-User-Pw"] = password
|
96
|
+
end
|
97
|
+
|
98
|
+
# Finally create and return the Faraday connection object.
|
56
99
|
Faraday.new(
|
57
100
|
configuration.base_url,
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
}
|
101
|
+
request: {
|
102
|
+
timeout: configuration.timeout
|
103
|
+
},
|
104
|
+
params: params,
|
105
|
+
headers: headers
|
64
106
|
) do |faraday|
|
65
107
|
faraday.response :raise_error # raise Faraday::Error on status code 4xx or 5xx
|
66
108
|
end
|
@@ -68,31 +110,32 @@ module AlmaApi
|
|
68
110
|
|
69
111
|
def perform_request
|
70
112
|
response = yield
|
71
|
-
set_remaining_api_calls(response)
|
72
113
|
parse_response_body(response.body)
|
73
114
|
rescue Faraday::Error => e
|
74
115
|
handle_faraday_error(e)
|
116
|
+
rescue StandardError
|
117
|
+
raise Error, GENERAL_ERROR_MESSAGE
|
75
118
|
end
|
76
119
|
|
77
120
|
def handle_faraday_error(error)
|
78
|
-
|
121
|
+
# The error response body is either XML, JSON or empty, so we need to parse it
|
122
|
+
error_message, error_code = parse_error_response_body(error.response_body)
|
79
123
|
|
80
|
-
|
81
|
-
|
82
|
-
raise GatewayError.new(
|
83
|
-
|
84
|
-
|
124
|
+
if error_message.present? && error_code.present?
|
125
|
+
# Raise a gateway error if the error code is one of the gateway error codes
|
126
|
+
raise GatewayError.new(error_message, error_code) if GATEWAY_ERROR_CODES.include?(error_code)
|
127
|
+
|
128
|
+
# Check the response status code
|
129
|
+
case error.response_status
|
85
130
|
when 400..499
|
86
|
-
raise LogicalError.new(
|
87
|
-
|
88
|
-
raise ServerError.new(
|
131
|
+
raise LogicalError.new(error_message, error_code)
|
132
|
+
when 500..599
|
133
|
+
raise ServerError.new(error_message, error_code)
|
89
134
|
end
|
90
135
|
end
|
91
|
-
end
|
92
136
|
|
93
|
-
|
94
|
-
|
95
|
-
@remaining_api_calls = rac.to_i if rac.present?
|
137
|
+
# If we get here, then we don't know what the error is, so we raise a generic error.
|
138
|
+
raise Error, GENERAL_ERROR_MESSAGE
|
96
139
|
end
|
97
140
|
|
98
141
|
def parse_response_body(body)
|
@@ -108,12 +151,13 @@ module AlmaApi
|
|
108
151
|
end
|
109
152
|
|
110
153
|
def parse_error_response_body(body)
|
154
|
+
error_message = nil
|
155
|
+
error_code = nil
|
156
|
+
|
111
157
|
if is_xml_response?(body)
|
112
158
|
xml = Nokogiri::XML.parse(body)
|
113
|
-
error_message = xml.at("errorMessage")&.text
|
114
|
-
error_code = xml.at("errorCode")&.text
|
115
|
-
|
116
|
-
{error_message: error_message, error_code: error_code}
|
159
|
+
error_message = xml.at("errorMessage")&.text&.presence
|
160
|
+
error_code = xml.at("errorCode")&.text&.presence&.upcase
|
117
161
|
elsif is_json_response?(body)
|
118
162
|
json = Oj.load(body)
|
119
163
|
json.extend Hashie::Extensions::DeepFind
|
@@ -123,13 +167,11 @@ module AlmaApi
|
|
123
167
|
# and sometimes the format is:
|
124
168
|
# {"web_service_result":{"errorList":{"error":{"errorMessage":"xxx","errorCode":"xxx"}}}}
|
125
169
|
# so we use a deep find to find the first occurrence of "errorMessage" and "errorCode"
|
126
|
-
error_message = json.deep_find("errorMessage")
|
127
|
-
error_code = json.deep_find("errorCode")
|
128
|
-
|
129
|
-
{error_message: error_message, error_code: error_code}
|
130
|
-
else
|
131
|
-
{error_message: nil, error_code: nil}
|
170
|
+
error_message = json.deep_find("errorMessage")&.presence
|
171
|
+
error_code = json.deep_find("errorCode")&.presence
|
132
172
|
end
|
173
|
+
|
174
|
+
[error_message, error_code]
|
133
175
|
end
|
134
176
|
|
135
177
|
def is_xml_response?(body)
|
@@ -9,19 +9,26 @@ module AlmaApi
|
|
9
9
|
cn: "https://api-cn.hosted.exlibrisgroup.cn/almaws/v1" # China
|
10
10
|
}.freeze
|
11
11
|
|
12
|
+
DEFAULT_GATEWAY = GATEWAYS[:eu].freeze
|
12
13
|
DEFAULT_FORMAT = "json".freeze
|
13
14
|
DEFAULT_LANGUAGE = "en".freeze
|
14
15
|
|
15
16
|
attr_reader :api_key,
|
16
17
|
:base_url,
|
17
18
|
:default_format,
|
18
|
-
:language
|
19
|
+
:language,
|
20
|
+
:timeout
|
19
21
|
|
20
|
-
def initialize(api_key: nil
|
22
|
+
def initialize(api_key: nil)
|
23
|
+
# Set defaults. Passing nil to the setters will set the default value.
|
21
24
|
self.api_key = api_key
|
22
|
-
self.base_url =
|
23
|
-
self.default_format =
|
24
|
-
self.language =
|
25
|
+
self.base_url = nil
|
26
|
+
self.default_format = nil
|
27
|
+
self.language = nil
|
28
|
+
self.timeout = nil
|
29
|
+
|
30
|
+
# Yield self to allow block-style configuration.
|
31
|
+
yield(self) if block_given?
|
25
32
|
end
|
26
33
|
|
27
34
|
def api_key=(value)
|
@@ -30,11 +37,13 @@ module AlmaApi
|
|
30
37
|
|
31
38
|
def base_url=(value)
|
32
39
|
if value.is_a?(Symbol)
|
33
|
-
raise ArgumentError, "Invalid gateway: #{value}" unless GATEWAYS.keys.include?(value
|
40
|
+
raise ArgumentError, "Invalid gateway: #{value}" unless GATEWAYS.keys.include?(value)
|
34
41
|
|
35
42
|
@base_url = GATEWAYS[value]
|
43
|
+
elsif value.is_a?(String)
|
44
|
+
@base_url = value.presence || DEFAULT_GATEWAY
|
36
45
|
else
|
37
|
-
@base_url =
|
46
|
+
@base_url = DEFAULT_GATEWAY
|
38
47
|
end
|
39
48
|
end
|
40
49
|
|
@@ -43,7 +52,11 @@ module AlmaApi
|
|
43
52
|
end
|
44
53
|
|
45
54
|
def language=(value)
|
46
|
-
@language = value.presence || DEFAULT_LANGUAGE
|
55
|
+
@language = value.presence&.to_s || DEFAULT_LANGUAGE
|
56
|
+
end
|
57
|
+
|
58
|
+
def timeout=(value)
|
59
|
+
@timeout = value.presence
|
47
60
|
end
|
48
61
|
|
49
62
|
end
|
data/lib/alma_api/version.rb
CHANGED
data/lib/alma_api.rb
CHANGED
@@ -15,7 +15,7 @@ module AlmaApi
|
|
15
15
|
class Error < StandardError
|
16
16
|
attr_reader :code
|
17
17
|
|
18
|
-
def initialize(message, code)
|
18
|
+
def initialize(message=nil, code=nil)
|
19
19
|
@code = code.presence || DEFAULT_ERROR_CODE
|
20
20
|
super(message.presence || DEFAULT_ERROR_MESSAGE)
|
21
21
|
end
|
@@ -25,6 +25,8 @@ module AlmaApi
|
|
25
25
|
class ServerError < Error; end
|
26
26
|
class LogicalError < Error; end
|
27
27
|
|
28
|
+
GENERAL_ERROR_MESSAGE = "Error occured while performing request. Check #cause for more details.".freeze
|
29
|
+
|
28
30
|
GATEWAY_ERROR_CODES = [
|
29
31
|
"GENERAL_ERROR",
|
30
32
|
"UNAUTHORIZED",
|
@@ -39,9 +41,10 @@ module AlmaApi
|
|
39
41
|
class << self
|
40
42
|
|
41
43
|
def configure
|
42
|
-
|
43
|
-
|
44
|
-
|
44
|
+
warn "[DEPRECATION] `AlmaApi.configure` is deprecated. Please use `AlmaApi::Client.configure` instead."
|
45
|
+
client = Client.configure
|
46
|
+
yield(client.configuration) if block_given?
|
47
|
+
client
|
45
48
|
end
|
46
49
|
|
47
50
|
def validate_format!(format)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alma_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- René Sprotte
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: '0'
|
120
120
|
requirements: []
|
121
|
-
rubygems_version: 3.4.
|
121
|
+
rubygems_version: 3.4.19
|
122
122
|
signing_key:
|
123
123
|
specification_version: 4
|
124
124
|
summary: A Ruby client library for the Ex Libris Alma REST APIs
|