evergreen_holdings 0.4.0 → 0.5.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: e5800a7a145695ef115c882d45a1ba4264ea8f97888d7d305b7fdbbda4085b84
4
- data.tar.gz: 0eaf07e5c8bb021fd79fcee3ec8584beff6b1842d097de72b7285614e2866368
3
+ metadata.gz: b34258835d3686af2107f5ea96b6a3a95f2eca5dc4e19630fe1cc8fecce583d1
4
+ data.tar.gz: f285caa0b0a3cc693ad27a9b169c540dd3bc30f1cde438967d1b44971a6d97f2
5
5
  SHA512:
6
- metadata.gz: 14af7152bf4201748e500b1821152cc0331413e6b4e7df8ede03983b180bfbe3e32f9d368714b8bf7d5f9a015003500b32fcfce5a98e757b98c40ced3813166e
7
- data.tar.gz: e4e82b9fe288ae589cad6089d34464421a5f0ffb698abbaa1ae2d41e55a9f1b6cbd2477ba545e0fc7bbc897828f3bce8fc3262a9e79872c16d3c6e20fa23c881
6
+ metadata.gz: 79564fcba394887f6efaeb9046a269a47796d14efc6def71771c22bce4852c6eec148c3e9ef92b4fa408461cde87fa407d2e1fd27e9d9ad4a1c46ea3c575dd90
7
+ data.tar.gz: defa58f9e2349386a241c9d70bef66764d74d37bc993fd3a09202a6803300e4bf6e9b8501781862e7f8424266a243668e3086d2632054b92f3accab4cd0db7cc
@@ -1,233 +1,232 @@
1
- # frozen_string_literal: true
2
-
3
- require 'net/http'
4
- require 'json'
5
- require 'evergreen_holdings/errors'
6
- require 'nokogiri'
7
- require 'open-uri'
8
-
9
- OSRF_PATH = '/osrf-gateway-v1'
10
-
11
- module EvergreenHoldings
12
- class Connection
13
- attr_reader :org_units
14
- # Create a new object with the evergreen_domain
15
- # specified, e.g. http://libcat.linnbenton.edu
16
- #
17
- # Usage: `conn = EvergreenHoldings::Connection.new 'http://gapines.org'`
18
- def initialize(evergreen_domain)
19
- @evergreen_domain = evergreen_domain
20
- @gateway = URI evergreen_domain + OSRF_PATH
21
- @acpl_cache = {}
22
- fetch_idl_order
23
- raise CouldNotConnectToEvergreenError unless fetch_statuses
24
-
25
- fetch_ou_tree
26
- end
27
-
28
- # Fetch holdings data from the Evergreen server
29
- # Returns a Status object
30
- #
31
- # Usage: `stat = conn.get_holdings 23405`
32
- # If you just want holdings at a specific org_unit: `my_connection.get_holdings 23405, org_unit: 5`
33
- def get_holdings(tcn, options = {})
34
- if options.key?(:org_unit)
35
- if options[:descendants]
36
- params = "format=json&input_format=json&service=open-ils.cat&method=open-ils.cat.asset.copy_tree.retrieve&param=auth_token_not_needed_for_this_call&param=#{tcn}"
37
- @org_units[options[:org_unit]][:descendants]&.each do |ou|
38
- params << + "&param=#{ou}"
39
- end
40
- else
41
- params = "format=json&input_format=json&service=open-ils.cat&method=open-ils.cat.asset.copy_tree.retrieve&param=auth_token_not_needed_for_this_call&param=#{tcn}&param=#{options[:org_unit]}"
42
- end
43
- else
44
- params = "format=json&input_format=json&service=open-ils.cat&method=open-ils.cat.asset.copy_tree.global.retrieve&param=auth_token_not_needed_for_this_call&param=#{tcn}"
45
- end
46
- @gateway.query = params
47
-
48
- res = send_query
49
- return Status.new res.body, @idl_order, self if res
50
- end
51
-
52
- # Given an ID, returns a human-readable name
53
- def location_name(id)
54
- @acpl_cache.fetch(id) { |id| fetch_new_acpl(id) || id }
55
- end
56
-
57
- def status_name(id)
58
- @possible_item_statuses[id]
59
- end
60
-
61
- def ou_name(id)
62
- @org_units[id][:name]
63
- end
64
-
65
- private
66
-
67
- def add_ou_descendants(id, parent)
68
- (@org_units[parent][:descendants] ||= []) << id
69
- add_ou_descendants id, @org_units[parent][:parent] if @org_units[parent][:parent]
70
- end
71
-
72
- def take_info_from_ou_tree(o)
73
- id = o[@idl_order[:aou]['id']]
74
- @org_units[id] = {}
75
- @org_units[id][:name] = o[@idl_order[:aou]['name']]
76
- if o[@idl_order[:aou]['parent_ou']]
77
- @org_units[id][:parent] = o[@idl_order[:aou]['parent_ou']]
78
- add_ou_descendants id, o[@idl_order[:aou]['parent_ou']]
79
- end
80
- o[@idl_order[:aou]['children']].each do |p|
81
- take_info_from_ou_tree p['__p']
82
- end
83
- end
84
-
85
- # Given the ID of a shelving location, this method
86
- # finds the name of the location, caches it, and
87
- # returns it
88
- def fetch_new_acpl(id)
89
- params = "format=json&input_format=json&service=open-ils.circ&method=open-ils.circ.copy_location.retrieve&param=#{id}"
90
- @gateway.query = params
91
- res = send_query
92
- if res
93
- data = JSON.parse(res.body)['payload'][0]
94
- name = data['__p'][@idl_order[:acpl]['name']] unless data.key? 'stacktrace'
95
- @acpl_cache[id] = name
96
- return name if name
97
- end
98
- false
99
- end
100
-
101
- def send_query
102
- begin
103
- res = Net::HTTP.get_response(@gateway)
104
- rescue Errno::ECONNREFUSED, Net::ReadTimeout
105
- return nil
106
- end
107
- return res if res.is_a?(Net::HTTPSuccess)
108
-
109
- nil
110
- end
111
-
112
- def fetch_idl_order
113
- @idl_order = {}
114
-
115
- idl = Nokogiri::XML(open(@evergreen_domain + '/reports/fm_IDL.xml'))
116
-
117
- %i[acn acp acpl aou ccs circ].each do |idl_class|
118
- i = 0
119
- @idl_order[idl_class] = {}
120
- fields = idl.xpath("//idl:class[@id='#{idl_class}']/idl:fields/idl:field", 'idl' => 'http://opensrf.org/spec/IDL/base/v1')
121
- fields.each do |field|
122
- @idl_order[idl_class][field['name']] = i
123
- i += 1
124
- end
125
- end
126
- end
127
-
128
- def fetch_statuses
129
- @possible_item_statuses = []
130
- params = 'format=json&input_format=json&service=open-ils.search&method=open-ils.search.config.copy_status.retrieve.all'
131
- @gateway.query = params
132
- res = send_query
133
- if res
134
- stats = JSON.parse(res.body)['payload'][0]
135
- stats.each do |stat|
136
- @possible_item_statuses[stat['__p'][@idl_order[:ccs]['id']]] = stat['__p'][@idl_order[:ccs]['name']]
137
- end
138
- return true unless stats.empty?
139
- end
140
- false
141
- end
142
-
143
- def fetch_ou_tree
144
- @org_units = {}
145
- params = 'format=json&input_format=json&service=open-ils.actor&method=open-ils.actor.org_tree.retrieve'
146
- @gateway.query = params
147
- res = send_query
148
- if res
149
- raw_orgs = JSON.parse(res.body)['payload'][0]['__p']
150
- take_info_from_ou_tree raw_orgs
151
- return true unless @org_units.empty?
152
- end
153
- false
154
- end
155
- end
156
-
157
- # Status objects represent all the holdings attached to a specific tcn
158
- class Status
159
- attr_reader :copies, :libraries
160
- def initialize(json_data, idl_order, connection = nil)
161
- @idl_order = idl_order
162
- @connection = connection
163
- @raw_data = JSON.parse(json_data)['payload'][0]
164
- extract_copies
165
- substitute_values_for_ids unless @connection.nil?
166
- @available_copies = []
167
- @next_copy_available = 'a date'
168
- end
169
-
170
- # Determines if any copies are available for your patrons
171
- def any_copies_available?
172
- @copies.each do |copy|
173
- return true if copy.status.zero?
174
- return true if copy.status == 'Available'
175
- end
176
- false
177
- end
178
-
179
- private
180
-
181
- # Look through @raw_data and find the copies
182
- def extract_copies
183
- @copies = []
184
- @raw_data.each do |vol|
185
- next if vol['__p'][0].empty?
186
-
187
- vol['__p'][0].each do |item|
188
- item_info = {
189
- barcode: item['__p'][@idl_order[:acp]['barcode']],
190
- call_number: vol['__p'][@idl_order[:acn]['label']],
191
- location: item['__p'][@idl_order[:acp]['location']],
192
- status: item['__p'][@idl_order[:acp]['status']],
193
- owning_lib: item['__p'][@idl_order[:acp]['circ_lib']]
194
- }
195
- if item['__p'][@idl_order[:acp]['circulations']].is_a? Array
196
- begin
197
- item_info[:due_date] = item['__p'][@idl_order[:acp]['circulations']][0]['__p'][@idl_order[:circ]['due_date']]
198
- rescue StandardError
199
- end
200
- @copies.push Item.new item_info
201
- else
202
- @copies.push Item.new item_info
203
- end
204
- end
205
- end
206
- end
207
-
208
- def substitute_values_for_ids
209
- @libraries = @connection.org_units.clone
210
- @libraries.each { |_key, lib| lib[:copies] = [] }
211
- @copies.each do |copy|
212
- copy.location = @connection.location_name copy.location if copy.location.is_a? Numeric
213
- copy.status = @connection.status_name copy.status if copy.status.is_a? Numeric
214
- next unless copy.owning_lib.is_a? Numeric
215
-
216
- ou_id = copy.owning_lib
217
- copy.owning_lib = @connection.ou_name copy.owning_lib
218
- @libraries[ou_id][:copies].push copy
219
- end
220
- end
221
- end
222
-
223
- # A physical copy of an item
224
- class Item
225
- attr_accessor :location, :status, :owning_lib
226
- attr_reader :barcode, :call_number, :due_date
227
- def initialize(data = {})
228
- data.each do |k, v|
229
- instance_variable_set("@#{k}", v) unless v.nil?
230
- end
231
- end
232
- end
233
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/http'
4
+ require 'json'
5
+ require 'evergreen_holdings/errors'
6
+ require 'evergreen_holdings/idl_parser'
7
+ require 'nokogiri'
8
+ require 'open-uri'
9
+
10
+ OSRF_PATH = '/osrf-gateway-v1'
11
+
12
+ module EvergreenHoldings
13
+ class Connection
14
+ attr_reader :org_units
15
+
16
+ # Create a new object with the evergreen_domain
17
+ # specified, e.g. http://libcat.linnbenton.edu
18
+ #
19
+ # Usage: `conn = EvergreenHoldings::Connection.new 'http://gapines.org'`
20
+ def initialize(evergreen_domain)
21
+ @evergreen_domain = evergreen_domain
22
+ @gateway = URI evergreen_domain + OSRF_PATH
23
+ @acpl_cache = {}
24
+ fetch_idl_order
25
+ raise CouldNotConnectToEvergreenError unless fetch_statuses
26
+
27
+ fetch_ou_tree
28
+ end
29
+
30
+ # Fetch holdings data from the Evergreen server
31
+ # Returns a Status object
32
+ #
33
+ # Usage: `stat = conn.get_holdings 23405`
34
+ # If you just want holdings at a specific org_unit: `my_connection.get_holdings 23405, org_unit: 5`
35
+ def get_holdings(tcn, options = {})
36
+ if options.key?(:org_unit)
37
+ if options[:descendants]
38
+ params = "format=json&input_format=json&service=open-ils.cat&method=open-ils.cat.asset.copy_tree.retrieve&param=auth_token_not_needed_for_this_call&param=#{tcn}"
39
+ @org_units[options[:org_unit]][:descendants]&.each do |ou|
40
+ params << + "&param=#{ou}"
41
+ end
42
+ else
43
+ params = "format=json&input_format=json&service=open-ils.cat&method=open-ils.cat.asset.copy_tree.retrieve&param=auth_token_not_needed_for_this_call&param=#{tcn}&param=#{options[:org_unit]}"
44
+ end
45
+ else
46
+ params = "format=json&input_format=json&service=open-ils.cat&method=open-ils.cat.asset.copy_tree.global.retrieve&param=auth_token_not_needed_for_this_call&param=#{tcn}"
47
+ end
48
+ @gateway.query = params
49
+
50
+ res = send_query
51
+ return Status.new res.body, @idl_order, self if res
52
+ end
53
+
54
+ # Given an ID, returns a human-readable name
55
+ def location_name(id)
56
+ @acpl_cache.fetch(id) { |id| fetch_new_acpl(id) || id }
57
+ end
58
+
59
+ def status_name(id)
60
+ @possible_item_statuses[id]
61
+ end
62
+
63
+ def ou_name(id)
64
+ @org_units[id][:name]
65
+ end
66
+
67
+ private
68
+
69
+ def add_ou_descendants(id, parent)
70
+ (@org_units[parent][:descendants] ||= []) << id
71
+ add_ou_descendants id, @org_units[parent][:parent] if @org_units[parent][:parent]
72
+ end
73
+
74
+ def take_info_from_ou_tree(o)
75
+ id = o[@idl_order[:aou]['id']]
76
+ @org_units[id] = {}
77
+ @org_units[id][:name] = o[@idl_order[:aou]['name']]
78
+ if o[@idl_order[:aou]['parent_ou']]
79
+ @org_units[id][:parent] = o[@idl_order[:aou]['parent_ou']]
80
+ add_ou_descendants id, o[@idl_order[:aou]['parent_ou']]
81
+ end
82
+ o[@idl_order[:aou]['children']].each do |p|
83
+ take_info_from_ou_tree p['__p']
84
+ end
85
+ end
86
+
87
+ # Given the ID of a shelving location, this method
88
+ # finds the name of the location, caches it, and
89
+ # returns it
90
+ def fetch_new_acpl(id)
91
+ params = "format=json&input_format=json&service=open-ils.circ&method=open-ils.circ.copy_location.retrieve&param=#{id}"
92
+ @gateway.query = params
93
+ res = send_query
94
+ if res
95
+ data = JSON.parse(res.body)['payload'][0]
96
+ name = data['__p'][@idl_order[:acpl]['name']] unless data.key? 'stacktrace'
97
+ @acpl_cache[id] = name
98
+ return name if name
99
+ end
100
+ false
101
+ end
102
+
103
+ def send_query
104
+ begin
105
+ res = Net::HTTP.get_response(@gateway)
106
+ rescue Errno::ECONNREFUSED, Net::ReadTimeout
107
+ return nil
108
+ end
109
+ return res if res.is_a?(Net::HTTPSuccess)
110
+
111
+ nil
112
+ end
113
+
114
+ def fetch_idl_order
115
+ begin
116
+ idl = Nokogiri::XML(URI.parse("#{@evergreen_domain}/reports/fm_IDL.xml").open)
117
+ rescue Errno::ECONNREFUSED, Net::ReadTimeout, OpenURI::HTTPError
118
+ raise CouldNotConnectToEvergreenError
119
+ end
120
+
121
+ @idl_order = IDLParser.new(idl).field_order_by_class %i[acn acp acpl aou ccs circ]
122
+ end
123
+
124
+ def fetch_statuses
125
+ @possible_item_statuses = []
126
+ params = 'format=json&input_format=json&service=open-ils.search&method=open-ils.search.config.copy_status.retrieve.all'
127
+ @gateway.query = params
128
+ res = send_query
129
+ if res
130
+ stats = JSON.parse(res.body)['payload'][0]
131
+ stats.each do |stat|
132
+ @possible_item_statuses[stat['__p'][@idl_order[:ccs]['id']]] = stat['__p'][@idl_order[:ccs]['name']]
133
+ end
134
+ return true unless stats.empty?
135
+ end
136
+ false
137
+ end
138
+
139
+ def fetch_ou_tree
140
+ @org_units = {}
141
+ params = 'format=json&input_format=json&service=open-ils.actor&method=open-ils.actor.org_tree.retrieve'
142
+ @gateway.query = params
143
+ res = send_query
144
+ if res
145
+ raw_orgs = JSON.parse(res.body)['payload'][0]['__p']
146
+ take_info_from_ou_tree raw_orgs
147
+ return true unless @org_units.empty?
148
+ end
149
+ false
150
+ end
151
+ end
152
+
153
+ # Status objects represent all the holdings attached to a specific tcn
154
+ class Status
155
+ attr_reader :copies, :libraries
156
+
157
+ def initialize(json_data, idl_order, connection = nil)
158
+ @idl_order = idl_order
159
+ @connection = connection
160
+ @raw_data = JSON.parse(json_data)['payload'][0]
161
+ extract_copies
162
+ substitute_values_for_ids unless @connection.nil?
163
+ @available_copies = []
164
+ @next_copy_available = 'a date'
165
+ end
166
+
167
+ # Determines if any copies are available for your patrons
168
+ def any_copies_available?
169
+ @copies.each do |copy|
170
+ return true if copy.status.zero?
171
+ return true if copy.status == 'Available'
172
+ end
173
+ false
174
+ end
175
+
176
+ private
177
+
178
+ # Look through @raw_data and find the copies
179
+ def extract_copies
180
+ @copies = []
181
+ @raw_data.each do |vol|
182
+ next if vol['__p'][0].empty?
183
+
184
+ vol['__p'][0].each do |item|
185
+ item_info = {
186
+ barcode: item['__p'][@idl_order[:acp]['barcode']],
187
+ call_number: vol['__p'][@idl_order[:acn]['label']],
188
+ location: item['__p'][@idl_order[:acp]['location']],
189
+ status: item['__p'][@idl_order[:acp]['status']],
190
+ owning_lib: item['__p'][@idl_order[:acp]['circ_lib']]
191
+ }
192
+ if item['__p'][@idl_order[:acp]['circulations']].is_a? Array
193
+ begin
194
+ item_info[:due_date] =
195
+ item['__p'][@idl_order[:acp]['circulations']][0]['__p'][@idl_order[:circ]['due_date']]
196
+ rescue StandardError
197
+ end
198
+ @copies.push Item.new item_info
199
+ else
200
+ @copies.push Item.new item_info
201
+ end
202
+ end
203
+ end
204
+ end
205
+
206
+ def substitute_values_for_ids
207
+ @libraries = @connection.org_units.clone
208
+ @libraries.each { |_key, lib| lib[:copies] = [] }
209
+ @copies.each do |copy|
210
+ copy.location = @connection.location_name copy.location if copy.location.is_a? Numeric
211
+ copy.status = @connection.status_name copy.status if copy.status.is_a? Numeric
212
+ next unless copy.owning_lib.is_a? Numeric
213
+
214
+ ou_id = copy.owning_lib
215
+ copy.owning_lib = @connection.ou_name copy.owning_lib
216
+ @libraries[ou_id][:copies].push copy
217
+ end
218
+ end
219
+ end
220
+
221
+ # A physical copy of an item
222
+ class Item
223
+ attr_accessor :location, :status, :owning_lib
224
+ attr_reader :barcode, :call_number, :due_date
225
+
226
+ def initialize(data = {})
227
+ data.each do |k, v|
228
+ instance_variable_set("@#{k}", v) unless v.nil?
229
+ end
230
+ end
231
+ end
232
+ end
@@ -1,2 +1,4 @@
1
+ # frozen_string_literals: true
2
+
1
3
  class CouldNotConnectToEvergreenError < StandardError
2
4
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literals: true
2
+
3
+ module EvergreenHoldings
4
+ class IDLParser
5
+ def initialize(idl)
6
+ @idl = idl
7
+ end
8
+
9
+ def field_order_by_class(classes)
10
+ classes.map do |idl_class|
11
+ fields = @idl.xpath("//idl:class[@id='#{idl_class}']/idl:fields/idl:field", 'idl' => 'http://opensrf.org/spec/IDL/base/v1')
12
+ .map.with_index { |field, index| [field['name'], index] }
13
+ [idl_class, fields.to_h]
14
+ end.to_h
15
+ end
16
+ end
17
+ end
@@ -1,21 +1,21 @@
1
- require 'coveralls'
2
- Coveralls.wear!
3
- require 'minitest/autorun'
4
- require 'evergreen_holdings'
5
-
6
- class EvergreenHoldingsTest < Minitest::Test
7
- def test_connecting_to_eg_returns_a_connection_object
8
- conn = EvergreenHoldings::Connection.new 'http://gapines.org'
9
- assert_instance_of EvergreenHoldings::Connection, conn
10
- end
11
- def test_connecting_to_a_404_throws_an_error
12
- assert_raises('CouldNotConnectToEvergreenError') {
13
- EvergreenHoldings::Connection.new('http://httpstat.us/404')
14
- }
15
- end
16
- def test_connecting_to_a_non_evergreen_server_throws_an_error
17
- assert_raises('CouldNotConnectToEvergreenError') {
18
- EvergreenHoldings::Connection.new('http://libfind.linnbenton.edu')
19
- }
20
- end
21
- end
1
+ require 'minitest/autorun'
2
+ require 'evergreen_holdings'
3
+
4
+ class EvergreenHoldingsTest < Minitest::Test
5
+ def test_connecting_to_eg_returns_a_connection_object
6
+ conn = EvergreenHoldings::Connection.new 'https://gapines.org'
7
+ assert_instance_of EvergreenHoldings::Connection, conn
8
+ end
9
+
10
+ def test_connecting_to_a_404_throws_an_error
11
+ assert_raises(CouldNotConnectToEvergreenError) do
12
+ EvergreenHoldings::Connection.new('http://httpstat.us/404')
13
+ end
14
+ end
15
+
16
+ def test_connecting_to_a_non_evergreen_server_throws_an_error
17
+ assert_raises(CouldNotConnectToEvergreenError) do
18
+ EvergreenHoldings::Connection.new('http://libfind.linnbenton.edu')
19
+ end
20
+ end
21
+ end
metadata CHANGED
@@ -1,22 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evergreen_holdings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jane Sandberg
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-27 00:00:00.000000000 Z
11
+ date: 2021-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ name: nokogiri
14
15
  requirement: !ruby/object:Gem::Requirement
15
16
  requirements:
16
17
  - - "~>"
17
18
  - !ruby/object:Gem::Version
18
19
  version: '1.11'
19
- name: nokogiri
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
@@ -25,34 +25,35 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.11'
27
27
  - !ruby/object:Gem::Dependency
28
+ name: minitest
28
29
  requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
31
  - - "~>"
31
32
  - !ruby/object:Gem::Version
32
- version: 0.7.0
33
- name: coveralls
33
+ version: 5.0.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.7.0
40
+ version: 5.0.0
41
41
  - !ruby/object:Gem::Dependency
42
+ name: rake
42
43
  requirement: !ruby/object:Gem::Requirement
43
44
  requirements:
44
- - - "~>"
45
+ - - ">="
45
46
  - !ruby/object:Gem::Version
46
- version: 5.0.0
47
- name: minitest
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 5.0.0
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
+ name: rubocop
56
57
  requirement: !ruby/object:Gem::Requirement
57
58
  requirements:
58
59
  - - ">"
@@ -61,7 +62,6 @@ dependencies:
61
62
  - - "<"
62
63
  - !ruby/object:Gem::Version
63
64
  version: '2'
64
- name: rubocop
65
65
  type: :development
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
@@ -80,12 +80,13 @@ extra_rdoc_files: []
80
80
  files:
81
81
  - lib/evergreen_holdings.rb
82
82
  - lib/evergreen_holdings/errors.rb
83
+ - lib/evergreen_holdings/idl_parser.rb
83
84
  - test/evergreen_holdings_test.rb
84
85
  homepage: https://github.com/sandbergja/evergreen_holdings_gem
85
86
  licenses:
86
87
  - MIT
87
88
  metadata: {}
88
- post_install_message:
89
+ post_install_message:
89
90
  rdoc_options: []
90
91
  require_paths:
91
92
  - lib
@@ -100,8 +101,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
101
  - !ruby/object:Gem::Version
101
102
  version: '0'
102
103
  requirements: []
103
- rubygems_version: 3.0.6
104
- signing_key:
104
+ rubygems_version: 3.0.3
105
+ signing_key:
105
106
  specification_version: 4
106
107
  summary: A ruby gem for getting information about copy availability from Evergreen
107
108
  ILS