alma 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +1 -1
- data/.rubocop.yml +1 -1
- data/.ruby-version +1 -1
- data/README.md +17 -0
- data/lib/alma/bib.rb +1 -1
- data/lib/alma/bib_holding.rb +1 -1
- data/lib/alma/bib_item.rb +3 -3
- data/lib/alma/config.rb +31 -0
- data/lib/alma/course.rb +1 -1
- data/lib/alma/fine.rb +1 -1
- data/lib/alma/item_request_options.rb +1 -1
- data/lib/alma/library.rb +2 -2
- data/lib/alma/loan.rb +1 -1
- data/lib/alma/loan_set.rb +7 -2
- data/lib/alma/location.rb +2 -2
- data/lib/alma/net.rb +9 -0
- data/lib/alma/request.rb +4 -2
- data/lib/alma/request_options.rb +1 -1
- data/lib/alma/user.rb +5 -5
- data/lib/alma/user_request.rb +1 -1
- data/lib/alma/version.rb +1 -1
- data/lib/alma.rb +1 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6269246a05d81573e9b8037da0f8d4149a51acdf6635951efe80b96c5d30458
|
4
|
+
data.tar.gz: 81d9cbb84cb1c7899b1b60c4b2dc4c5fbafa6f7c8d250b0a960d0fa72b245469
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5289a52394d811d85a5fac07224484e4df005e4f14e6854df5326d1bb096279e19991d2a7289f1e268a0d6e66fc76a3f56799460395da1efc1c1539e81fae358
|
7
|
+
data.tar.gz: adcb02a15f418c088f70e933979946e522ceb72417b05c428a499fc500cc793a7caca76c15a0cd02080075e881e4af68184644e17740a253ce90b9b7e7331251
|
data/.circleci/config.yml
CHANGED
data/.rubocop.yml
CHANGED
@@ -2,7 +2,7 @@ require:
|
|
2
2
|
- rubocop-rails
|
3
3
|
|
4
4
|
AllCops:
|
5
|
-
TargetRubyVersion: 3.
|
5
|
+
TargetRubyVersion: 3.3
|
6
6
|
# RuboCop has a bunch of cops enabled by default. This setting tells RuboCop
|
7
7
|
# to ignore them, so only the ones explicitly set in this file are enabled.
|
8
8
|
DisabledByDefault: true
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-3.
|
1
|
+
ruby-3.3.0
|
data/README.md
CHANGED
@@ -250,10 +250,27 @@ item.public_note
|
|
250
250
|
```
|
251
251
|
|
252
252
|
### Logging
|
253
|
+
|
254
|
+
#### Using :enable_loggable
|
253
255
|
This gem exposes a loggable interface to responses. Thus a response will respond to `loggable` and return a hash with state values that may be of use to log.
|
254
256
|
|
255
257
|
As a bonus, when we enable this feature using the `enable_loggable` configuration, error messages will contain the loggable values and be formatted as JSON.
|
256
258
|
|
259
|
+
#### Using logging configuration.
|
260
|
+
You can configure logging via the following configurations:
|
261
|
+
* `enable_log_requests`: (`true/false`)
|
262
|
+
* `log_level`
|
263
|
+
* `log_format`
|
264
|
+
* `logger`
|
265
|
+
|
266
|
+
The logger can be any logger including the Rails.logger. This logging feature is provided through [HTTParty](https://www.rubydoc.info/github/jnunemaker/httparty/HTTParty/ClassMethods#logger-instance_method).
|
267
|
+
|
268
|
+
### Debugging requests
|
269
|
+
You can configure debugging requests by setting the `enable_debug_output` configuration which is false by default. This feature is also provided through [HTTParty](https://www.rubydoc.info/github/jnunemaker/httparty/HTTParty/ClassMethods#debug_output-instance_method).
|
270
|
+
|
271
|
+
You can configure the `debug_output_stream` which is set to `$stderr` by default.
|
272
|
+
|
273
|
+
|
257
274
|
## Development
|
258
275
|
|
259
276
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/alma/bib.rb
CHANGED
data/lib/alma/bib_holding.rb
CHANGED
data/lib/alma/bib_item.rb
CHANGED
@@ -18,18 +18,18 @@ module Alma
|
|
18
18
|
holding_id = options.delete(:holding_id) || "ALL"
|
19
19
|
options.select! { |k, _| PERMITTED_ARGS.include? k }
|
20
20
|
url = "#{bibs_base_path}/#{mms_id}/holdings/#{holding_id}/items"
|
21
|
-
response =
|
21
|
+
response = Net.get(url, headers:, query: options, timeout:)
|
22
22
|
BibItemSet.new(response, options.merge({ mms_id:, holding_id: }))
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.find_by_barcode(barcode)
|
26
|
-
response =
|
26
|
+
response = Net.get(items_base_path, headers:, query: { item_barcode: barcode }, timeout:, follow_redirects: true)
|
27
27
|
new(response)
|
28
28
|
end
|
29
29
|
|
30
30
|
def self.scan(mms_id:, holding_id:, item_pid:, options: {})
|
31
31
|
url = "#{bibs_base_path}/#{mms_id}/holdings/#{holding_id}/items/#{item_pid}"
|
32
|
-
response =
|
32
|
+
response = Net.post(url, headers:, query: options)
|
33
33
|
new(response)
|
34
34
|
end
|
35
35
|
|
data/lib/alma/config.rb
CHANGED
@@ -8,11 +8,35 @@ module Alma
|
|
8
8
|
def self.configure()
|
9
9
|
self.configuration ||= Configuration.new
|
10
10
|
yield(configuration) if block_given?
|
11
|
+
on_configure
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.on_configure
|
15
|
+
_configure_logging
|
16
|
+
_configure_debugging
|
17
|
+
end
|
18
|
+
|
19
|
+
def self._configure_logging
|
20
|
+
if configuration.enable_log_requests
|
21
|
+
primo_logger = configuration.logger
|
22
|
+
log_level = Alma.configuration.log_level
|
23
|
+
log_format = Alma.configuration.log_format
|
24
|
+
Net.logger primo_logger, log_level, log_format
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self._configure_debugging
|
29
|
+
if configuration.enable_debug_output
|
30
|
+
Net.debug_output configuration.debug_output_stream
|
31
|
+
end
|
11
32
|
end
|
12
33
|
|
13
34
|
class Configuration
|
14
35
|
attr_accessor :apikey, :region, :enable_loggable
|
15
36
|
attr_accessor :timeout, :http_retries, :logger
|
37
|
+
attr_accessor :timeout, :http_retries, :logger
|
38
|
+
attr_accessor :log_level, :log_format, :debug_output_stream
|
39
|
+
attr_accessor :enable_log_requests, :enable_debug_output
|
16
40
|
|
17
41
|
def initialize
|
18
42
|
@apikey = "TEST_API_KEY"
|
@@ -20,7 +44,14 @@ module Alma
|
|
20
44
|
@enable_loggable = false
|
21
45
|
@timeout = 5
|
22
46
|
@http_retries = 3
|
47
|
+
@log_level = :info
|
48
|
+
@log_format = :logstash
|
23
49
|
@logger = Logger.new(STDOUT)
|
50
|
+
@enable_log_requests = false
|
51
|
+
@enable_debug_output = false
|
52
|
+
@log_level = :info
|
53
|
+
@log_format = :logstash
|
54
|
+
@debug_output_stream = $stderr
|
24
55
|
end
|
25
56
|
end
|
26
57
|
end
|
data/lib/alma/course.rb
CHANGED
data/lib/alma/fine.rb
CHANGED
@@ -5,7 +5,7 @@ module Alma
|
|
5
5
|
extend Alma::ApiDefaults
|
6
6
|
|
7
7
|
def self.where_user(user_id, args = {})
|
8
|
-
response =
|
8
|
+
response = Net.get("#{users_base_path}/#{user_id}/fees", query: args, headers:, timeout:)
|
9
9
|
if response.code == 200
|
10
10
|
Alma::FineSet.new(response)
|
11
11
|
else
|
@@ -8,7 +8,7 @@ module Alma
|
|
8
8
|
def self.get(mms_id, holding_id = nil, item_pid = nil, options = {})
|
9
9
|
url = "#{bibs_base_path}/#{mms_id}/holdings/#{holding_id}/items/#{item_pid}/request-options"
|
10
10
|
options.select! { |k, _| REQUEST_OPTIONS_PERMITTED_ARGS.include? k }
|
11
|
-
response =
|
11
|
+
response = Net.get(url, headers:, query: options, timeout:)
|
12
12
|
new(response)
|
13
13
|
end
|
14
14
|
|
data/lib/alma/library.rb
CHANGED
@@ -5,7 +5,7 @@ module Alma
|
|
5
5
|
extend Alma::ApiDefaults
|
6
6
|
|
7
7
|
def self.all(args: {})
|
8
|
-
response =
|
8
|
+
response = Net.get("#{configuration_base_path}/libraries", query: args, headers:, timeout:)
|
9
9
|
if response.code == 200
|
10
10
|
LibrarySet.new(response)
|
11
11
|
else
|
@@ -14,7 +14,7 @@ module Alma
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.find(library_code:, args: {})
|
17
|
-
response =
|
17
|
+
response = Net.get("#{configuration_base_path}/libraries/#{library_code}", query: args, headers:, timeout:)
|
18
18
|
if response.code == 200
|
19
19
|
AlmaRecord.new(response)
|
20
20
|
else
|
data/lib/alma/loan.rb
CHANGED
data/lib/alma/loan_set.rb
CHANGED
@@ -39,8 +39,9 @@ module Alma
|
|
39
39
|
def all
|
40
40
|
Enumerator.new do |yielder|
|
41
41
|
offset = 0
|
42
|
+
limit = 100
|
42
43
|
loop do
|
43
|
-
extra_args = @search_args.merge({ limit
|
44
|
+
extra_args = @search_args.merge({ limit:, offset: })
|
44
45
|
r = (offset == 0) ? self : single_record_class.where_user(user_id, extra_args)
|
45
46
|
|
46
47
|
unless r.empty?
|
@@ -48,7 +49,11 @@ module Alma
|
|
48
49
|
offset += 100
|
49
50
|
end
|
50
51
|
|
51
|
-
|
52
|
+
# TODO: r.count greater than "limit" doesn't make any sense unless the ALMA User/Loan API is broken.
|
53
|
+
# We should remove this qualification in October once Alma fixes the bug they introduced in their
|
54
|
+
# September release.
|
55
|
+
# @see https://developers.exlibrisgroup.com/forums/topic/limit-and-offset-not-being-applied-to-retrieve-user-loans-api/
|
56
|
+
if r.empty? || r.count < limit || r.count > limit
|
52
57
|
raise StopIteration
|
53
58
|
end
|
54
59
|
end
|
data/lib/alma/location.rb
CHANGED
@@ -5,7 +5,7 @@ module Alma
|
|
5
5
|
extend Alma::ApiDefaults
|
6
6
|
|
7
7
|
def self.all(library_code:, args: {})
|
8
|
-
response =
|
8
|
+
response = Net.get("#{configuration_base_path}/libraries/#{library_code}/locations", query: args, headers:, timeout:)
|
9
9
|
if response.code == 200
|
10
10
|
LocationSet.new(response)
|
11
11
|
else
|
@@ -14,7 +14,7 @@ module Alma
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.find(library_code:, location_code:, args: {})
|
17
|
-
response =
|
17
|
+
response = Net.get("#{configuration_base_path}/libraries/#{library_code}/locations/#{location_code}", query: args, headers:, timeout:)
|
18
18
|
if response.code == 200
|
19
19
|
AlmaRecord.new(response)
|
20
20
|
else
|
data/lib/alma/net.rb
ADDED
data/lib/alma/request.rb
CHANGED
@@ -11,7 +11,7 @@ module Alma
|
|
11
11
|
|
12
12
|
def self.submit(args)
|
13
13
|
request = new(args)
|
14
|
-
response =
|
14
|
+
response = Net.post(
|
15
15
|
"#{bibs_base_path}/#{request.mms_id}/requests",
|
16
16
|
query: { user_id: request.user_id },
|
17
17
|
headers:,
|
@@ -140,7 +140,7 @@ module Alma
|
|
140
140
|
class ItemRequest < BibRequest
|
141
141
|
def self.submit(args)
|
142
142
|
request = new(args)
|
143
|
-
response =
|
143
|
+
response = Net.post(
|
144
144
|
"#{bibs_base_path}/#{request.mms_id}/holdings/#{request.holding_id}/items/#{request.item_pid}/requests",
|
145
145
|
query: { user_id: request.user_id },
|
146
146
|
headers:,
|
@@ -157,6 +157,8 @@ module Alma
|
|
157
157
|
end
|
158
158
|
|
159
159
|
def additional_validation!(args)
|
160
|
+
return unless args.fetch(:request_type) == "DIGITIZATION"
|
161
|
+
|
160
162
|
args.fetch(:description) do
|
161
163
|
raise ArgumentError.new(
|
162
164
|
":description option must be specified when request_type is DIGITIZATION"
|
data/lib/alma/request_options.rb
CHANGED
@@ -23,7 +23,7 @@ module Alma
|
|
23
23
|
def self.get(mms_id, options = {})
|
24
24
|
url = "#{bibs_base_path}/#{mms_id}/request-options"
|
25
25
|
options.select! { |k, _| REQUEST_OPTIONS_PERMITTED_ARGS.include? k }
|
26
|
-
response =
|
26
|
+
response = Net.get(url, headers:, query: options, timeout:)
|
27
27
|
new(response)
|
28
28
|
end
|
29
29
|
|
data/lib/alma/user.rb
CHANGED
@@ -9,7 +9,7 @@ module Alma
|
|
9
9
|
|
10
10
|
def self.find(user_id, args = {})
|
11
11
|
args[:expand] ||= "fees,requests,loans"
|
12
|
-
response =
|
12
|
+
response = Net.get("#{self.users_base_path}/#{user_id}", query: args.compact_blank, headers:, timeout:)
|
13
13
|
|
14
14
|
Alma::User.new response
|
15
15
|
end
|
@@ -22,7 +22,7 @@ module Alma
|
|
22
22
|
def self.authenticate(args)
|
23
23
|
user_id = args.delete(:user_id) { raise ArgumentError }
|
24
24
|
args.merge!({ op: "auth" })
|
25
|
-
response =
|
25
|
+
response = Net.post("#{users_base_path}/#{user_id}", query: args, headers:, timeout:)
|
26
26
|
response.code == 204
|
27
27
|
end
|
28
28
|
|
@@ -80,7 +80,7 @@ module Alma
|
|
80
80
|
|
81
81
|
# Persist the user in it's current state back to Alma
|
82
82
|
def save!
|
83
|
-
response =
|
83
|
+
response = Net.put("#{users_base_path}/#{id}", timeout:, headers:, body: to_json)
|
84
84
|
get_body_from(response)
|
85
85
|
end
|
86
86
|
|
@@ -154,7 +154,7 @@ module Alma
|
|
154
154
|
loan_id = args.delete(:loan_id) { raise ArgumentError }
|
155
155
|
user_id = args.delete(:user_id) { raise ArgumentError }
|
156
156
|
params = { op: "renew" }
|
157
|
-
response =
|
157
|
+
response = Net.post("#{users_base_path}/#{user_id}/loans/#{loan_id}", query: params, headers:)
|
158
158
|
RenewalResponse.new(response)
|
159
159
|
end
|
160
160
|
|
@@ -175,7 +175,7 @@ module Alma
|
|
175
175
|
def self.send_payment(args)
|
176
176
|
user_id = args.delete(:user_id) { raise ArgumentError }
|
177
177
|
params = { op: "pay", amount: "ALL", method: "ONLINE" }
|
178
|
-
response =
|
178
|
+
response = Net.post("#{users_base_path}/#{user_id}/fees/all", query: params, headers:)
|
179
179
|
PaymentResponse.new(response)
|
180
180
|
end
|
181
181
|
|
data/lib/alma/user_request.rb
CHANGED
data/lib/alma/version.rb
CHANGED
data/lib/alma.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "alma/version"
|
4
|
+
require "alma/net"
|
4
5
|
require "alma/config"
|
5
6
|
require "alma/api_defaults"
|
6
7
|
require "alma/error"
|
@@ -34,7 +35,5 @@ require "alma/course_set"
|
|
34
35
|
require "alma/course"
|
35
36
|
|
36
37
|
module Alma
|
37
|
-
require "httparty"
|
38
|
-
|
39
38
|
ROOT = File.dirname __dir__
|
40
39
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alma
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jennifer Anton
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2024-04-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
@@ -246,6 +246,7 @@ files:
|
|
246
246
|
- lib/alma/loan_set.rb
|
247
247
|
- lib/alma/location.rb
|
248
248
|
- lib/alma/location_set.rb
|
249
|
+
- lib/alma/net.rb
|
249
250
|
- lib/alma/payment_response.rb
|
250
251
|
- lib/alma/renewal_response.rb
|
251
252
|
- lib/alma/request.rb
|