voyager_api 0.3.7 → 0.3.8

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/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: