spotlight-dor-resources 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 802c000f217f5bffac45eeb8cd3622426f952c2b
4
- data.tar.gz: b14c29105325cb00da514397812df7a5c333e14e
3
+ metadata.gz: 534c3d40d1d186aca706291383b277b9cb0e0cf5
4
+ data.tar.gz: 53c135866d04b314fea7bfb3bf9928552bd1ee85
5
5
  SHA512:
6
- metadata.gz: 1f3834e96cdbb9edf59100b3bb782af5731d51151eaa7e55363ae617267fc1a937744eb84e9299e58c2192ef2fed1403c875b8740e25dc1ad8c9dbc5eb01f06d
7
- data.tar.gz: 0f24b3fccaa36d56e215f1f8bd4582971e371f7194976691f545d449ae55b77fb457fc6b23851ce47a19e14777acfaa7a05e5024e83beaeb592c5eddd3905123
6
+ metadata.gz: b938262cb1da8a5fc3fc1e6c683ec34d502306bd3b0ccbf917d19141907203226af358649bad002e00ade0539a83793756e6e7a6f7bfd0c9fc093ed7f2b8a468
7
+ data.tar.gz: d377966f349fc1e1d627985e095729a7a76cbb1d24eb4afbd003c5375be501da5e50c72f93391e6136dddb8ac274aa657ceda00b98e3b69dae5f87c7b293cbb6
@@ -59,6 +59,9 @@ module Spotlight::Resources
59
59
  rescue RuntimeError => e
60
60
  logger.error("Error processing #{resource.druid}: #{e}")
61
61
  nil
62
+ rescue => e
63
+ logger.error("Error processing #{resource.druid}: #{e}")
64
+ raise e
62
65
  end
63
66
 
64
67
  ##
@@ -26,11 +26,16 @@ module Spotlight::Dor
26
26
 
27
27
  private
28
28
 
29
+ # Functionality grouped when code was moved to the StanfordMods gem
29
30
  concerning :StanfordMods do
30
31
  included do
31
32
  before_index :add_author_no_collector
33
+ before_index :add_box
32
34
  before_index :add_collector
35
+ before_index :add_folder
33
36
  before_index :add_genre
37
+ before_index :add_location
38
+ before_index :add_series
34
39
  end
35
40
 
36
41
  # add author_no_collector_ssim solr field containing the person authors, excluding collectors
@@ -39,92 +44,30 @@ module Spotlight::Dor
39
44
  insert_field solr_doc, 'author_no_collector', sdb.smods_rec.non_collector_person_authors, :symbol # _ssim field
40
45
  end
41
46
 
47
+ def add_box(sdb, solr_doc)
48
+ solr_doc['box_ssi'] = sdb.smods_rec.box
49
+ end
50
+
42
51
  # add collector_ssim solr field containing the collector per MODS names (via stanford-mods gem)
43
52
  def add_collector(sdb, solr_doc)
44
53
  insert_field solr_doc, 'collector', sdb.smods_rec.collectors_w_dates, :symbol # _ssim field
45
54
  end
46
55
 
56
+ def add_folder(sdb, solr_doc)
57
+ solr_doc['folder_ssi'] = sdb.smods_rec.folder
58
+ end
59
+
47
60
  # add plain MODS <genre> element data, not the SearchWorks genre values
48
61
  def add_genre(sdb, solr_doc)
49
62
  insert_field solr_doc, 'genre', sdb.smods_rec.genre.content, :symbol # this is a _ssim field
50
63
  end
51
- end
52
64
 
53
- concerning :PhysicalLocation do
54
- included do
55
- before_index :add_box
56
- before_index :add_folder
57
- before_index :add_location
58
- before_index :add_series
59
- end
60
-
61
- # add the box number to solr_doc as box_ssi field (note: single valued!)
62
- # data in location/physicalLocation or in relatedItem/location/physicalLocation
63
- # TODO: push this up to stanford-mods gem? or should it be hierarchical series/box/folder?
64
- def add_box(sdb, solr_doc)
65
- # see spec for data from actual collections
66
- # _location.physicalLocation should find top level and relatedItem
67
- box_num = sdb.smods_rec._location.physicalLocation.map do |node|
68
- val = node.text
69
- # note that this will also find Flatbox or Flat-box
70
- match_data = val.match(/Box ?:? ?([^,|(Folder)]+)/i)
71
- match_data[1].strip if match_data.present?
72
- end.compact
73
-
74
- solr_doc['box_ssi'] = box_num.first
75
- end
76
-
77
- # add the folder number to solr_doc as folder_ssi field (note: single valued!)
78
- # data in location/physicalLocation or in relatedItem/location/physicalLocation
79
- # TODO: push this up to stanford-mods gem? or should it be hierarchical series/box/folder?
80
- def add_folder(sdb, solr_doc)
81
- # see spec for data from actual collections
82
- # _location.physicalLocation should find top level and relatedItem
83
- folder_num = sdb.smods_rec._location.physicalLocation.map do |node|
84
- val = node.text
85
-
86
- match_data = if val =~ /\|/
87
- # we assume the data is pipe-delimited, and may contain commas within values
88
- val.match(/Folder ?:? ?([^|]+)/)
89
- else
90
- # the data should be comma-delimited, and may not contain commas within values
91
- val.match(/Folder ?:? ?([^,]+)/)
92
- end
93
-
94
- match_data[1].strip if match_data.present?
95
- end.compact
96
-
97
- solr_doc['folder_ssi'] = folder_num.first
98
- end
99
-
100
- # add the physicalLocation as location_ssi field (note: single valued!)
101
- # but only if it has series, box or folder data
102
- # data in location/physicalLocation or in relatedItem/location/physicalLocation
103
- # TODO: push this up to stanford-mods gem? or should it be hierarchical series/box/folder?
104
65
  def add_location(sdb, solr_doc)
105
- # see spec for data from actual collections
106
- # _location.physicalLocation should find top level and relatedItem
107
- loc = sdb.smods_rec._location.physicalLocation.map do |node|
108
- node.text if node.text.match(/.*(Series)|(Accession)|(Folder)|(Box).*/i)
109
- end.compact
110
-
111
- solr_doc['location_ssi'] = loc.first
66
+ solr_doc['location_ssi'] = sdb.smods_rec.location
112
67
  end
113
68
 
114
- # add the series/accession 'number' to solr_doc as series_ssi field (note: single valued!)
115
- # data in location/physicalLocation or in relatedItem/location/physicalLocation
116
- # TODO: push this up to stanford-mods gem? or should it be hierarchical series/box/folder?
117
69
  def add_series(sdb, solr_doc)
118
- # see spec for data from actual collections
119
- # _location.physicalLocation should find top level and relatedItem
120
- series_num = sdb.smods_rec._location.physicalLocation.map do |node|
121
- val = node.text
122
- # feigenbaum uses 'Accession'
123
- match_data = val.match(/(?:(?:Series)|(?:Accession)):? ([^,|]+)/i)
124
- match_data[1].strip if match_data.present?
125
- end.compact
126
-
127
- solr_doc['series_ssi'] = series_num.first
70
+ solr_doc['series_ssi'] = sdb.smods_rec.series
128
71
  end
129
72
  end
130
73
 
@@ -2,7 +2,7 @@ module Spotlight
2
2
  module Dor
3
3
  # :nodoc:
4
4
  module Resources
5
- VERSION = '0.3.0'
5
+ VERSION = '0.3.1'
6
6
  end
7
7
  end
8
8
  end
@@ -7,37 +7,6 @@ describe Spotlight::Dor::Indexer do
7
7
  let(:r) { Harvestdor::Indexer::Resource.new(double, fake_druid) }
8
8
  let(:sdb) { GDor::Indexer::SolrDocBuilder.new(r, Logger.new(StringIO.new)) }
9
9
  let(:solr_doc) { {} }
10
- let(:mods_loc_phys_loc) do
11
- Nokogiri::XML <<-EOF
12
- <mods xmlns="#{Mods::MODS_NS}">
13
- <location>
14
- <physicalLocation>#{example}</physicalLocation>
15
- </location>
16
- </mods>
17
- EOF
18
- end
19
- let(:mods_rel_item_loc_phys_loc) do
20
- Nokogiri::XML <<-EOF
21
- <mods xmlns="#{Mods::MODS_NS}">
22
- <relatedItem>
23
- <location>
24
- <physicalLocation>#{example}</physicalLocation>
25
- </location>
26
- </relatedItem>
27
- </mods>
28
- EOF
29
- end
30
-
31
- let(:mods_loc_multiple_phys_loc) do
32
- Nokogiri::XML <<-EOF
33
- <mods xmlns="#{Mods::MODS_NS}">
34
- <location>
35
- <physicalLocation>Irrelevant Data</physicalLocation>
36
- <physicalLocation>#{example}</physicalLocation>
37
- </location>
38
- </mods>
39
- EOF
40
- end
41
10
 
42
11
  before do
43
12
  # reduce log noise
@@ -185,6 +154,41 @@ describe Spotlight::Dor::Indexer do
185
154
  end
186
155
  end
187
156
 
157
+ describe '#add_box' do
158
+ before do
159
+ allow(r).to receive(:mods).and_return(mods)
160
+ subject.send(:add_box, sdb, solr_doc)
161
+ end
162
+ context 'with a record without a box' do
163
+ let(:mods) do
164
+ Nokogiri::XML <<-EOF
165
+ <mods xmlns="#{Mods::MODS_NS}">
166
+ </mods>
167
+ EOF
168
+ end
169
+
170
+ it 'is blank' do
171
+ expect(solr_doc['box_ssi']).to be_blank
172
+ end
173
+ end
174
+ context 'with a record with a box' do
175
+ let(:mods) do
176
+ # e.g. from https://purl.stanford.edu/vw282gv1740
177
+ Nokogiri::XML <<-EOF
178
+ <mods xmlns="#{Mods::MODS_NS}">
179
+ <location>
180
+ <physicalLocation>Series 1, Box 10, Folder 8</physicalLocation>
181
+ </location>
182
+ </mods>
183
+ EOF
184
+ end
185
+
186
+ it 'extracts the box' do
187
+ expect(solr_doc['box_ssi']).to eq('10')
188
+ end
189
+ end
190
+ end # add_box
191
+
188
192
  describe '#add_collector' do
189
193
  before do
190
194
  allow(r).to receive(:mods).and_return(mods)
@@ -212,6 +216,41 @@ describe Spotlight::Dor::Indexer do
212
216
  end
213
217
  end
214
218
 
219
+ describe '#add_folder' do
220
+ before do
221
+ allow(r).to receive(:mods).and_return(mods)
222
+ subject.send(:add_folder, sdb, solr_doc)
223
+ end
224
+ context 'with a record without a folder' do
225
+ let(:mods) do
226
+ Nokogiri::XML <<-EOF
227
+ <mods xmlns="#{Mods::MODS_NS}">
228
+ </mods>
229
+ EOF
230
+ end
231
+
232
+ it 'is blank' do
233
+ expect(solr_doc['folder_ssi']).to be_blank
234
+ end
235
+ end
236
+ context 'with a record with a folder' do
237
+ let(:mods) do
238
+ # e.g. from https://purl.stanford.edu/vw282gv1740
239
+ Nokogiri::XML <<-EOF
240
+ <mods xmlns="#{Mods::MODS_NS}">
241
+ <location>
242
+ <physicalLocation>Series 1, Box 10, Folder 8</physicalLocation>
243
+ </location>
244
+ </mods>
245
+ EOF
246
+ end
247
+
248
+ it 'extracts the folder' do
249
+ expect(solr_doc['folder_ssi']).to eq('8')
250
+ end
251
+ end
252
+ end # add_folder
253
+
215
254
  describe '#add_genre' do
216
255
  before do
217
256
  allow(r).to receive(:mods).and_return(mods)
@@ -246,276 +285,94 @@ describe Spotlight::Dor::Indexer do
246
285
  end
247
286
  end
248
287
  end
249
- end
250
288
 
251
- describe '#add_series' do
252
- # example string as key, expected series name as value
253
- {
254
- # feigenbaum
255
- 'Call Number: SC0340, Accession 2005-101': '2005-101',
256
- 'Call Number: SC0340, Accession 2005-101, Box : 39, Folder: 9': '2005-101',
257
- 'Call Number: SC0340, Accession 2005-101, Box: 2, Folder: 3': '2005-101',
258
- 'Call Number: SC0340, Accession: 1986-052': '1986-052',
259
- 'Call Number: SC0340, Accession: 1986-052, Box 3 Folder 38': '1986-052',
260
- 'Call Number: SC0340, Accession: 2005-101, Box : 50, Folder: 31': '2005-101',
261
- 'Call Number: SC0340, Accession: 1986-052, Box: 5, Folder: 1': '1986-052',
262
- 'SC0340, Accession 1986-052': '1986-052',
263
- 'SC0340, Accession 2005-101, Box 18': '2005-101',
264
- 'Call Number: SC0340, Accession 2005-101, Box: 42A, Folder: 24': '2005-101',
265
- 'Call Number: SC0340, Accession: 1986-052, Box: 42A, Folder: 59': '1986-052',
266
- 'SC0340': nil,
267
- 'SC0340, 1986-052, Box 18': nil,
268
- 'Stanford University. Libraries. Department of Special Collections and University Archives': nil,
269
- # shpc (actually in <relatedItem><location><physicalLocation>)
270
- 'Series Biographical Photographs | Box 42 | Folder Abbot, Nathan': 'Biographical Photographs',
271
- 'Series General Photographs | Box 42 | Folder Administration building--Outer Quad': 'General Photographs',
272
- # menuez
273
- 'MSS Photo 451, Series 1, Box 32, Folder 11, Sleeve 32-11-2, Frame B32-F11-S2-6': '1',
274
- 'Series 1, Box 10, Folder 8': '1',
275
- # fuller
276
- 'Collection: M1090 , Series: 4 , Box: 5 , Folder: 10': '4',
277
- # hummel (actually in <relatedItem><location><physicalLocation>)
278
- 'Box 42 | Folder 3': nil,
279
- 'Flat-box 228 | Volume 1': nil
280
- }.each do |example, expected|
281
- describe "for example '#{example}'" do
282
- let(:example) { example }
283
- context 'in /location/physicalLocation' do
284
- before do
285
- allow(r).to receive(:mods).and_return(mods_loc_phys_loc)
286
- subject.send(:add_series, sdb, solr_doc)
287
- end
288
- it "has the expected series name '#{expected}'" do
289
- expect(solr_doc['series_ssi']).to eq expected
290
- end
291
- end
292
- context 'in /relatedItem/location/physicalLocation' do
293
- before do
294
- allow(r).to receive(:mods).and_return(mods_rel_item_loc_phys_loc)
295
- subject.send(:add_series, sdb, solr_doc)
296
- end
297
- it "has the expected series name '#{expected}'" do
298
- expect(solr_doc['series_ssi']).to eq expected
299
- end
300
- end
301
- context 'with multiple physicalLocation elements' do
302
- before do
303
- allow(r).to receive(:mods).and_return(mods_loc_multiple_phys_loc)
304
- subject.send(:add_series, sdb, solr_doc)
305
- end
306
- it "has the expected series name '#{expected}'" do
307
- expect(solr_doc['series_ssi']).to eq expected
308
- end
289
+ describe '#add_location' do
290
+ before do
291
+ allow(r).to receive(:mods).and_return(mods)
292
+ subject.send(:add_location, sdb, solr_doc)
293
+ end
294
+ context 'with a record without a location' do
295
+ let(:mods) do
296
+ Nokogiri::XML <<-EOF
297
+ <mods xmlns="#{Mods::MODS_NS}">
298
+ </mods>
299
+ EOF
309
300
  end
310
- end # for example
311
- end # each
312
- end # add_series
313
301
 
314
- describe '#add_box' do
315
- # example string as key, expected box name as value
316
- {
317
- # feigenbaum
318
- 'Call Number: SC0340, Accession 2005-101, Box : 1, Folder: 1': '1',
319
- 'Call Number: SC0340, Accession 2005-101, Box: 39, Folder: 9': '39',
320
- 'Call Number: SC0340, Accession: 1986-052, Box 3 Folder 38': '3',
321
- 'Call Number: SC0340, Accession: 2005-101, Box : 50, Folder: 31': '50',
322
- 'Call Number: SC0340, Accession: 1986-052, Box: 5, Folder: 1': '5',
323
- 'SC0340, 1986-052, Box 18': '18',
324
- 'SC0340, Accession 2005-101, Box 18': '18',
325
- 'Call Number: SC0340, Accession 2005-101, Box: 42A, Folder: 24': '42A',
326
- 'Call Number: SC0340, Accession: 1986-052, Box: 42A, Folder: 59': '42A',
327
- 'Call Number: SC0340, Accession 2005-101': nil,
328
- 'Call Number: SC0340, Accession: 1986-052': nil,
329
- 'SC0340': nil,
330
- 'SC0340, Accession 1986-052': nil,
331
- 'Stanford University. Libraries. Department of Special Collections and University Archives': nil,
332
- # shpc (actually in <relatedItem><location><physicalLocation>)
333
- 'Series Biographical Photographs | Box 42 | Folder Abbot, Nathan': '42',
334
- 'Series General Photographs | Box 42 | Folder Administration building--Outer Quad': '42',
335
- # menuez
336
- 'MSS Photo 451, Series 1, Box 32, Folder 11, Sleeve 32-11-2, Frame B32-F11-S2-6': '32',
337
- 'Series 1, Box 10, Folder 8': '10',
338
- # fuller
339
- 'Collection: M1090 , Series: 1 , Box: 5 , Folder: 42': '5',
340
- # hummel (actually in <relatedItem><location><physicalLocation>)
341
- 'Box 42 | Folder 3': '42',
342
- 'Flat-box 228 | Volume 1': '228'
343
- }.each do |example, expected|
344
- describe "for example '#{example}'" do
345
- let(:example) { example }
346
- context 'in /location/physicalLocation' do
347
- before do
348
- allow(r).to receive(:mods).and_return(mods_loc_phys_loc)
349
- subject.send(:add_box, sdb, solr_doc)
350
- end
351
- it "has the expected box label '#{expected}'" do
352
- expect(solr_doc['box_ssi']).to eq expected
353
- end
302
+ it 'is blank' do
303
+ expect(solr_doc['location_ssi']).to be_blank
354
304
  end
355
- context 'in /relatedItem/location/physicalLocation' do
356
- before do
357
- allow(r).to receive(:mods).and_return(mods_rel_item_loc_phys_loc)
358
- subject.send(:add_box, sdb, solr_doc)
359
- end
360
- it "has the expected box label '#{expected}'" do
361
- expect(solr_doc['box_ssi']).to eq expected
362
- end
305
+ end
306
+ context 'with a record with a location' do
307
+ let(:mods) do
308
+ # e.g. from https://purl.stanford.edu/vw282gv1740
309
+ Nokogiri::XML <<-EOF
310
+ <mods xmlns="#{Mods::MODS_NS}">
311
+ <location>
312
+ <physicalLocation>Series 1, Box 10, Folder 8</physicalLocation>
313
+ </location>
314
+ </mods>
315
+ EOF
363
316
  end
364
317
 
365
- context 'with multiple physicalLocation elements' do
366
- before do
367
- allow(r).to receive(:mods).and_return(mods_loc_multiple_phys_loc)
368
- subject.send(:add_box, sdb, solr_doc)
369
- end
370
- it "has the expected box label '#{expected}'" do
371
- expect(solr_doc['box_ssi']).to eq expected
372
- end
373
- end
374
- end # for example
375
- end # each
376
- end # add_box
377
-
378
- describe '#add_folder' do
379
- # example string as key, expected folder name as value
380
- {
381
- # feigenbaum
382
- 'Call Number: SC0340, Accession 2005-101, Box : 1, Folder: 42': '42',
383
- 'Call Number: SC0340, Accession 2005-101, Box: 2, Folder: 42': '42',
384
- 'Call Number: SC0340, Accession: 1986-052, Box 3 Folder 42': '42',
385
- 'Call Number: SC0340, Accession: 2005-101, Box : 4, Folder: 42': '42',
386
- 'Call Number: SC0340, Accession: 1986-052, Box: 5, Folder: 42': '42',
387
- 'Call Number: SC0340, Accession 2005-101, Box: 4A, Folder: 42': '42',
388
- 'Call Number: SC0340, Accession: 1986-052, Box: 5A, Folder: 42': '42',
389
- 'Call Number: SC0340, Accession 2005-101': nil,
390
- 'Call Number: SC0340, Accession: 1986-052': nil,
391
- 'SC0340': nil,
392
- 'SC0340, 1986-052, Box 18': nil,
393
- 'SC0340, Accession 2005-101': nil,
394
- 'SC0340, Accession 2005-101, Box 18': nil,
395
- 'Stanford University. Libraries. Department of Special Collections and University Archives': nil,
396
- # menuez
397
- 'MSS Photo 451, Series 1, Box 32, Folder 42, Sleeve 32-11-2, Frame B32-F11-S2-6': '42',
398
- 'Series 1, Box 10, Folder 42': '42',
399
- # fuller
400
- 'Collection: M1090 , Series: 4 , Box: 5 , Folder: 42': '42',
401
- # hummel (actually in <relatedItem><location><physicalLocation>)
402
- 'Box 1 | Folder 42': '42',
403
- 'Flat-box 228 | Volume 1': nil,
404
- # shpc (actually in <relatedItem><location><physicalLocation>)
405
- 'Series Biographical Photographs | Box 1 | Folder Abbot, Nathan': 'Abbot, Nathan',
406
- 'Series General Photographs | Box 1 | Folder Administration building--Outer Quad': 'Administration building--Outer Quad',
407
- # hypothetical
408
- 'Folder: 42, Sheet: 15': '42'
409
- }.each do |example, expected|
410
- describe "for example '#{example}'" do
411
- let(:example) { example }
412
- context 'in /location/physicalLocation' do
413
- before do
414
- allow(r).to receive(:mods).and_return(mods_loc_phys_loc)
415
- subject.send(:add_folder, sdb, solr_doc)
416
- end
417
- it "has the expected folder label '#{expected}'" do
418
- expect(solr_doc['folder_ssi']).to eq expected
419
- end
420
- end
421
- context 'in /relatedItem/location/physicalLocation' do
422
- before do
423
- allow(r).to receive(:mods).and_return(mods_rel_item_loc_phys_loc)
424
- subject.send(:add_folder, sdb, solr_doc)
425
- end
426
- it "has the expected folder label '#{expected}'" do
427
- expect(solr_doc['folder_ssi']).to eq expected
428
- end
318
+ it 'extracts the location' do
319
+ expect(solr_doc['location_ssi']).to eq('Series 1, Box 10, Folder 8')
429
320
  end
321
+ end
322
+ end # add_location
430
323
 
431
- context 'with multiple physicalLocation elements' do
432
- before do
433
- allow(r).to receive(:mods).and_return(mods_loc_multiple_phys_loc)
434
- subject.send(:add_folder, sdb, solr_doc)
435
- end
436
- it "has the expected folder label '#{expected}'" do
437
- expect(solr_doc['folder_ssi']).to eq expected
438
- end
324
+ describe '#add_series' do
325
+ before do
326
+ allow(r).to receive(:mods).and_return(mods)
327
+ subject.send(:add_series, sdb, solr_doc)
328
+ end
329
+ context 'with a record without a series' do
330
+ let(:mods) do
331
+ Nokogiri::XML <<-EOF
332
+ <mods xmlns="#{Mods::MODS_NS}">
333
+ </mods>
334
+ EOF
439
335
  end
440
- end # for example
441
- end # each
442
- end # add_folder
443
336
 
444
- # rubocop:disable Metrics/LineLength
445
- describe '#add_location' do
446
- # example string as key, expected box name as value
447
- {
448
- # feigenbaum
449
- 'Call Number: SC0340, Accession 2005-101, Box : 1, Folder: 1': 'Call Number: SC0340, Accession 2005-101, Box : 1, Folder: 1',
450
- 'Call Number: SC0340, Accession 2005-101': 'Call Number: SC0340, Accession 2005-101',
451
- 'SC0340, 1986-052, Box 18': 'SC0340, 1986-052, Box 18',
452
- 'SC0340, Accession 2005-101, Box 18': 'SC0340, Accession 2005-101, Box 18',
453
- 'SC0340': nil,
454
- 'SC0340, Accession 1986-052': 'SC0340, Accession 1986-052',
455
- 'Stanford University. Libraries. Department of Special Collections and University Archives': nil,
456
- # shpc (actually in <relatedItem><location><physicalLocation>)
457
- 'Series Biographical Photographs | Box 42 | Folder Abbot, Nathan': 'Series Biographical Photographs | Box 42 | Folder Abbot, Nathan',
458
- 'Series General Photographs | Box 42 | Folder Administration building--Outer Quad': 'Series General Photographs | Box 42 | Folder Administration building--Outer Quad',
459
- # menuez
460
- 'MSS Photo 451, Series 1, Box 32, Folder 11, Sleeve 32-11-2, Frame B32-F11-S2-6': 'MSS Photo 451, Series 1, Box 32, Folder 11, Sleeve 32-11-2, Frame B32-F11-S2-6',
461
- 'Series 1, Box 10, Folder 8': 'Series 1, Box 10, Folder 8',
462
- # fuller
463
- 'Collection: M1090 , Series: 1 , Box: 5 , Folder: 42': 'Collection: M1090 , Series: 1 , Box: 5 , Folder: 42',
464
- # hummel (actually in <relatedItem><location><physicalLocation>)
465
- 'Box 42 | Folder 3': 'Box 42 | Folder 3',
466
- 'Flat-box 228 | Volume 1': 'Flat-box 228 | Volume 1'
467
- }.each do |example, expected|
468
- describe "for example '#{example}'" do
469
- let(:example) { example }
470
- context 'in /location/physicalLocation' do
471
- before do
472
- allow(r).to receive(:mods).and_return(mods_loc_phys_loc)
473
- subject.send(:add_location, sdb, solr_doc)
474
- end
475
- it "has the expected location '#{expected}'" do
476
- expect(solr_doc['location_ssi']).to eq expected
477
- end
478
- end
479
- context 'in /relatedItem/location/physicalLocation' do
480
- before do
481
- allow(r).to receive(:mods).and_return(mods_rel_item_loc_phys_loc)
482
- subject.send(:add_location, sdb, solr_doc)
483
- end
484
- it "has the expected location '#{expected}'" do
485
- expect(solr_doc['location_ssi']).to eq expected
486
- end
337
+ it 'is blank' do
338
+ expect(solr_doc['series_ssi']).to be_blank
487
339
  end
488
- context 'with multiple physicalLocation elements' do
489
- before do
490
- allow(r).to receive(:mods).and_return(mods_loc_multiple_phys_loc)
491
- subject.send(:add_location, sdb, solr_doc)
492
- end
493
- it "has the expected location '#{expected}'" do
494
- expect(solr_doc['location_ssi']).to eq expected
495
- end
340
+ end
341
+ context 'with a record with a series' do
342
+ let(:mods) do
343
+ # e.g. from https://purl.stanford.edu/vw282gv1740
344
+ Nokogiri::XML <<-EOF
345
+ <mods xmlns="#{Mods::MODS_NS}">
346
+ <location>
347
+ <physicalLocation>Series 1, Box 10, Folder 8</physicalLocation>
348
+ </location>
349
+ </mods>
350
+ EOF
496
351
  end
497
- end # for example
498
- end # each
499
- end # add_location
500
- # rubocop:enable Metrics/LineLength
501
352
 
502
- let(:mods_note_plain) do
503
- Nokogiri::XML <<-EOF
504
- <mods xmlns="#{Mods::MODS_NS}">
505
- <note>#{example}</note>
506
- </mods>
507
- EOF
508
- end
509
- let(:mods_note_preferred_citation) do
510
- Nokogiri::XML <<-EOF
511
- <mods xmlns="#{Mods::MODS_NS}">
512
- <note type="preferred citation">#{example}</note>
513
- </mods>
514
- EOF
515
- end
353
+ it 'extracts the series' do
354
+ expect(solr_doc['series_ssi']).to eq('1')
355
+ end
356
+ end
357
+ end # add_series
358
+ end # context StanfordMods concern
516
359
 
517
360
  # rubocop:disable Metrics/LineLength
518
361
  describe '#add_folder_name' do
362
+ let(:mods_note_plain) do
363
+ Nokogiri::XML <<-EOF
364
+ <mods xmlns="#{Mods::MODS_NS}">
365
+ <note>#{example}</note>
366
+ </mods>
367
+ EOF
368
+ end
369
+ let(:mods_note_preferred_citation) do
370
+ Nokogiri::XML <<-EOF
371
+ <mods xmlns="#{Mods::MODS_NS}">
372
+ <note type="preferred citation">#{example}</note>
373
+ </mods>
374
+ EOF
375
+ end
519
376
  # example string as key, expected folder name as value
520
377
  # all from feigenbaum (or based on feigenbaum), as that is only coll with this data
521
378
  {
@@ -107,6 +107,13 @@ describe Spotlight::Resources::Purl do
107
107
  expect(Spotlight::Dor::Resources.indexer).to receive(:solr_document).and_raise(RuntimeError.new)
108
108
  expect { subject.to_solr.to_a }.not_to raise_error
109
109
  end
110
+
111
+ it 'log and raises other types of errors errors' do
112
+ allow(subject.resource).to receive(:items).and_return([])
113
+ expect(Spotlight::Dor::Resources.indexer).to receive(:solr_document).and_raise(StandardError.new)
114
+ expect(subject.send(:logger)).to receive(:error).with(/Error processing xf680rd3068/)
115
+ expect { subject.to_solr.to_a }.to raise_error StandardError
116
+ end
110
117
  end
111
118
 
112
119
  context 'with a single item' do
@@ -22,10 +22,11 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_dependency 'faraday'
24
24
  spec.add_dependency 'solrizer'
25
- spec.add_dependency 'stanford-mods', '>= 1.2.0' # includes new person facets
26
25
  spec.add_dependency 'gdor-indexer'
27
26
  # newer versions of harvestdor-indexer have performance improvements for collections
28
27
  spec.add_dependency 'harvestdor-indexer', '~> 2.3'
28
+ # stanford-mods 1.2.1 includes additional name fields and a bug fix
29
+ spec.add_dependency 'stanford-mods', '>= 1.2.1'
29
30
  spec.add_dependency 'rails'
30
31
  spec.add_dependency 'blacklight-spotlight', '~> 0.6'
31
32
  spec.add_dependency 'parallel'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spotlight-dor-resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-18 00:00:00.000000000 Z
11
+ date: 2015-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -39,47 +39,47 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: stanford-mods
42
+ name: gdor-indexer
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 1.2.0
47
+ version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 1.2.0
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: gdor-indexer
56
+ name: harvestdor-indexer
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '2.3'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '2.3'
69
69
  - !ruby/object:Gem::Dependency
70
- name: harvestdor-indexer
70
+ name: stanford-mods
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '2.3'
75
+ version: 1.2.1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '2.3'
82
+ version: 1.2.1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rails
85
85
  requirement: !ruby/object:Gem::Requirement