voyager_api 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.7
1
+ 0.3.8
@@ -3,7 +3,7 @@ module Voyager
3
3
  class Collection
4
4
  attr_reader :records, :xml
5
5
 
6
- DEFAULT_OPAC_URL = "http://sapote.cc.columbia.edu:7014/vxws/GetHoldingsService"
6
+ DEFAULT_OPAC_URL = "http://vetiver.cc.columbia.edu:7014/vxws/GetHoldingsService"
7
7
 
8
8
  # Invoke GetHoldingsService
9
9
  def self.new_from_opac(bibid, conn = nil, url = DEFAULT_OPAC_URL)
@@ -13,10 +13,17 @@ module Voyager
13
13
 
14
14
  # Convert raw xml from GetHoldingsService to xml record object
15
15
  def initialize(raw_xml)
16
- @xml = load_and_namespace_xml(raw_xml)
16
+ raise "Voyager::Holdings::Collection got nil/empty raw_xml" unless raw_xml
17
+
18
+ # transform raw_xml String into Nokogiri XML Document
19
+ xml = Nokogiri::XML(raw_xml)
20
+ raise "Voyager::Holdings::Collection retrieved nil/invalid XML" unless xml and xml.root
21
+
22
+ # transform raw_xml String into Nokogiri XML Document
23
+ @xml = add_xml_namespaces(xml)
17
24
  parse_xml
18
25
  end
19
-
26
+
20
27
  # Generate output hash from Record class instances
21
28
  def to_hash(options = {})
22
29
  options.reverse_merge!(:output_type => :raw, :content_type => :full, :message_type => :long_message)
@@ -30,11 +37,11 @@ module Voyager
30
37
  # if :content_type == :full
31
38
  # :message_type --> :short_message | :long_message (default)
32
39
  #
33
-
40
+
34
41
  raise ":output_type not defined" unless options[:output_type] == :raw || options[:output_type] == :condensed
35
42
  raise ":content_type not defined" unless options[:content_type] == :full || options[:content_type] == :brief
36
43
  raise ":message_type not defined" unless options[:message_type] == :long_message || options[:message_type] == :short_message
37
-
44
+
38
45
  output = {}
39
46
 
40
47
  case options[:output_type]
@@ -50,16 +57,15 @@ module Voyager
50
57
  output[:condensed_holdings_brief] = condense_holdings(holdings,options)
51
58
  end
52
59
  end
53
-
60
+
54
61
  output
55
62
 
56
63
  end
57
64
 
58
65
  private
59
66
 
60
- # Create xml record object with searchable namespaces
61
- def load_and_namespace_xml(raw_xml)
62
- xml = Nokogiri::XML(raw_xml)
67
+ # Add searchable namespaces to xml object
68
+ def add_xml_namespaces(xml)
63
69
  xml.root.add_namespace_definition("hol", "http://www.endinfosys.com/Voyager/holdings")
64
70
  xml.root.add_namespace_definition("mfhd", "http://www.endinfosys.com/Voyager/mfhd")
65
71
  xml.root.add_namespace_definition("item", "http://www.endinfosys.com/Voyager/item")
@@ -69,6 +75,12 @@ module Voyager
69
75
 
70
76
  # Collect Record class instances for each mfhd:mfhdRecord node in xml record objext
71
77
  def parse_xml
78
+ # First, look for any service messages - raise them as an error
79
+ if first_ser_message = @xml.at_xpath('//ser:messages/ser:message')
80
+ # just throw as Rails default StandardError, with details in the message
81
+ raise "#{first_ser_message.attr('errorCode')} #{first_ser_message.content}"
82
+ end
83
+
72
84
  leader = @xml.at_css("hol|bibRecord>hol|marcRecord>slim|leader").content
73
85
  @records = @xml.css("hol|mfhdCollection>mfhd|mfhdRecord").collect do |record_node|
74
86
  Record.new(record_node,leader)
@@ -80,13 +92,13 @@ module Voyager
80
92
  # -- remove document delivery options if there is an available offsite copy
81
93
  # -- remove borrowdirect and ill options if there is an available non-reserve, circulating copy
82
94
  def adjust_services(records)
83
-
95
+
84
96
  # set flags
85
97
  offsite_copy = "N"
86
98
  available_copy = "N"
87
- records.each do |record|
99
+ records.each do |record|
88
100
  offsite_copy = "Y" if record.services.include?('offsite')
89
- if record.item_status[:status] == 'available'
101
+ if record.item_status[:status] == 'available'
90
102
  available_copy = "Y" unless record.location_name.match(/Reserve|Non\-Circ/)
91
103
  end
92
104
  end
@@ -97,11 +109,11 @@ module Voyager
97
109
  record.services.delete('borrow_direct') if available_copy == "Y"
98
110
  record.services.delete('ill') if available_copy == "Y"
99
111
  end
100
-
112
+
101
113
  end
102
114
 
103
115
  def condense_holdings(holdings,options)
104
-
116
+
105
117
  # processing varies depending on complexity
106
118
  complexity = determine_complexity(holdings)
107
119
  process_holdings(holdings,complexity,options)
@@ -128,10 +140,10 @@ module Voyager
128
140
 
129
141
  def process_holdings(holdings,complexity,options)
130
142
 
131
- entries = []
143
+ entries = []
132
144
  holdings.each do |holding|
133
145
  # test for location and call number
134
- entry = entries.find { |entry| entry[:location_name] == holding[:location_name] &&
146
+ entry = entries.find { |entry| entry[:location_name] == holding[:location_name] &&
135
147
  entry[:call_number] == holding[:call_number] }
136
148
 
137
149
  unless entry
@@ -188,13 +200,13 @@ module Voyager
188
200
  :summary_holdings, :temp_locations].each { |type| add_holdings_elements(out,holding,type,options[:message_type]) }
189
201
 
190
202
  entry[:copies] << out
191
-
203
+
192
204
  end
193
205
 
194
206
  entry[:services] << holding[:services]
195
207
 
196
208
  end
197
-
209
+
198
210
  # get overall status of each location entry
199
211
  entries.each { |entry| determine_overall_status(entry) }
200
212
 
@@ -206,7 +218,7 @@ module Voyager
206
218
  end
207
219
 
208
220
  def add_holdings_elements(out,holding,type,message_type)
209
-
221
+
210
222
  case type
211
223
  when :current_issues
212
224
  out[type] = "Current Issues: " + holding[type].join('; ') unless holding[type].empty?
@@ -215,7 +227,7 @@ module Voyager
215
227
  messages = holding[type].each.collect { |info| info[:message] }
216
228
  out[type] = "Donor: " + messages.join('; ')
217
229
  codes = holding[type].each.collect { |info| info[:code] }
218
- out[:donor_info_code] = codes.join(' - ')
230
+ out[:donor_info_code] = codes.join(' - ')
219
231
  end
220
232
  when :indexes
221
233
  out[type] = "Indexes: " + holding[type].join(' ') unless holding[type].empty?
@@ -236,11 +248,11 @@ module Voyager
236
248
  out[type] = holding[type] unless holding[type].empty?
237
249
  else
238
250
  end
239
-
251
+
240
252
  end
241
253
 
242
254
  def determine_overall_status(entry)
243
-
255
+
244
256
  a = 0 # available
245
257
  s = 0 # some available
246
258
  n = 0 # not available
@@ -292,7 +304,7 @@ module Voyager
292
304
  end
293
305
 
294
306
  def output_condensed_holdings(entries,type)
295
-
307
+
296
308
  case type
297
309
  when :full
298
310
  entries
@@ -305,7 +317,7 @@ module Voyager
305
317
  :services => entry[:services] }
306
318
  end
307
319
  end
308
-
320
+
309
321
  end
310
322
 
311
323
  end
@@ -213,12 +213,14 @@ module Voyager
213
213
  tag867 = marc.css("slim|datafield[@tag='867']")
214
214
 
215
215
  return [] unless tag867
216
-
217
- supplements = tag867.collect do |field|
218
- field.at_css("slim|subfield[@code='a']")
216
+
217
+ supplements = []
218
+ tag867.each do |field|
219
+ subs = field.css("slim|subfield").collect { |subfield| subfield.content if subfield.attr("code").match(/[az]/)}
220
+ supplements << subs.join(" ").strip unless subs.empty?
219
221
  end
220
-
221
- supplements.compact.collect { |subfield| subfield.content }
222
+
223
+ supplements
222
224
 
223
225
  end
224
226
 
@@ -236,11 +238,13 @@ module Voyager
236
238
 
237
239
  return [] unless tag868
238
240
 
239
- indexes = tag868.collect do |field|
240
- field.at_css("slim|subfield[@code='a']")
241
+ indexes = []
242
+ tag868.each do |field|
243
+ subs = field.css("slim|subfield").collect { |subfield| subfield.content if subfield.attr("code").match(/[az]/)}
244
+ indexes << subs.join(" ").strip unless subs.empty?
241
245
  end
242
-
243
- indexes.compact.collect { |subfield| subfield.content }
246
+
247
+ indexes
244
248
 
245
249
  end
246
250
 
@@ -8,7 +8,7 @@ module Voyager
8
8
  @cookie_path = options[:cookie_path]
9
9
 
10
10
  set_cookie_path if @cookie_path
11
-
11
+
12
12
 
13
13
  end
14
14
 
@@ -19,11 +19,11 @@ module Voyager
19
19
  return request
20
20
  end
21
21
 
22
- def clean_session!(server = "http://sapote.cc.columbia.edu:7014")
22
+ def clean_session!(server = "http://vetiver.cc.columbia.edu:7014")
23
23
  @http_client.get_content(server + "/vxws/SessionCleanupService")
24
-
24
+
25
25
  end
26
-
26
+
27
27
  private
28
28
 
29
29
 
@@ -33,8 +33,8 @@ module Voyager
33
33
  FileUtils.mkdir_p(cookie_directory) unless File.exists?(cookie_directory)
34
34
 
35
35
  @http_client.set_cookie_store(@cookie_path)
36
-
37
-
36
+
37
+
38
38
  end
39
39
  end
40
40
  end
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ser:voyagerServiceData xmlns:ser="http://www.endinfosys.com/Voyager/serviceParameters"><ser:serviceData xsi:type="hol:holdingsCollectionType" xmlns:hol="http://www.endinfosys.com/Voyager/holdings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><hol:holdingsRecord><hol:bibRecord bibId="2120018" dpsFlag="N"><hol:marcRecord><slim:leader xmlns:slim="http://www.loc.gov/MARC21/slim">00891mas a22003011 4500</slim:leader><slim:controlfield tag="001" xmlns:slim="http://www.loc.gov/MARC21/slim">2120018</slim:controlfield><slim:controlfield tag="005" xmlns:slim="http://www.loc.gov/MARC21/slim">20100219074209.0</slim:controlfield><slim:controlfield tag="008" xmlns:slim="http://www.loc.gov/MARC21/slim">900328u1879uuuufr ar c 0 0fre d</slim:controlfield><slim:datafield ind2=" " ind1=" " tag="035" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">(OCoLC)504235520</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="035" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">(OCoLC)ocn504235520</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="035" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="9">ANF8070CU</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="035" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">(NNC)2120018</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="040" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">NNC</slim:subfield><slim:subfield code="c">NNC</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1="2" tag="111" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">Salon (Exhibition : Paris, France)</slim:subfield></slim:datafield><slim:datafield ind2="0" ind1="1" tag="245" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">Catalogue illustré ...</slim:subfield><slim:subfield code="b">[sections de peinture et de sculpture]</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="250" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">"Nouvelle édition"</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="260" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">Paris,</slim:subfield><slim:subfield code="c">1882-</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="300" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">v.</slim:subfield><slim:subfield code="b">illus., plates.</slim:subfield><slim:subfield code="c">23 cm.</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="310" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">Annual</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1="0" tag="362" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">année 1- 1879-</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="500" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">Title varies slightly.</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="500" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">1901 - under the Société des artistes français.</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="500" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">1879 is "nouvelle édition"</slim:subfield></slim:datafield><slim:datafield ind2="0" ind1=" " tag="650" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">Art</slim:subfield><slim:subfield code="v">Exhibitions.</slim:subfield></slim:datafield><slim:datafield ind2="0" ind1=" " tag="650" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">Painting</slim:subfield><slim:subfield code="v">Exhibitions.</slim:subfield></slim:datafield><slim:datafield ind2="0" ind1=" " tag="650" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">Sculpture</slim:subfield><slim:subfield code="v">Exhibitions.</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="900" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">AUTH</slim:subfield></slim:datafield><slim:datafield ind2=" " ind1=" " tag="965" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">RECON</slim:subfield></slim:datafield></hol:marcRecord><hol:bibData name="databaseCode">LOCAL</hol:bibData><hol:bibData name="databaseName">Local Database</hol:bibData><hol:bibData name="createDate">2003-05-05 00:00:00</hol:bibData><hol:bibData name="updateDate">2010-02-19 07:42:09</hol:bibData><hol:bibData name="suppressInOpac">N</hol:bibData><hol:bibData name="exportOK">N</hol:bibData><hol:bibData name="exportOKDate" xsi:nil="true"/><hol:bibData name="exportOperatorId" xsi:nil="true"/><hol:bibData name="createLocation" xsi:nil="true"/><hol:bibData name="updateLocation" xsi:nil="true"/><hol:bibData name="exportOKLocation" xsi:nil="true"/><hol:bibData name="owningLibrary" id="1">COLUMBIA</hol:bibData></hol:bibRecord><hol:mfhdCollection><mfhd:mfhdRecord bibId="2120018" mfhdId="2580600" xmlns:mfhd="http://www.endinfosys.com/Voyager/mfhd"><mfhd:marcRecord><slim:leader xmlns:slim="http://www.loc.gov/MARC21/slim">00411cy a22001214 4500</slim:leader><slim:controlfield tag="001" xmlns:slim="http://www.loc.gov/MARC21/slim">2580600</slim:controlfield><slim:controlfield tag="004" xmlns:slim="http://www.loc.gov/MARC21/slim">2120018</slim:controlfield><slim:controlfield tag="005" xmlns:slim="http://www.loc.gov/MARC21/slim">20130716143304.0</slim:controlfield><slim:controlfield tag="008" xmlns:slim="http://www.loc.gov/MARC21/slim">980417|| | | ||||| </slim:controlfield><slim:datafield ind2=" " ind1="1" tag="014" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">ANF8070CU001</slim:subfield></slim:datafield><slim:datafield ind2="1" ind1="8" tag="852" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="b">far</slim:subfield><slim:subfield code="h">N5069</slim:subfield><slim:subfield code="i">P211</slim:subfield></slim:datafield><slim:datafield ind2="1" ind1="4" tag="866" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="8">0</slim:subfield><slim:subfield code="a">année 1 (1879)-année 11 (1889), année 14 (1892)-année 15 (1893), année 18 (1896)-année 19 (1897), année 23 (1901)-année 36 (1914)</slim:subfield></slim:datafield><slim:datafield ind2="1" ind1="4" tag="867" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="8">0</slim:subfield><slim:subfield code="a">1880-1881</slim:subfield><slim:subfield code="z">bound in 1 v.</slim:subfield></slim:datafield></mfhd:marcRecord><mfhd:mfhdData name="databaseCode">LOCAL</mfhd:mfhdData><mfhd:mfhdData name="databaseName">Local Database</mfhd:mfhdData><mfhd:mfhdData name="mfhdStubFlag">0</mfhd:mfhdData><mfhd:mfhdData name="createOperatorId">load</mfhd:mfhdData><mfhd:mfhdData name="updateOperatorId">bb2316</mfhd:mfhdData><mfhd:mfhdData name="createDate">2003-05-06 00:00:00</mfhd:mfhdData><mfhd:mfhdData name="updateDate">2013-07-16 14:33:04</mfhd:mfhdData><mfhd:mfhdData name="createLocation" xsi:nil="true"/><mfhd:mfhdData name="updateLocation">CATCUL</mfhd:mfhdData><mfhd:mfhdData name="suppressInOpac">N</mfhd:mfhdData><mfhd:mfhdData name="exportOK" xsi:nil="true"/><mfhd:mfhdData name="sourceModule">C</mfhd:mfhdData><mfhd:mfhdData name="callNumber">N5069 P211</mfhd:mfhdData><mfhd:mfhdData name="locationCode" id="131">far</mfhd:mfhdData><mfhd:mfhdData name="locationName" xsi:nil="true"/><mfhd:mfhdData name="locationDisplayName">Avery Classics (Non-Circulating)</mfhd:mfhdData><mfhd:mfhdData name="locationSpineLabel">far</mfhd:mfhdData><mfhd:mfhdData name="owningLibrary" id="1">COLUMBIA</mfhd:mfhdData><mfhd:itemCollection><item:itemCount xmlns:item="http://www.endinfosys.com/Voyager/item">30</item:itemCount><item:itemRecord xmlns:item="http://www.endinfosys.com/Voyager/item"><item:itemData name="statusCode">1</item:itemData><item:itemData name="statusDate" xsi:nil="true"/><item:itemData name="holdLocation" xsi:nil="true"/><item:itemData name="requestCount">0</item:itemData><item:itemData name="patronGroupCode" xsi:nil="true"/><item:itemData name="lastName" xsi:nil="true"/><item:itemData name="firstName" xsi:nil="true"/><item:itemData name="todaysDate">2013-07-31 11:41:35</item:itemData><item:itemData name="enumeration" xsi:nil="true"/><item:itemData name="chronology" xsi:nil="true"/><item:itemData name="year" xsi:nil="true"/><item:itemData name="caption" xsi:nil="true"/><item:itemData name="text" xsi:nil="true"/><item:itemData name="copyNumber" xsi:nil="true"/><item:itemData name="callNumber"/></item:itemRecord><item:itemLocation xmlns:item="http://www.endinfosys.com/Voyager/item"><item:itemLocationData name="tmpLoc" xsi:nil="true"/><item:itemLocationData name="tempLocation">Avery Classics (Non-Circulating)</item:itemLocationData><item:itemLocationData name="itemEnum" xsi:nil="true"/><item:itemLocationData name="itemChron" xsi:nil="true"/><item:itemLocationData name="itemYear" xsi:nil="true"/><item:itemLocationData name="itemCaption" xsi:nil="true"/><item:itemLocationData name="itemFreeText" xsi:nil="true"/><item:itemLocationData name="itemCopyNumber" xsi:nil="true"/></item:itemLocation></mfhd:itemCollection></mfhd:mfhdRecord><mfhd:mfhdRecord bibId="2120018" mfhdId="13450046" xmlns:mfhd="http://www.endinfosys.com/Voyager/mfhd"><mfhd:marcRecord><slim:leader xmlns:slim="http://www.loc.gov/MARC21/slim">00210cy a22000974 4500</slim:leader><slim:controlfield tag="001" xmlns:slim="http://www.loc.gov/MARC21/slim">13450046</slim:controlfield><slim:controlfield tag="004" xmlns:slim="http://www.loc.gov/MARC21/slim">2120018</slim:controlfield><slim:controlfield tag="005" xmlns:slim="http://www.loc.gov/MARC21/slim">20130716143024.0</slim:controlfield><slim:controlfield tag="008" xmlns:slim="http://www.loc.gov/MARC21/slim">1307162p 8 2001aa 0901128</slim:controlfield><slim:datafield ind2="1" ind1="8" tag="852" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="b">far</slim:subfield><slim:subfield code="h">N5069</slim:subfield><slim:subfield code="i">P211</slim:subfield></slim:datafield><slim:datafield ind2="1" ind1="4" tag="866" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="8">0</slim:subfield><slim:subfield code="a">année 2 (1880)</slim:subfield></slim:datafield></mfhd:marcRecord><mfhd:mfhdData name="databaseCode">LOCAL</mfhd:mfhdData><mfhd:mfhdData name="databaseName">Local Database</mfhd:mfhdData><mfhd:mfhdData name="mfhdStubFlag">0</mfhd:mfhdData><mfhd:mfhdData name="createOperatorId">bb2316</mfhd:mfhdData><mfhd:mfhdData name="updateOperatorId">bb2316</mfhd:mfhdData><mfhd:mfhdData name="createDate">2013-07-16 14:05:00</mfhd:mfhdData><mfhd:mfhdData name="updateDate">2013-07-16 14:30:24</mfhd:mfhdData><mfhd:mfhdData name="createLocation">CATCUL</mfhd:mfhdData><mfhd:mfhdData name="updateLocation">CATCUL</mfhd:mfhdData><mfhd:mfhdData name="suppressInOpac">N</mfhd:mfhdData><mfhd:mfhdData name="exportOK">N</mfhd:mfhdData><mfhd:mfhdData name="sourceModule">C</mfhd:mfhdData><mfhd:mfhdData name="callNumber">N5069 P211</mfhd:mfhdData><mfhd:mfhdData name="locationCode" id="131">far</mfhd:mfhdData><mfhd:mfhdData name="locationName" xsi:nil="true"/><mfhd:mfhdData name="locationDisplayName">Avery Classics (Non-Circulating)</mfhd:mfhdData><mfhd:mfhdData name="locationSpineLabel">far</mfhd:mfhdData><mfhd:mfhdData name="owningLibrary" id="1">COLUMBIA</mfhd:mfhdData><mfhd:itemCollection><item:itemCount xmlns:item="http://www.endinfosys.com/Voyager/item">1</item:itemCount><item:itemRecord xmlns:item="http://www.endinfosys.com/Voyager/item"><item:itemData name="statusCode">1</item:itemData><item:itemData name="statusDate" xsi:nil="true"/><item:itemData name="holdLocation" xsi:nil="true"/><item:itemData name="requestCount">0</item:itemData><item:itemData name="patronGroupCode" xsi:nil="true"/><item:itemData name="lastName" xsi:nil="true"/><item:itemData name="firstName" xsi:nil="true"/><item:itemData name="todaysDate">2013-07-31 11:41:35</item:itemData><item:itemData name="enumeration" xsi:nil="true"/><item:itemData name="chronology" xsi:nil="true"/><item:itemData name="year" xsi:nil="true"/><item:itemData name="caption" xsi:nil="true"/><item:itemData name="text" xsi:nil="true"/><item:itemData name="copyNumber" xsi:nil="true"/><item:itemData name="callNumber"/></item:itemRecord><item:itemLocation xmlns:item="http://www.endinfosys.com/Voyager/item"><item:itemLocationData name="tmpLoc" xsi:nil="true"/><item:itemLocationData name="tempLocation">Avery Classics (Non-Circulating)</item:itemLocationData><item:itemLocationData name="itemEnum" xsi:nil="true"/><item:itemLocationData name="itemChron" xsi:nil="true"/><item:itemLocationData name="itemYear" xsi:nil="true"/><item:itemLocationData name="itemCaption" xsi:nil="true"/><item:itemLocationData name="itemFreeText" xsi:nil="true"/><item:itemLocationData name="itemCopyNumber" xsi:nil="true"/></item:itemLocation></mfhd:itemCollection></mfhd:mfhdRecord></hol:mfhdCollection></hol:holdingsRecord></ser:serviceData></ser:voyagerServiceData>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ser:voyagerServiceData xmlns:ser="http://www.endinfosys.com/Voyager/serviceParameters"><ser:serviceData xsi:type="hol:holdingsCollectionType" xmlns:hol="http://www.endinfosys.com/Voyager/holdings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><hol:holdingsRecord><hol:bibRecord bibId="8891001" dpsFlag="N"><hol:marcRecord><slim:leader xmlns:slim="http://www.loc.gov/MARC21/slim">00161cam a2200073 i 4500</slim:leader><slim:controlfield tag="001" xmlns:slim="http://www.loc.gov/MARC21/slim">8891001</slim:controlfield><slim:controlfield tag="005" xmlns:slim="http://www.loc.gov/MARC21/slim">20130731130319.0</slim:controlfield><slim:controlfield tag="008" xmlns:slim="http://www.loc.gov/MARC21/slim">110801b ilua 000 0 eng </slim:controlfield><slim:datafield ind2="0" ind1="0" tag="245" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">GJBtest record 5</slim:subfield></slim:datafield></hol:marcRecord><hol:bibData name="databaseCode">LOCAL</hol:bibData><hol:bibData name="databaseName">Local Database</hol:bibData><hol:bibData name="createDate">2011-08-01 15:51:13</hol:bibData><hol:bibData name="updateDate">2013-07-31 13:03:19</hol:bibData><hol:bibData name="suppressInOpac">N</hol:bibData><hol:bibData name="exportOK">N</hol:bibData><hol:bibData name="exportOKDate" xsi:nil="true"/><hol:bibData name="exportOperatorId" xsi:nil="true"/><hol:bibData name="createLocation">CATCUL</hol:bibData><hol:bibData name="updateLocation">CATCUL</hol:bibData><hol:bibData name="exportOKLocation" xsi:nil="true"/><hol:bibData name="owningLibrary" id="1">COLUMBIA</hol:bibData></hol:bibRecord><hol:mfhdCollection><mfhd:mfhdRecord bibId="8891001" mfhdId="11964457" xmlns:mfhd="http://www.endinfosys.com/Voyager/mfhd"><mfhd:marcRecord><slim:leader xmlns:slim="http://www.loc.gov/MARC21/slim">00431cx a22001334 4500</slim:leader><slim:controlfield tag="001" xmlns:slim="http://www.loc.gov/MARC21/slim">11964457</slim:controlfield><slim:controlfield tag="004" xmlns:slim="http://www.loc.gov/MARC21/slim">8891001</slim:controlfield><slim:controlfield tag="005" xmlns:slim="http://www.loc.gov/MARC21/slim">20130731130138.0</slim:controlfield><slim:controlfield tag="008" xmlns:slim="http://www.loc.gov/MARC21/slim">1108014u 8 1001uu 0901128</slim:controlfield><slim:datafield ind2=" " ind1=" " tag="843" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">Microfilm.</slim:subfield><slim:subfield code="m">1950-1963.</slim:subfield><slim:subfield code="b">Webster, N.Y. :</slim:subfield><slim:subfield code="c">Photographic Sciences Corp.,</slim:subfield><slim:subfield code="d">1974-</slim:subfield><slim:subfield code="e">2 microfilm reels ; 35 mm.</slim:subfield></slim:datafield><slim:datafield ind2="0" ind1="1" tag="852" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="b">bus</slim:subfield><slim:subfield code="h">GB500</slim:subfield><slim:subfield code="i">.G65</slim:subfield><slim:subfield code="l">Shelving title</slim:subfield></slim:datafield><slim:datafield ind2="0" ind1="4" tag="856" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="3">Part 1</slim:subfield><slim:subfield code="u">http://www.columbia.edu</slim:subfield><slim:subfield code="z">Full text</slim:subfield></slim:datafield><slim:datafield ind2="0" ind1="4" tag="867" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">Supplement</slim:subfield></slim:datafield><slim:datafield ind2="0" ind1="4" tag="868" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="a">Index</slim:subfield><slim:subfield code="z">with note.</slim:subfield></slim:datafield></mfhd:marcRecord><mfhd:mfhdData name="databaseCode">LOCAL</mfhd:mfhdData><mfhd:mfhdData name="databaseName">Local Database</mfhd:mfhdData><mfhd:mfhdData name="mfhdStubFlag">0</mfhd:mfhdData><mfhd:mfhdData name="createOperatorId">bertchume</mfhd:mfhdData><mfhd:mfhdData name="updateOperatorId">bertchume</mfhd:mfhdData><mfhd:mfhdData name="createDate">2011-08-01 15:53:08</mfhd:mfhdData><mfhd:mfhdData name="updateDate">2013-07-31 13:01:38</mfhd:mfhdData><mfhd:mfhdData name="createLocation">CATCUL</mfhd:mfhdData><mfhd:mfhdData name="updateLocation">CATCUL</mfhd:mfhdData><mfhd:mfhdData name="suppressInOpac">N</mfhd:mfhdData><mfhd:mfhdData name="exportOK">N</mfhd:mfhdData><mfhd:mfhdData name="sourceModule">C</mfhd:mfhdData><mfhd:mfhdData name="callNumber">GB500 .G65</mfhd:mfhdData><mfhd:mfhdData name="locationCode" id="48">bus</mfhd:mfhdData><mfhd:mfhdData name="locationName" xsi:nil="true"/><mfhd:mfhdData name="locationDisplayName">Business</mfhd:mfhdData><mfhd:mfhdData name="locationSpineLabel">BUSINESS</mfhd:mfhdData><mfhd:mfhdData name="owningLibrary" id="1">COLUMBIA</mfhd:mfhdData><mfhd:itemCollection><item:itemCount xmlns:item="http://www.endinfosys.com/Voyager/item">0</item:itemCount><item:itemLocation xmlns:item="http://www.endinfosys.com/Voyager/item"><item:itemLocationData name="tmpLoc" xsi:nil="true"/><item:itemLocationData name="tempLocation">Business</item:itemLocationData><item:itemLocationData name="itemEnum" xsi:nil="true"/><item:itemLocationData name="itemChron" xsi:nil="true"/><item:itemLocationData name="itemYear" xsi:nil="true"/><item:itemLocationData name="itemCaption" xsi:nil="true"/><item:itemLocationData name="itemFreeText" xsi:nil="true"/><item:itemLocationData name="itemCopyNumber" xsi:nil="true"/></item:itemLocation></mfhd:itemCollection></mfhd:mfhdRecord><mfhd:mfhdRecord bibId="8891001" mfhdId="11970625" xmlns:mfhd="http://www.endinfosys.com/Voyager/mfhd"><mfhd:marcRecord><slim:leader xmlns:slim="http://www.loc.gov/MARC21/slim">00350nx a22001334 4500</slim:leader><slim:controlfield tag="001" xmlns:slim="http://www.loc.gov/MARC21/slim">11970625</slim:controlfield><slim:controlfield tag="004" xmlns:slim="http://www.loc.gov/MARC21/slim">8891001</slim:controlfield><slim:controlfield tag="005" xmlns:slim="http://www.loc.gov/MARC21/slim">20110802122150.0</slim:controlfield><slim:controlfield tag="008" xmlns:slim="http://www.loc.gov/MARC21/slim">1108024u 8 1001uu 0901128</slim:controlfield><slim:datafield ind2=" " ind1=" " tag="852" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="b">lweb</slim:subfield><slim:subfield code="h">EBOOK</slim:subfield></slim:datafield><slim:datafield ind2="1" ind1="4" tag="856" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="h">ttp://www.google.com</slim:subfield></slim:datafield><slim:datafield ind2="0" ind1="4" tag="856" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="u">http://www.columbia.edu</slim:subfield></slim:datafield><slim:datafield ind2="0" ind1="4" tag="856" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="u">http://libraries.columbia.edu</slim:subfield><slim:subfield code="z">Library Website</slim:subfield></slim:datafield><slim:datafield ind2="0" ind1="4" tag="856" xmlns:slim="http://www.loc.gov/MARC21/slim"><slim:subfield code="3">Part 1</slim:subfield><slim:subfield code="u">http://website 1</slim:subfield></slim:datafield></mfhd:marcRecord><mfhd:mfhdData name="databaseCode">LOCAL</mfhd:mfhdData><mfhd:mfhdData name="databaseName">Local Database</mfhd:mfhdData><mfhd:mfhdData name="mfhdStubFlag">0</mfhd:mfhdData><mfhd:mfhdData name="createOperatorId">bertchume</mfhd:mfhdData><mfhd:mfhdData name="updateOperatorId" xsi:nil="true"/><mfhd:mfhdData name="createDate">2011-08-02 12:21:50</mfhd:mfhdData><mfhd:mfhdData name="updateDate" xsi:nil="true"/><mfhd:mfhdData name="createLocation">CATCUL</mfhd:mfhdData><mfhd:mfhdData name="updateLocation" xsi:nil="true"/><mfhd:mfhdData name="suppressInOpac">N</mfhd:mfhdData><mfhd:mfhdData name="exportOK">N</mfhd:mfhdData><mfhd:mfhdData name="sourceModule">C</mfhd:mfhdData><mfhd:mfhdData name="callNumber">EBOOK</mfhd:mfhdData><mfhd:mfhdData name="locationCode" id="238">lweb</mfhd:mfhdData><mfhd:mfhdData name="locationName" xsi:nil="true"/><mfhd:mfhdData name="locationDisplayName">Online</mfhd:mfhdData><mfhd:mfhdData name="locationSpineLabel">lweb</mfhd:mfhdData><mfhd:mfhdData name="owningLibrary" id="1">COLUMBIA</mfhd:mfhdData><mfhd:itemCollection><item:itemCount xmlns:item="http://www.endinfosys.com/Voyager/item">0</item:itemCount><item:itemLocation xmlns:item="http://www.endinfosys.com/Voyager/item"><item:itemLocationData name="tmpLoc" xsi:nil="true"/><item:itemLocationData name="tempLocation">Online</item:itemLocationData><item:itemLocationData name="itemEnum" xsi:nil="true"/><item:itemLocationData name="itemChron" xsi:nil="true"/><item:itemLocationData name="itemYear" xsi:nil="true"/><item:itemLocationData name="itemCaption" xsi:nil="true"/><item:itemLocationData name="itemFreeText" xsi:nil="true"/><item:itemLocationData name="itemCopyNumber" xsi:nil="true"/></item:itemLocation></mfhd:itemCollection></mfhd:mfhdRecord></hol:mfhdCollection></hol:holdingsRecord></ser:serviceData></ser:voyagerServiceData>
@@ -93,12 +93,20 @@ class TestHoldings < HoldingsTestCase
93
93
  record = load_fixture("holdings_8891001.xml").records.first
94
94
  assert_kind_of Array, record.supplements
95
95
  assert_equal 'Supplement', record.supplements[0], '867 fields'
96
+
97
+ record = load_fixture("holdings_2120018.xml").records.first
98
+ assert_kind_of Array, record.supplements
99
+ assert_equal '1880-1881 bound in 1 v.', record.supplements[0], '867 fields'
96
100
  end
97
101
 
98
102
  def test_indexes
99
103
  record = load_fixture("holdings_8891001.xml").records.first
100
104
  assert_kind_of Array, record.indexes
101
105
  assert_equal 'Index', record.indexes[0], '868 fields'
106
+
107
+ record = load_fixture("holdings_8891001_3.xml").records.first
108
+ assert_kind_of Array, record.indexes
109
+ assert_equal 'Index with note.', record.indexes[0], '868 fields'
102
110
  end
103
111
 
104
112
  def test_reproduction_note
@@ -1,4 +1,28 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestVoyagerApi < MiniTest::Unit::TestCase
4
+
5
+ def setup
6
+ @conn = Voyager::Connection.new()
7
+ @bad_bib = 1
8
+ @good_bib = 123
9
+ end
10
+
11
+ def teardown
12
+ @conn.clean_session!
13
+ end
14
+
15
+ def test_bad_bib
16
+ e = assert_raises(RuntimeError) {
17
+ Voyager::Holdings::Collection.new_from_opac(@bad_bib, @conn)
18
+ }
19
+ assert_match e.message,
20
+ /com.endinfosys.voyager.holdingsinfo.HoldingsInfo.HoldingsInfoException/
21
+ end
22
+
23
+ def good_bad_bib
24
+ result = Voyager::Holdings::Collection.new_from_opac(@good_bib, @conn)
25
+ refute_nil result
26
+ end
27
+
4
28
  end
@@ -19,10 +19,25 @@ class TestVoyagerConnection < MiniTest::Unit::TestCase
19
19
  vc = Voyager::Connection.new(:http_client => hc, :cookie_path => cookie_file)
20
20
 
21
21
  vc.request("http://www.google.com")
22
-
22
+
23
23
  assert File.exists?(cookie_dir)
24
24
  FileUtils.rm_rf(File.dirname(cookie_dir))
25
25
 
26
26
  end
27
27
 
28
+ def test_new_voyager_connection
29
+ conn = Voyager::Connection.new()
30
+ refute_nil conn
31
+ assert_kind_of Voyager::Connection, conn
32
+ end
33
+
34
+ # http://example.com will return a valid HTML document
35
+ def test_bad_xml_in_voyager_connection
36
+ e = assert_raises(RuntimeError) {
37
+ Voyager::Holdings::Collection.new_from_opac(1, nil, "http://example.com")
38
+ }
39
+ assert_match e.message, /invalid xml/i
40
+ end
41
+
42
+
28
43
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: voyager_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-07-11 00:00:00.000000000Z
13
+ date: 2013-07-31 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
17
- requirement: &2152840000 !ruby/object:Gem::Requirement
17
+ requirement: &2153298640 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2152840000
25
+ version_requirements: *2153298640
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: i18n
28
- requirement: &2152839240 !ruby/object:Gem::Requirement
28
+ requirement: &2153298120 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2152839240
36
+ version_requirements: *2153298120
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: httpclient
39
- requirement: &2152838540 !ruby/object:Gem::Requirement
39
+ requirement: &2153297480 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *2152838540
47
+ version_requirements: *2153297480
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: nokogiri
50
- requirement: &2152837800 !ruby/object:Gem::Requirement
50
+ requirement: &2153296640 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *2152837800
58
+ version_requirements: *2153296640
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: minitest
61
- requirement: &2152837080 !ruby/object:Gem::Requirement
61
+ requirement: &2153296060 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *2152837080
69
+ version_requirements: *2153296060
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: bundler
72
- requirement: &2152836140 !ruby/object:Gem::Requirement
72
+ requirement: &2153203400 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 1.0.0
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *2152836140
80
+ version_requirements: *2153203400
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: jeweler
83
- requirement: &2152835400 !ruby/object:Gem::Requirement
83
+ requirement: &2153202720 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ~>
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: 1.6.4
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *2152835400
91
+ version_requirements: *2153202720
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: rcov
94
- requirement: &2152834760 !ruby/object:Gem::Requirement
94
+ requirement: &2153201860 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *2152834760
102
+ version_requirements: *2153201860
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: guard-minitest
105
- requirement: &2152834120 !ruby/object:Gem::Requirement
105
+ requirement: &2153201120 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *2152834120
113
+ version_requirements: *2153201120
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: rb-fsevent
116
- requirement: &2152833400 !ruby/object:Gem::Requirement
116
+ requirement: &2153199980 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '0'
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *2152833400
124
+ version_requirements: *2153199980
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: mocha
127
- requirement: &2152832580 !ruby/object:Gem::Requirement
127
+ requirement: &2153199120 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ! '>='
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: '0'
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *2152832580
135
+ version_requirements: *2153199120
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: growl
138
- requirement: &2152831700 !ruby/object:Gem::Requirement
138
+ requirement: &2153198400 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ! '>='
@@ -143,7 +143,7 @@ dependencies:
143
143
  version: '0'
144
144
  type: :development
145
145
  prerelease: false
146
- version_requirements: *2152831700
146
+ version_requirements: *2153198400
147
147
  description: ! 'Middleware gem for Voyager 7 API calls, specificially holdings information '
148
148
  email: github@jamesstuart.org
149
149
  executables: []
@@ -177,6 +177,7 @@ files:
177
177
  - test/fixtures/holdings_1052500.xml
178
178
  - test/fixtures/holdings_1558940.xml
179
179
  - test/fixtures/holdings_1717646.xml
180
+ - test/fixtures/holdings_2120018.xml
180
181
  - test/fixtures/holdings_2606957.xml
181
182
  - test/fixtures/holdings_289196.xml
182
183
  - test/fixtures/holdings_299492.xml
@@ -208,6 +209,7 @@ files:
208
209
  - test/fixtures/holdings_8889994.xml
209
210
  - test/fixtures/holdings_8891001.xml
210
211
  - test/fixtures/holdings_8891001_2.xml
212
+ - test/fixtures/holdings_8891001_3.xml
211
213
  - test/fixtures/holdings_8918502.xml
212
214
  - test/fixtures/holdings_9420109.xml
213
215
  - test/fixtures/holdings_9421045.xml
@@ -238,7 +240,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
238
240
  version: '0'
239
241
  segments:
240
242
  - 0
241
- hash: 1667967424945736233
243
+ hash: 3233840626635347838
242
244
  required_rubygems_version: !ruby/object:Gem::Requirement
243
245
  none: false
244
246
  requirements: