umlaut 3.0.0alpha9 → 3.0.0alpha10
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.
- data/app/controllers/umlaut_controller.rb +5 -0
- data/app/models/collection.rb +90 -54
- data/app/models/referent.rb +30 -17
- data/app/models/service_wave.rb +59 -41
- data/lib/exlibris/primo/holding.rb +3 -9
- data/lib/exlibris/primo/related_link.rb +17 -0
- data/lib/exlibris/primo/searcher.rb +52 -31
- data/lib/exlibris/primo/source/distribution/nyu_aleph.rb +59 -38
- data/lib/exlibris/primo_ws.rb +1 -1
- data/lib/service.rb +1 -1
- data/lib/service_adaptors/primo_service.rb +38 -5
- data/lib/service_adaptors/primo_source.rb +2 -2
- data/lib/service_adaptors/sfx.rb +11 -0
- data/lib/term_color.rb +9 -2
- data/lib/umlaut/version.rb +1 -1
- data/lib/umlaut_configurable.rb +9 -0
- data/test/dummy/config/umlaut_services.yml +20 -0
- data/test/dummy/tmp/cache/assets/CDC/680/sprockets%2F2b68ef632d12610f3c9563168bfa7c05 +0 -0
- data/test/dummy/tmp/cache/assets/CF5/9B0/sprockets%2F7933bfe880731b396791f1682ce3f7fa +0 -0
- data/test/dummy/tmp/cache/assets/CFB/2F0/sprockets%2F62d51f0aa5cac4b1cf7091823772a604 +0 -0
- data/test/dummy/tmp/cache/assets/D4C/0A0/sprockets%2F7810d837eec3ac57ad78756af83a6a55 +0 -0
- data/test/dummy/tmp/cache/assets/D4C/E30/sprockets%2F631abf89746799b7a5b2b3b4f6294bcd +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D6C/7D0/sprockets%2F8a05d6981ec0d38c51739bef0b3a9c2b +0 -0
- data/test/dummy/tmp/cache/assets/D70/080/sprockets%2F24d3ce40ae5cc827a9183b1fb837e84e +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/E5F/960/sprockets%2Fdc007b6cad5c7ef08e33ec28cfff0ef6 +0 -0
- data/test/unit/aleph_patron_test.rb +6 -6
- data/test/unit/aleph_record_benchmarks.rb +1 -1
- data/test/unit/aleph_record_test.rb +4 -4
- data/test/unit/primo_searcher_test.rb +90 -82
- data/test/unit/primo_service_test.rb +683 -680
- data/test/unit/primo_ws_test.rb +45 -32
- metadata +135 -155
- data/lib/tasks/#Untitled-1# +0 -1843
- data/test/dummy/out +0 -5
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
module Exlibris::Primo::Source::Local
|
1
|
+
module Exlibris::Primo::Source
|
4
2
|
# == Overview
|
5
3
|
# NYUAleph is an Exlibris::Primo::Source::Aleph that expands Primo availlibrary
|
6
4
|
# elements based on of Aleph items return from the Aleph REST APIs.
|
@@ -96,35 +94,7 @@ module Exlibris::Primo::Source::Local
|
|
96
94
|
) unless @aleph_helper.nil? or @aleph_item_adm_library.nil?
|
97
95
|
@id_one = aleph_collection unless aleph_collection.nil?
|
98
96
|
# Set status and status code.
|
99
|
-
|
100
|
-
# Loop through source config for statuses
|
101
|
-
aleph_config["statuses"].each { |aleph_config_status_code, aleph_config_status|
|
102
|
-
# Set checked out as Aleph status and code
|
103
|
-
aleph_status_code = aleph_config_status_code and
|
104
|
-
aleph_status = "Due: " + @aleph_item_circulation_status and
|
105
|
-
break if (aleph_config_status_code == "checked_out" and
|
106
|
-
aleph_config_status === @aleph_item_circulation_status)
|
107
|
-
# Set circulation statuses like On Shelf, Billed as Lost, as Aleph status and code
|
108
|
-
aleph_status_code = aleph_config_status_code and
|
109
|
-
break if (aleph_config_status.instance_of?(Array) and
|
110
|
-
aleph_config_status.include?(@aleph_item_circulation_status))
|
111
|
-
} unless aleph_config.nil? or aleph_config["statuses"].nil?
|
112
|
-
if (aleph_status_code.nil?)
|
113
|
-
# Set Aleph web text as Aleph status if we haven't already gotten the Aleph status
|
114
|
-
aleph_status = @aleph_helper.item_web_text(
|
115
|
-
:adm_library_code => @aleph_item_adm_library.downcase,
|
116
|
-
:sub_library_code => @aleph_item_sub_library_code,
|
117
|
-
:item_status_code => @aleph_item_status_code,
|
118
|
-
:item_process_status_code => @aleph_item_process_status_code
|
119
|
-
) unless @aleph_helper.nil? or @aleph_item_adm_library.nil?
|
120
|
-
# Set code as "overridden_by_nyu_aleph"
|
121
|
-
aleph_status_code = "overridden_by_nyu_aleph" unless aleph_status.nil?
|
122
|
-
end
|
123
|
-
# Set status code if we have it.
|
124
|
-
@status_code = aleph_status_code unless aleph_status_code.nil?
|
125
|
-
# Set status.
|
126
|
-
@status = (aleph_status.nil?) ?
|
127
|
-
decode(:status, {:address => "statuses"}, true) : aleph_status
|
97
|
+
@status_code, @status = get_status
|
128
98
|
# Aleph doesn't work right so we have to push the patron to the Aleph holdings page!
|
129
99
|
@request_url = url if requestable?
|
130
100
|
# We're through a second time, so we should be alright to
|
@@ -171,7 +141,43 @@ module Exlibris::Primo::Source::Local
|
|
171
141
|
return source_data
|
172
142
|
end
|
173
143
|
|
174
|
-
def
|
144
|
+
def get_status
|
145
|
+
# Initialize status and status code.
|
146
|
+
aleph_status_code, aleph_status = nil, nil
|
147
|
+
# Loop through source config for statuses
|
148
|
+
aleph_config["statuses"].each { |aleph_config_status_code, aleph_config_status|
|
149
|
+
# Set checked out as Aleph status and code
|
150
|
+
aleph_status_code = aleph_config_status_code and
|
151
|
+
aleph_status = "Due: " + @aleph_item_circulation_status and
|
152
|
+
break if (aleph_config_status_code == "checked_out" and
|
153
|
+
aleph_config_status === @aleph_item_circulation_status)
|
154
|
+
# Set circulation statuses like On Shelf, Billed as Lost, as Aleph status and code
|
155
|
+
aleph_status_code = aleph_config_status_code and
|
156
|
+
break if (aleph_config_status.instance_of?(Array) and
|
157
|
+
aleph_config_status.include?(@aleph_item_circulation_status))
|
158
|
+
} unless aleph_config.nil? or aleph_config["statuses"].nil?
|
159
|
+
deferred_statuses = (aleph_config["deferred_statuses"].nil?) ? {} : aleph_config["deferred_statuses"]
|
160
|
+
if (aleph_status_code.nil? or deferred_statuses.include?(aleph_status_code))
|
161
|
+
# Set Aleph web text as Aleph status if we haven't already gotten the Aleph status
|
162
|
+
aleph_status = @aleph_helper.item_web_text(
|
163
|
+
:adm_library_code => @aleph_item_adm_library.downcase,
|
164
|
+
:sub_library_code => @aleph_item_sub_library_code,
|
165
|
+
:item_status_code => @aleph_item_status_code,
|
166
|
+
:item_process_status_code => @aleph_item_process_status_code
|
167
|
+
) unless @aleph_helper.nil? or @aleph_item_adm_library.nil?
|
168
|
+
# Set code as "overridden_by_nyu_aleph"
|
169
|
+
aleph_status_code = "overridden_by_nyu_aleph" unless aleph_status.nil?
|
170
|
+
end
|
171
|
+
# Set status code if we have it.
|
172
|
+
status_code = aleph_status_code unless aleph_status_code.nil?
|
173
|
+
# Set status.
|
174
|
+
status = (aleph_status.nil?) ?
|
175
|
+
decode(:status, {:address => "statuses"}, true) : aleph_status
|
176
|
+
return status_code, status
|
177
|
+
end
|
178
|
+
|
179
|
+
def get_coverage(aleph_record)
|
180
|
+
require 'nokogiri'
|
175
181
|
locations_seen = []
|
176
182
|
coverage = []
|
177
183
|
return coverage unless display_type.upcase == "JOURNAL"
|
@@ -180,7 +186,7 @@ module Exlibris::Primo::Source::Local
|
|
180
186
|
raise "Error getting bib from Aleph REST APIs. #{aleph_record.error}" unless aleph_record.error.nil?
|
181
187
|
# Parse and process bib XML
|
182
188
|
# First look at bib 866 and record sub_library and collection (through aleph config mappings)
|
183
|
-
Nokogiri::XML(aleph_bib).search("//datafield[@tag='866']") do |bib_866|
|
189
|
+
Nokogiri::XML(aleph_bib).search("//datafield[@tag='866']").each do |bib_866|
|
184
190
|
bib_866_l = bib_866.at(
|
185
191
|
"subfield[@code='l']"
|
186
192
|
).inner_text unless bib_866.at("subfield[@code='l']").nil?
|
@@ -203,9 +209,20 @@ module Exlibris::Primo::Source::Local
|
|
203
209
|
:sub_library_code => bib_866_sub_library_code,
|
204
210
|
:collection_code => bib_866_collection_code
|
205
211
|
) unless @aleph_helper.nil? or bib_866_adm_library.nil?
|
206
|
-
|
207
|
-
|
208
|
-
|
212
|
+
unless bib_866_collection.nil?
|
213
|
+
unless bib_866_j.nil? and bib_866_k.nil?
|
214
|
+
coverage.push(
|
215
|
+
"Available in #{bib_866_collection}: #{build_coverage_string(bib_866_j, bib_866_k)}".strip
|
216
|
+
)
|
217
|
+
else
|
218
|
+
bib_866_i = bib_866.at(
|
219
|
+
"subfield[@code='i']"
|
220
|
+
).inner_text unless bib_866.at("subfield[@code='i']").nil?
|
221
|
+
coverage.push(
|
222
|
+
"#{bib_866_i}".strip
|
223
|
+
) unless bib_866_i.nil?
|
224
|
+
end
|
225
|
+
end
|
209
226
|
locations_seen.push({
|
210
227
|
:adm_library => bib_866_adm_library,
|
211
228
|
:sub_library_code => bib_866_sub_library_code })
|
@@ -216,7 +233,7 @@ module Exlibris::Primo::Source::Local
|
|
216
233
|
# Parse and process holding XML
|
217
234
|
# Now look at holding 866 and record sub_library and collection
|
218
235
|
# to see if there is anything we missed
|
219
|
-
Nokogiri::XML(aleph_holdings).search("//holding") do |aleph_holding|
|
236
|
+
Nokogiri::XML(aleph_holdings).search("//holding").each do |aleph_holding|
|
220
237
|
holding_sub_library_code = aleph_holding.at(
|
221
238
|
"//datafield[@tag='852']/subfield[@code='b']"
|
222
239
|
).inner_text unless aleph_holding.at("//datafield[@tag='852']/subfield[@code='b']").nil?
|
@@ -230,6 +247,10 @@ module Exlibris::Primo::Source::Local
|
|
230
247
|
next if locations_seen.include?({
|
231
248
|
:adm_library => holding_adm_library,
|
232
249
|
:sub_library_code => holding_sub_library_code })
|
250
|
+
holding_852_z = aleph_holding.at(
|
251
|
+
"//datafield[@tag='852']/subfield[@code='z']"
|
252
|
+
).inner_text unless aleph_holding.at("//datafield[@tag='852']/subfield[@code='z']").nil?
|
253
|
+
coverage.push("Note: #{holding_852_z}") unless holding_852_z.nil?
|
233
254
|
holding_collection = @aleph_helper.collection_text(
|
234
255
|
:adm_library_code => holding_adm_library.downcase,
|
235
256
|
:sub_library_code => holding_sub_library_code,
|
data/lib/exlibris/primo_ws.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Module for calling Primo Web Services
|
2
2
|
# Please note the following:
|
3
3
|
# * Be sure to configure the Primo Back Office with the relevant IPs to enable interaction via the Web Services
|
4
|
-
# * This module does not parse the response but instead stores it as an
|
4
|
+
# * This module does not parse the response but instead stores it as an Nokogiri::XML::Document for the calling classes to parse
|
5
5
|
module Exlibris::PrimoWS
|
6
6
|
require 'nokogiri'
|
7
7
|
|
data/lib/service.rb
CHANGED
@@ -67,7 +67,7 @@ class Service
|
|
67
67
|
# handle both cases.
|
68
68
|
raise NameError if value.nil?
|
69
69
|
rescue NameError
|
70
|
-
raise ArgumentError.new("Missing Service configuration parameter. Service type #{self.class} (id: #{self.
|
70
|
+
raise ArgumentError.new("Missing Service configuration parameter. Service type #{self.class} (id: #{self.service_id}) requires a config parameter named '#{param}'. Check your config/umlaut_config/services.yml file.")
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
@@ -24,6 +24,7 @@
|
|
24
24
|
# * table_of_contents - parsed from links/linktotoc elements in the PNX record
|
25
25
|
# * referent_enhance - metadata parsed from the addata section of the PNX record when the record was found by Primo id
|
26
26
|
# * cover_image - parsed from first addata/lad02 element in the PNX record
|
27
|
+
# * highlighted_link - parsed from links/addlink elements in the PNX record
|
27
28
|
#
|
28
29
|
# ==Available Parameters
|
29
30
|
# Several configurations parameters are available to be set in services.yml, e.g.
|
@@ -44,6 +45,7 @@
|
|
44
45
|
# - table_of_contents
|
45
46
|
# - referent_enhance
|
46
47
|
# - cover_image
|
48
|
+
# - highlighted_link
|
47
49
|
# base_url:: _required_ host and port of Primo server; used for Primo web services, deep links and holding_search
|
48
50
|
# base_path:: *DEPRECATED* previous name of base_url
|
49
51
|
# vid:: _required_ view id for Primo deep links and holding_search.
|
@@ -127,6 +129,7 @@ class PrimoService < Service
|
|
127
129
|
@holding_attributes = Exlibris::Primo::Holding.base_attributes
|
128
130
|
@rsrc_attributes = Exlibris::Primo::Rsrc.base_attributes
|
129
131
|
@toc_attributes = Exlibris::Primo::Toc.base_attributes
|
132
|
+
@related_link_attributes = Exlibris::Primo::RelatedLink.base_attributes
|
130
133
|
# TODO: Run these decisions by Bill M. to see if they make sense.
|
131
134
|
@referent_enhancements = {
|
132
135
|
# Prefer SFX journal titles to Primo journal titles
|
@@ -143,6 +146,7 @@ class PrimoService < Service
|
|
143
146
|
}
|
144
147
|
@suppress_urls = []
|
145
148
|
@suppress_tocs = []
|
149
|
+
@suppress_related_links = []
|
146
150
|
@suppress_holdings = []
|
147
151
|
@service_types = [ "fulltext", "holding", "holding_search",
|
148
152
|
"table_of_contents", "referent_enhance", "cover_image" ] if @service_types.nil?
|
@@ -164,7 +168,7 @@ class PrimoService < Service
|
|
164
168
|
# Set holding_search_institution to vid and print warning in the logs.
|
165
169
|
if @service_types.include?("holding_search") and @holding_search_institution.nil?
|
166
170
|
@holding_search_institution = @institution
|
167
|
-
|
171
|
+
Rails.logger.warn("Required parameter 'holding_search_institution' was not set. Please set the appropriate value in services.yml. Defaulting institution to view id, #{@vid}.")
|
168
172
|
end # End backward compatibility maintenance
|
169
173
|
raise ArgumentError.new(
|
170
174
|
"Missing Service configuration parameter. Service type #{self.class} (id: #{self.id}) requires a config parameter named 'holding_search_institution'. Check your config/umlaut_config/services.yml file."
|
@@ -211,7 +215,7 @@ class PrimoService < Service
|
|
211
215
|
Rails.logger.error(
|
212
216
|
"Error in Exlibris::Primo::Searcher. "+
|
213
217
|
"Returning 0 Primo services for search #{search_params.inspect}. "+
|
214
|
-
"Exlibris::Primo::Searcher raised the following exception:\n#{e}")
|
218
|
+
"Exlibris::Primo::Searcher raised the following exception:\n#{e}\n#{e.backtrace.inspect}")
|
215
219
|
return request.dispatched(self, true)
|
216
220
|
end
|
217
221
|
# Enhance the referent with metadata from Primo Searcher if primo id is present
|
@@ -226,7 +230,9 @@ class PrimoService < Service
|
|
226
230
|
end
|
227
231
|
end
|
228
232
|
# Get cover image only if primo_id is defined
|
229
|
-
|
233
|
+
# TODO: make cover image service smarter and only
|
234
|
+
# include things that are actually URLs.
|
235
|
+
if primo_id and @service_types.include?("cover_image")
|
230
236
|
cover_image = primo_searcher.cover_image
|
231
237
|
unless cover_image.nil?
|
232
238
|
request.add_service_response(
|
@@ -344,6 +350,33 @@ class PrimoService < Service
|
|
344
350
|
)
|
345
351
|
end
|
346
352
|
end
|
353
|
+
if @service_types.include?("highlighted_link")
|
354
|
+
# Let's find any related links, and add highlighted link responses for those.
|
355
|
+
related_links_seen = [] # for de-duplicating urls from catalog.
|
356
|
+
primo_searcher.related_links.each do |related_link|
|
357
|
+
url = related_link.url # actual url
|
358
|
+
next if related_links_seen.include?(related_link.url)
|
359
|
+
# We have our own list of URLs to suppress, array of strings
|
360
|
+
# or regexps.
|
361
|
+
next if @suppress_related_links.find {|suppress| suppress === related_link.url}
|
362
|
+
# No url? Forget it.
|
363
|
+
next if related_link.url.nil?
|
364
|
+
related_links_seen.push(related_link.url)
|
365
|
+
service_data = {}
|
366
|
+
@related_link_attributes.each do |attr|
|
367
|
+
service_data[attr] = related_link.method(attr).call
|
368
|
+
end
|
369
|
+
# Default display text to URL.
|
370
|
+
service_data[:display_text] = (service_data[:display].nil?) ? service_data[:url] : service_data[:display]
|
371
|
+
# Add the response
|
372
|
+
request.add_service_response(
|
373
|
+
service_data.merge(
|
374
|
+
:service => self,
|
375
|
+
:service_type_value => 'highlighted_link'
|
376
|
+
)
|
377
|
+
)
|
378
|
+
end
|
379
|
+
end
|
347
380
|
return request.dispatched(self, true)
|
348
381
|
end
|
349
382
|
|
@@ -358,8 +391,8 @@ class PrimoService < Service
|
|
358
391
|
|
359
392
|
private
|
360
393
|
def primo_config
|
361
|
-
default_file = "#{Rails.root}/config/
|
362
|
-
config_file = @primo_config.nil? ? default_file : "#{Rails.root}/config/
|
394
|
+
default_file = "#{Rails.root}/config/primo.yml"
|
395
|
+
config_file = @primo_config.nil? ? default_file : "#{Rails.root}/config/"+ @primo_config
|
363
396
|
Rails.logger.warn("Primo config file not found: #{config_file}.") and return {} unless File.exists?(config_file)
|
364
397
|
config_hash = YAML.load_file(config_file)
|
365
398
|
return (config_hash.nil?) ? {} : config_hash
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# This mechanism allows linking to original data sources and expanded holdings information
|
4
4
|
# based on those sources and can be implemented per source.
|
5
5
|
# To create a Primo source holding, you first must create a local class representing the source in
|
6
|
-
# module Exlibris::Primo::Source
|
6
|
+
# module Exlibris::Primo::Source which extends Exlibris::Primo::Holding.
|
7
7
|
# Two methods are then available for overriding:
|
8
8
|
# :expand - expand holdings that may have been collapsed into a single availlibrary element
|
9
9
|
# in Primo based on information from the source
|
@@ -24,7 +24,7 @@
|
|
24
24
|
# ==Examples
|
25
25
|
# Two examples of customized sources are:
|
26
26
|
# * Exlibris::Primo::Source::Aleph
|
27
|
-
# * Exlibris::Primo::Source::
|
27
|
+
# * Exlibris::Primo::Source::NYUAleph
|
28
28
|
class PrimoSource < PrimoService
|
29
29
|
|
30
30
|
# Overwrites PrimoService#new.
|
data/lib/service_adaptors/sfx.rb
CHANGED
@@ -109,6 +109,17 @@ class Sfx < Service
|
|
109
109
|
transport = OpenURL::Transport.new(@base_url, nil, :open_timeout => @sfx_timeout, :read_timeout => @sfx_timeout)
|
110
110
|
|
111
111
|
context_object = request.to_context_object
|
112
|
+
|
113
|
+
## SFX HACK WORKAROUND
|
114
|
+
# SFX will parse private_data/pid/rft_dat containing ERIC, when sid/rfr_id
|
115
|
+
# is CSA. But it only expects an OpenURL 0.1 to do this. We send it a
|
116
|
+
# 1.0. To get it to recognize it anyway, we need to send it a blank
|
117
|
+
# url_ver/ctx_ver
|
118
|
+
if ( context_object.referrer.identifiers.find {|i| i.start_with? "info:sid/CSA"} &&
|
119
|
+
context_object.referent.private_data != nil)
|
120
|
+
context_object.openurl_ver = ""
|
121
|
+
end
|
122
|
+
|
112
123
|
transport.add_context_object(context_object)
|
113
124
|
transport.extra_args["sfx.response_type"]="multi_obj_xml"
|
114
125
|
|
data/lib/term_color.rb
CHANGED
@@ -3,8 +3,15 @@
|
|
3
3
|
|
4
4
|
module TermColor
|
5
5
|
mattr_accessor :colorize_logging
|
6
|
-
|
7
|
-
|
6
|
+
# is nil in dev in rails 3.2, but supposed to default to true. okay.
|
7
|
+
self.colorize_logging = if Rails.application.config.colorize_logging.nil?
|
8
|
+
# In Rails 3.2, somehow we can't count on config.colorize_logging being
|
9
|
+
# set, okay, as a default colorize in development only.
|
10
|
+
Rails.env == "development"
|
11
|
+
else
|
12
|
+
Rails.application.config.colorize_logging
|
13
|
+
end
|
14
|
+
|
8
15
|
# Embed in a String to clear all previous ANSI sequences.
|
9
16
|
CLEAR = "\e[0m"
|
10
17
|
BOLD = "\e[1m"
|
data/lib/umlaut/version.rb
CHANGED
data/lib/umlaut_configurable.rb
CHANGED
@@ -72,6 +72,9 @@ module UmlautConfigurable
|
|
72
72
|
# (see lib/referent_filters )
|
73
73
|
add_referent_filters!( :match => /.*/, :filter => DissertationCatch.new )
|
74
74
|
|
75
|
+
|
76
|
+
# Create a permalink short URL for every request?
|
77
|
+
create_permalinks true
|
75
78
|
|
76
79
|
# skip_resolve_menu can be used to control 'direct' linking, skipping
|
77
80
|
# the resolve menu to deliver a full text link or other resource
|
@@ -206,6 +209,12 @@ module UmlautConfigurable
|
|
206
209
|
# Output timing of service execution to logs
|
207
210
|
log_service_timing (Rails.env == "development")
|
208
211
|
|
212
|
+
# Execute service wave concurrently with threads?
|
213
|
+
# Set to false to execute serially one after the other with
|
214
|
+
# no threads instead. At this point, believed only useful
|
215
|
+
# for debugging and analysis.
|
216
|
+
threaded_service_wave true
|
217
|
+
|
209
218
|
|
210
219
|
#####
|
211
220
|
# Pieces of content on a Resolve page can be declaritively configured.
|
@@ -27,6 +27,26 @@ default:
|
|
27
27
|
base_url: YOUR_SFX_BASE_URL
|
28
28
|
priority: 3
|
29
29
|
|
30
|
+
Primo:
|
31
|
+
type: PrimoService
|
32
|
+
disabled: false
|
33
|
+
display_name: Primo
|
34
|
+
priority: 3
|
35
|
+
base_url: http://bobcat.library.nyu.edu
|
36
|
+
vid: NYU
|
37
|
+
institution: NYU
|
38
|
+
holding_search_institution: NYU
|
39
|
+
holding_search_text: Search for this title in Primo.
|
40
|
+
suppress_holdings: [ !ruby/regexp '/\$\$LBWEB/', !ruby/regexp '/\$\$LNWEB/', !ruby/regexp '/\$\$LTWEB/', !ruby/regexp '/\$\$LWEB/', !ruby/regexp '/\$\$1Restricted Internet Resources/' ]
|
41
|
+
ez_proxy: !ruby/regexp '/https\:\/\/ezproxy\.library\.nyu\.edu\/login\?url=/'
|
42
|
+
service_types:
|
43
|
+
- holding
|
44
|
+
- holding_search
|
45
|
+
- fulltext
|
46
|
+
- table_of_contents
|
47
|
+
- referent_enhance
|
48
|
+
- cover_image
|
49
|
+
|
30
50
|
|
31
51
|
# First half of Amazon, run in foreground, get metadata and cover images.
|
32
52
|
Amazon:
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
2
|
-
class AlephPatronTest <
|
1
|
+
require 'test_helper'
|
2
|
+
class AlephPatronTest < Test::Unit::TestCase
|
3
3
|
def setup
|
4
|
-
@primo_config = YAML.load_file("#{Rails.root}/config/
|
4
|
+
@primo_config = YAML.load_file("#{Rails.root}/config/primo.yml")
|
5
5
|
@nyu_aleph_config = @primo_config["sources"]["nyu_aleph"]
|
6
6
|
@rest_url = @nyu_aleph_config["rest_url"]
|
7
7
|
@aleph_doc_library = "NYU01"
|
@@ -17,9 +17,9 @@ class AlephPatronTest < ActiveSupport::TestCase
|
|
17
17
|
# Test exception handling for bogus response.
|
18
18
|
def test_bogus_response
|
19
19
|
patron = Exlibris::Aleph::Patron.new(@nyuidn, @bogus_url)
|
20
|
-
assert_raise(
|
21
|
-
assert_raise(
|
22
|
-
assert_raise(
|
20
|
+
assert_raise(MultiXml::ParseError) { patron.loans }
|
21
|
+
assert_raise(MultiXml::ParseError) { patron.renew_loans() }
|
22
|
+
assert_raise(MultiXml::ParseError) { patron.renew_loans(@aleph_renew_item_id) }
|
23
23
|
assert_raise(RuntimeError) { patron.place_hold(@aleph_adm_library, @aleph_doc_library, @aleph_doc_number, @aleph_item_id, {:pickup_location => @pickup_location}) }
|
24
24
|
end
|
25
25
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
-
class AlephRecordBenchMarks <
|
2
|
+
class AlephRecordBenchMarks < Test::Unit::TestCase
|
3
3
|
def setup
|
4
4
|
@primo_config = YAML.load_file("#{Rails.root}/config/umlaut_config/primo.yml")
|
5
5
|
@nyu_aleph_config = @primo_config["sources"]["nyu_aleph"]
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
2
|
-
class AlephRecordTest <
|
1
|
+
require 'test_helper'
|
2
|
+
class AlephRecordTest < Test::Unit::TestCase
|
3
3
|
def setup
|
4
|
-
@primo_config = YAML.load_file("#{Rails.root}/config/
|
4
|
+
@primo_config = YAML.load_file("#{Rails.root}/config/primo.yml")
|
5
5
|
@nyu_aleph_config = @primo_config["sources"]["nyu_aleph"]
|
6
6
|
@rest_url = @nyu_aleph_config["rest_url"]
|
7
7
|
@aleph_doc_library = "NYU01"
|
@@ -14,7 +14,7 @@ class AlephRecordTest < ActiveSupport::TestCase
|
|
14
14
|
aleph_record = Exlibris::Aleph::Record.new(@aleph_doc_library, @aleph_doc_number, @bogus_url)
|
15
15
|
assert_raise(RuntimeError) { aleph_record.bib }
|
16
16
|
assert_raise(RuntimeError) { aleph_record.holdings }
|
17
|
-
assert_raise(
|
17
|
+
assert_raise(MultiXml::ParseError) { aleph_record.items }
|
18
18
|
end
|
19
19
|
|
20
20
|
# Test search for a single Primo document.
|