alma 0.2.5 → 0.2.6
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 +5 -5
- data/.travis.yml +1 -1
- data/Gemfile +3 -0
- data/lib/alma.rb +2 -1
- data/lib/alma/bib_item.rb +174 -0
- data/lib/alma/bib_item_set.rb +33 -0
- data/lib/alma/{bib_items.rb → request_options.rb} +13 -15
- data/lib/alma/user.rb +7 -6
- data/lib/alma/version.rb +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9f8f97556fd38ab3e4b03c42ee739d1a8a878f997e1d2ee54fb5dd5017b3cd51
|
4
|
+
data.tar.gz: 1e5d6362f38d31fe538afe713b9b5ec87469f0364ddfde258e29a1c3b076cf88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e9e26c6789cf81b7d8390c56a42f6c422dffda52befa4b629873bfa7edc0a7974c20ed51c485f861809743e9fa9db988af4d4cbe4f63ee8b15b4371ee27f38c
|
7
|
+
data.tar.gz: ad6e0abc8e573bb1c02b34047eab1847e21ca858c6baa385b969c1faf45033151679201543f13ddc74d696035e234387e75eba7bfe4e046ff60231fc1e795b3b
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/lib/alma.rb
CHANGED
@@ -0,0 +1,174 @@
|
|
1
|
+
require 'alma/bib_item_set'
|
2
|
+
module Alma
|
3
|
+
class BibItem
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
attr_reader :item
|
7
|
+
def_delegators :item, :[], :has_key?, :keys, :to_json
|
8
|
+
|
9
|
+
PERMITTED_ARGS = [
|
10
|
+
:limit, :offset, :expand, :user_id, :current_library,
|
11
|
+
:current_location, :q, :order_by, :direction
|
12
|
+
]
|
13
|
+
|
14
|
+
def self.find(mms_id, options={})
|
15
|
+
holding_id = options.delete(:holding_id) || "ALL"
|
16
|
+
options.select! {|k,_| PERMITTED_ARGS.include? k }
|
17
|
+
url = "#{bibs_base_path}/#{mms_id}/holdings/#{holding_id}/items"
|
18
|
+
response = HTTParty.get(url, headers: headers, query: options)
|
19
|
+
BibItemSet.new(response)
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(item)
|
23
|
+
@item = item
|
24
|
+
end
|
25
|
+
|
26
|
+
def holding_data
|
27
|
+
@item.fetch("holding_data", {})
|
28
|
+
end
|
29
|
+
|
30
|
+
def item_data
|
31
|
+
@item.fetch("item_data", {})
|
32
|
+
end
|
33
|
+
|
34
|
+
def in_temp_location?
|
35
|
+
holding_data.fetch("in_temp_location", false)
|
36
|
+
end
|
37
|
+
|
38
|
+
def library
|
39
|
+
in_temp_location? ? temp_library : holding_library
|
40
|
+
end
|
41
|
+
|
42
|
+
def library_name
|
43
|
+
in_temp_location? ? temp_library_name : holding_library_name
|
44
|
+
end
|
45
|
+
|
46
|
+
def location
|
47
|
+
in_temp_location? ? temp_location : holding_location
|
48
|
+
end
|
49
|
+
|
50
|
+
def location_name
|
51
|
+
in_temp_location? ? temp_location_name : holding_location_name
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
def holding_library
|
56
|
+
item_data.dig("library", "value")
|
57
|
+
end
|
58
|
+
|
59
|
+
def holding_library_name
|
60
|
+
item_data.dig("library", "desc")
|
61
|
+
end
|
62
|
+
|
63
|
+
def holding_location
|
64
|
+
item_data.dig("location", "value")
|
65
|
+
end
|
66
|
+
|
67
|
+
def holding_location_name
|
68
|
+
item_data.dig("location", "desc")
|
69
|
+
end
|
70
|
+
|
71
|
+
def temp_library
|
72
|
+
holding_data.dig("temp_library", "value")
|
73
|
+
end
|
74
|
+
|
75
|
+
def temp_library_name
|
76
|
+
holding_data.dig("temp_library", "desc")
|
77
|
+
end
|
78
|
+
|
79
|
+
def temp_location
|
80
|
+
holding_data.dig("temp_location", "value")
|
81
|
+
end
|
82
|
+
|
83
|
+
def temp_location_name
|
84
|
+
holding_data.dig("temp_location", "desc")
|
85
|
+
end
|
86
|
+
|
87
|
+
def temp_call_number
|
88
|
+
holding_data.fetch("temp_call_number","")
|
89
|
+
end
|
90
|
+
|
91
|
+
def has_temp_call_number?
|
92
|
+
!temp_call_number.empty?
|
93
|
+
end
|
94
|
+
|
95
|
+
def call_number
|
96
|
+
if has_temp_call_number?
|
97
|
+
holding_data.fetch("temp_call_number")
|
98
|
+
elsif has_alt_call_number?
|
99
|
+
alt_call_number
|
100
|
+
else
|
101
|
+
holding_data.fetch("call_number","")
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def has_alt_call_number?
|
106
|
+
!alt_call_number.empty?
|
107
|
+
end
|
108
|
+
|
109
|
+
def alt_call_number
|
110
|
+
item_data.fetch("alternative_call_number","")
|
111
|
+
end
|
112
|
+
|
113
|
+
def has_process_type?
|
114
|
+
!process_type.empty?
|
115
|
+
end
|
116
|
+
|
117
|
+
def process_type
|
118
|
+
item_data.dig("process_type", "value") || ""
|
119
|
+
end
|
120
|
+
|
121
|
+
def missing_or_lost?
|
122
|
+
!!process_type.match(/MISSING|LOST_LOAN/)
|
123
|
+
end
|
124
|
+
|
125
|
+
def base_status
|
126
|
+
item_data.dig("base_status","value")|| ""
|
127
|
+
end
|
128
|
+
|
129
|
+
def in_place?
|
130
|
+
base_status == "1"
|
131
|
+
end
|
132
|
+
|
133
|
+
def circulation_policy
|
134
|
+
item_data.dig("policy", "desc") || ""
|
135
|
+
end
|
136
|
+
|
137
|
+
def non_circulating?
|
138
|
+
circulation_policy.include?("Non-circulating")
|
139
|
+
end
|
140
|
+
|
141
|
+
def description
|
142
|
+
item_data.fetch("description", "")
|
143
|
+
end
|
144
|
+
|
145
|
+
def physical_material_type
|
146
|
+
item_data.fetch("physical_material_type", "")
|
147
|
+
end
|
148
|
+
|
149
|
+
def public_note
|
150
|
+
item_data.fetch("public_note", "")
|
151
|
+
end
|
152
|
+
|
153
|
+
private
|
154
|
+
|
155
|
+
def self.region
|
156
|
+
Alma.configuration.region
|
157
|
+
end
|
158
|
+
|
159
|
+
def self.bibs_base_path
|
160
|
+
"#{region}/almaws/v1/bibs"
|
161
|
+
end
|
162
|
+
|
163
|
+
def self.headers
|
164
|
+
{ "Authorization": "apikey #{apikey}",
|
165
|
+
"Accept": "application/json",
|
166
|
+
"Content-Type": "application/json" }
|
167
|
+
end
|
168
|
+
|
169
|
+
def self.apikey
|
170
|
+
Alma.configuration.apikey
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Alma
|
2
|
+
class BibItemSet
|
3
|
+
extend Forwardable
|
4
|
+
|
5
|
+
# Let BibItemSet respond to the Enumerable duck type
|
6
|
+
# by delegating responsibility for #each to items
|
7
|
+
include Enumerable
|
8
|
+
attr_accessor :items
|
9
|
+
def_delegators :items, :each
|
10
|
+
|
11
|
+
def_delegators :items,:[], :[]=, :empty?, :size
|
12
|
+
|
13
|
+
attr_reader :raw_response, :total_record_count
|
14
|
+
def_delegators :raw_response, :response, :request
|
15
|
+
|
16
|
+
def initialize(response)
|
17
|
+
@raw_response = response
|
18
|
+
parsed = JSON.parse(response.body)
|
19
|
+
@total_record_count = parsed["total_record_count"]
|
20
|
+
@items = parsed.fetch("item",[]).map {|item| BibItem.new(item)}
|
21
|
+
end
|
22
|
+
|
23
|
+
def grouped_by_library
|
24
|
+
group_by(&:library)
|
25
|
+
end
|
26
|
+
|
27
|
+
def filter_missing_and_lost
|
28
|
+
clone = dup
|
29
|
+
clone.items = reject(&:missing_or_lost?)
|
30
|
+
clone
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,31 +1,28 @@
|
|
1
1
|
module Alma
|
2
|
-
class
|
2
|
+
class RequestOptions
|
3
3
|
extend Forwardable
|
4
4
|
|
5
|
-
attr_accessor :
|
6
|
-
def_delegators :items, :[], :[]=, :has_key?, :keys, :to_json
|
7
|
-
|
8
|
-
attr_reader :raw_response
|
5
|
+
attr_accessor :request_options, :raw_response
|
9
6
|
def_delegators :raw_response, :response, :request
|
10
7
|
|
8
|
+
REQUEST_OPTIONS_PERMITTED_ARGS = [:user_id]
|
9
|
+
|
11
10
|
def initialize(response)
|
12
11
|
@raw_response = response
|
13
|
-
@
|
12
|
+
@request_options = JSON.parse(response.body)["request_option"]
|
14
13
|
end
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
]
|
20
|
-
|
21
|
-
def self.find(mms_id, options={})
|
22
|
-
holding_id = options.delete(:holding_id) || "ALL"
|
23
|
-
options.select! {|k,_| PERMITTED_ARGS.include? k }
|
24
|
-
url = "#{bibs_base_path}/#{mms_id}/holdings/#{holding_id}/items"
|
15
|
+
def self.get(mms_id, options={})
|
16
|
+
url = "#{bibs_base_path}/#{mms_id}/request-options"
|
17
|
+
options.select! {|k,_| REQUEST_OPTIONS_PERMITTED_ARGS.include? k }
|
25
18
|
response = HTTParty.get(url, headers: headers, query: options)
|
26
19
|
new(response)
|
27
20
|
end
|
28
21
|
|
22
|
+
def hold_allowed?
|
23
|
+
!request_options.select {|option| option["type"]["value"] == "HOLD" }.empty?
|
24
|
+
end
|
25
|
+
|
29
26
|
private
|
30
27
|
|
31
28
|
def self.region
|
@@ -45,5 +42,6 @@ module Alma
|
|
45
42
|
def self.apikey
|
46
43
|
Alma.configuration.apikey
|
47
44
|
end
|
45
|
+
|
48
46
|
end
|
49
47
|
end
|
data/lib/alma/user.rb
CHANGED
@@ -77,9 +77,9 @@ module Alma
|
|
77
77
|
end
|
78
78
|
|
79
79
|
|
80
|
-
def loans
|
80
|
+
def loans(args={})
|
81
81
|
unless @loans && !recheck_loans?
|
82
|
-
@loans = send_loans_request
|
82
|
+
@loans = send_loans_request(args)
|
83
83
|
@recheck_loans = false
|
84
84
|
end
|
85
85
|
@loans
|
@@ -121,11 +121,12 @@ module Alma
|
|
121
121
|
|
122
122
|
private
|
123
123
|
|
124
|
-
def send_loans_request
|
125
|
-
#TODO Handle Additional Parameters
|
126
|
-
#TODO Handle Pagination
|
124
|
+
def send_loans_request(args={})
|
127
125
|
#TODO Handle looping through all results
|
128
|
-
|
126
|
+
|
127
|
+
# Always expand renewable unless you really don't want to
|
128
|
+
args["expand"] ||= "renewable"
|
129
|
+
response = HTTParty.get("#{users_base_path}/#{id}/loans", query: args, headers: headers)
|
129
130
|
Alma::LoanSet.new(get_body_from(response))
|
130
131
|
end
|
131
132
|
|
data/lib/alma/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alma
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chad Nelson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ezwadl
|
@@ -147,7 +147,8 @@ files:
|
|
147
147
|
- lib/alma/api.rb
|
148
148
|
- lib/alma/availability_response.rb
|
149
149
|
- lib/alma/bib.rb
|
150
|
-
- lib/alma/
|
150
|
+
- lib/alma/bib_item.rb
|
151
|
+
- lib/alma/bib_item_set.rb
|
151
152
|
- lib/alma/bib_set.rb
|
152
153
|
- lib/alma/config.rb
|
153
154
|
- lib/alma/error.rb
|
@@ -155,6 +156,7 @@ files:
|
|
155
156
|
- lib/alma/loan.rb
|
156
157
|
- lib/alma/loan_set.rb
|
157
158
|
- lib/alma/renewal_response.rb
|
159
|
+
- lib/alma/request_options.rb
|
158
160
|
- lib/alma/request_set.rb
|
159
161
|
- lib/alma/result_set.rb
|
160
162
|
- lib/alma/user.rb
|
@@ -182,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
182
184
|
version: '0'
|
183
185
|
requirements: []
|
184
186
|
rubyforge_project:
|
185
|
-
rubygems_version: 2.6
|
187
|
+
rubygems_version: 2.7.6
|
186
188
|
signing_key:
|
187
189
|
specification_version: 4
|
188
190
|
summary: Client for Ex Libris Alma Web Services
|