stanford-mods 0.0.13 → 0.0.14

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.
@@ -7,4 +7,6 @@ rvm:
7
7
  notifications:
8
8
  email:
9
9
  - ndushay@stanford.edu
10
- - jdeering@stanford.edu
10
+ - jdeering@stanford.edu
11
+ before_install:
12
+ gem update --system 1.8.24
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  require 'stanford-mods/searchworks_languages'
3
-
3
+ require 'logger'
4
4
  # SearchWorks specific wranglings of MODS metadata as a mixin to the Stanford::Mods::Record object
5
5
  module Stanford
6
6
  module Mods
@@ -182,6 +182,437 @@ module Stanford
182
182
  result
183
183
  end
184
184
 
185
+ # Values are the contents of:
186
+ # mods/genre
187
+ # mods/subject/topic
188
+ # @return [Array<String>] values for the topic_search Solr field for this document or nil if none
189
+ def topic_search
190
+ @topic_search ||= begin
191
+ vals = self.term_values(:genre) || []
192
+ vals.concat(subject_topics) if subject_topics
193
+ vals.empty? ? nil : vals
194
+ end
195
+ end
196
+ def place
197
+ vals = self.term_values([:origin_info,:place,:placeTerm])
198
+ vals
199
+ end
200
+ def main_author_w_date_test
201
+ result = nil
202
+ first_wo_role = nil
203
+ self.plain_name.each { |n|
204
+ if n.role.size == 0
205
+ first_wo_role ||= n
206
+ end
207
+ n.role.each { |r|
208
+ if r.authority.include?('marcrelator') &&
209
+ (r.value.include?('Creator') || r.value.include?('Author'))
210
+ result ||= n.display_value_w_date
211
+ end
212
+ }
213
+ }
214
+ if !result && first_wo_role
215
+ result = first_wo_role.display_value_w_date
216
+ end
217
+ result
218
+ end
219
+ #remove trailing commas
220
+ def sw_full_title_without_commas
221
+ toret = self.sw_full_title
222
+ if toret
223
+ toret = toret.gsub(/,$/, '')
224
+ end
225
+ toret
226
+ end
227
+
228
+ def sw_logger
229
+ @logger ||= Logger.new(STDOUT)
230
+ end
231
+ # Values are the contents of:
232
+ # subject/geographic
233
+ # subject/hierarchicalGeographic
234
+ # subject/geographicCode (only include the translated value if it isn't already present from other mods geo fields)
235
+ # @return [Array<String>] values for the geographic_search Solr field for this document or nil if none
236
+ def geographic_search
237
+ @geographic_search ||= begin
238
+ result = self.sw_geographic_search
239
+
240
+ # TODO: this should go into stanford-mods ... but then we have to set that gem up with a Logger
241
+ # print a message for any unrecognized encodings
242
+ xvals = self.subject.geographicCode.translated_value
243
+ codes = self.term_values([:subject, :geographicCode])
244
+ if codes && codes.size > xvals.size
245
+ self.subject.geographicCode.each { |n|
246
+ if n.authority != 'marcgac' && n.authority != 'marccountry'
247
+ sw_logger.info("#{druid} has subject geographicCode element with untranslated encoding (#{n.authority}): #{n.to_xml}")
248
+ end
249
+ }
250
+ end
251
+
252
+ # FIXME: stanford-mods should be returning [], not nil ...
253
+ return nil if !result || result.empty?
254
+ result
255
+ end
256
+ end
257
+
258
+ # Values are the contents of:
259
+ # subject/name
260
+ # subject/occupation - no subelements
261
+ # subject/titleInfo
262
+ # @return [Array<String>] values for the subject_other_search Solr field for this document or nil if none
263
+ def subject_other_search
264
+ @subject_other_search ||= begin
265
+ vals = subject_occupations ? Array.new(subject_occupations) : []
266
+ vals.concat(subject_names) if subject_names
267
+ vals.concat(subject_titles) if subject_titles
268
+ vals.empty? ? nil : vals
269
+ end
270
+ end
271
+
272
+ # Values are the contents of:
273
+ # subject/temporal
274
+ # subject/genre
275
+ # @return [Array<String>] values for the subject_other_subvy_search Solr field for this document or nil if none
276
+ def subject_other_subvy_search
277
+ @subject_other_subvy_search ||= begin
278
+ vals = subject_temporal ? Array.new(subject_temporal) : []
279
+ gvals = self.term_values([:subject, :genre])
280
+ vals.concat(gvals) if gvals
281
+
282
+ # print a message for any temporal encodings
283
+ self.subject.temporal.each { |n|
284
+ sw_logger.info("#{druid} has subject temporal element with untranslated encoding: #{n.to_xml}") if !n.encoding.empty?
285
+ }
286
+
287
+ vals.empty? ? nil : vals
288
+ end
289
+ end
290
+ # @return [Array<String>] values for the pub_date_group_facet
291
+ def pub_date_groups year
292
+ if not year
293
+ return nil
294
+ end
295
+ year=year.to_i
296
+ current_year=Time.new.year.to_i
297
+ result = []
298
+ if year >= current_year - 1
299
+ result << "This year"
300
+ else
301
+ if year >= current_year - 3
302
+ result << "Last 3 years"
303
+ else
304
+ if year >= current_year - 10
305
+ result << "Last 10 years"
306
+ else
307
+ if year >= current_year - 50
308
+ result << "Last 50 years"
309
+ else
310
+ result << "More than 50 years ago"
311
+ end
312
+ end
313
+ end
314
+ end
315
+ end
316
+
317
+ # select one or more format values from the controlled vocabulary here:
318
+ # http://searchworks-solr-lb.stanford.edu:8983/solr/select?facet.field=format&rows=0&facet.sort=index
319
+ # based on the dor_content_type
320
+ # @return [String] value in the SearchWorks controlled vocabulary
321
+ def format
322
+ val=[]
323
+ formats=self.term_values(:typeOfResource)
324
+ if formats
325
+ formats.each do |form|
326
+ case form
327
+ when 'still image'
328
+ val << 'Image'
329
+ when 'mixed material'
330
+ val << 'Manuscript/Archive'
331
+ when 'moving image'
332
+ val << 'Video'
333
+ when 'three dimensional object'
334
+ val <<'Other'
335
+ when 'cartographic'
336
+ val << 'Map/Globe'
337
+ when 'sound recording-musical'
338
+ val << 'Music-Recording'
339
+ when 'sound recording-nonmusical'
340
+ val << 'Sound Recording'
341
+ when 'software, multimedia'
342
+ val << 'Computer File'
343
+ else
344
+ sw_logger.warn "#{druid} has an unknown typeOfResource #{form}"
345
+ end
346
+ end
347
+ end
348
+ if val.length>0
349
+ return val.uniq
350
+ end
351
+ if not self.typeOfResource or self.typeOfResource.length == 0
352
+ sw_logger.warn "#{druid} has no valid typeOfResource"
353
+ []
354
+ end
355
+ end
356
+
357
+ # Values are the contents of:
358
+ # all subject subelements except subject/cartographic plus genre top level element
359
+ # @return [Array<String>] values for the subject_all_search Solr field for this document or nil if none
360
+ def subject_all_search
361
+ vals = topic_search ? Array.new(topic_search) : []
362
+ vals.concat(geographic_search) if geographic_search
363
+ vals.concat(subject_other_search) if subject_other_search
364
+ vals.concat(subject_other_subvy_search) if subject_other_subvy_search
365
+ vals.empty? ? nil : vals
366
+ end
367
+ def pub_date_display
368
+ if pub_dates
369
+ pub_dates.first
370
+ else
371
+ nil
372
+ end
373
+ end
374
+ #get the dates from dateIssued, and dateCreated merged into 1 array.
375
+ # @return [Array<String>] values for the issue_date_display Solr field for this document or nil if none
376
+ def pub_dates
377
+ vals = self.term_values([:origin_info,:dateIssued])
378
+ if vals
379
+ vals = vals.concat self.term_values([:origin_info,:dateCreated]) unless not self.term_values([:origin_info,:dateCreated])
380
+ else
381
+ vals = self.term_values([:origin_info,:dateCreated])
382
+ end
383
+ vals and vals.empty? ? nil : vals
384
+ end
385
+ def is_number?(object)
386
+ true if Integer(object) rescue false
387
+ end
388
+ def is_date?(object)
389
+ true if Date.parse(object) rescue false
390
+ end
391
+
392
+ # Get the publish year from mods
393
+ #@return [String] 4 character year or nil if no valid date was found
394
+ def pub_year
395
+ #use the cached year if there is one
396
+ if @pub_year
397
+ if @pub_year == ''
398
+ return nil
399
+ end
400
+ return @pub_year
401
+ end
402
+ dates=pub_dates
403
+ if dates
404
+ year=[]
405
+ pruned_dates=[]
406
+ dates.each do |f_date|
407
+ #remove ? and []
408
+ pruned_dates << f_date.gsub('?','').gsub('[','').gsub(']','')
409
+ end
410
+ #try to find a date starting with the most normal date formats and progressing to more wonky ones
411
+ @pub_year=get_plain_four_digit_year pruned_dates
412
+ return @pub_year if @pub_year
413
+ @pub_year=get_double_digit_century pruned_dates
414
+ return @pub_year if @pub_year
415
+ @pub_year=get_three_digit_year pruned_dates
416
+ return @pub_year if @pub_year
417
+ @pub_year=get_single_digit_century pruned_dates
418
+ return @pub_year if @pub_year
419
+ end
420
+ @pub_year=''
421
+ sw_logger.info("#{druid} no valid pub date found in '#{dates.to_s}'")
422
+ return nil
423
+ end
424
+ #creates a date suitable for sorting. Guarnteed to be 4 digits or nil
425
+ def pub_date_sort
426
+ pd=nil
427
+ if pub_date
428
+ pd=pub_date
429
+ if pd.length == 3
430
+ pd='0'+pd
431
+ end
432
+ pd=pd.gsub('--','00')
433
+ end
434
+ raise "pub_date_sort was about to return a non 4 digit value #{pd}!" if pd and pd.length !=4
435
+ pd
436
+ end
437
+ #The year the object was published, , filtered based on max_pub_date and min_pub_date from the config file
438
+ #@return [String] 4 character year or nil
439
+ def pub_date
440
+ val=pub_year
441
+ if val
442
+ return val
443
+ end
444
+ nil
445
+ end
446
+ #Values for the pub date facet. This is less strict than the 4 year date requirements for pub_date
447
+ #@return <Array[String]> with values for the pub date facet
448
+ def pub_date_facet
449
+ if pub_date
450
+ if pub_date.include? '--'
451
+ cent=pub_date[0,2].to_i
452
+ cent+=1
453
+ cent=cent.to_s+'th century'
454
+ cent
455
+ else
456
+ pub_date
457
+ end
458
+ else
459
+ nil
460
+ end
461
+ end
462
+
463
+ # Values are the contents of:
464
+ # subject/topic
465
+ # subject/name
466
+ # subject/title
467
+ # subject/occupation
468
+ # with trailing comma, semicolon, and backslash (and any preceding spaces) removed
469
+ # @return [Array<String>] values for the topic_facet Solr field for this document or nil if none
470
+ def topic_facet
471
+ vals = subject_topics ? Array.new(subject_topics) : []
472
+ vals.concat(subject_names) if subject_names
473
+ vals.concat(subject_titles) if subject_titles
474
+ vals.concat(subject_occupations) if subject_occupations
475
+ vals.map! { |val|
476
+ v = val.sub(/[\\,;]$/, '')
477
+ v.strip
478
+ }
479
+ vals.empty? ? nil : vals
480
+ end
481
+
482
+ # geographic_search values with trailing comma, semicolon, and backslash (and any preceding spaces) removed
483
+ # @return [Array<String>] values for the geographic_facet Solr field for this document or nil if none
484
+ def geographic_facet
485
+ geographic_search.map { |val| val.sub(/[\\,;]$/, '').strip } unless !geographic_search
486
+ end
487
+
488
+ # subject/temporal values with trailing comma, semicolon, and backslash (and any preceding spaces) removed
489
+ # @return [Array<String>] values for the era_facet Solr field for this document or nil if none
490
+ def era_facet
491
+ subject_temporal.map { |val| val.sub(/[\\,;]$/, '').strip } unless !subject_temporal
492
+ end
493
+ # @return [String] value with the numeric catkey in it, or nil if none exists
494
+ def catkey
495
+ catkey=self.term_values([:record_info,:recordIdentifier])
496
+ if catkey and catkey.length>0
497
+ return catkey.first.gsub('a','') #need to ensure catkey is numeric only
498
+ end
499
+ nil
500
+ end
501
+ def druid= new_druid
502
+ @druid=new_druid
503
+ end
504
+ def druid
505
+ @druid ? @druid : 'Unknown item'
506
+ end
507
+
508
+ # protected ----------------------------------------------------------
509
+
510
+ # convenience method for subject/name/namePart values (to avoid parsing the mods for the same thing multiple times)
511
+ def subject_names
512
+ @subject_names ||= self.sw_subject_names
513
+ end
514
+
515
+ # convenience method for subject/occupation values (to avoid parsing the mods for the same thing multiple times)
516
+ def subject_occupations
517
+ @subject_occupations ||= self.term_values([:subject, :occupation])
518
+ end
519
+
520
+ # convenience method for subject/temporal values (to avoid parsing the mods for the same thing multiple times)
521
+ def subject_temporal
522
+ @subject_temporal ||= self.term_values([:subject, :temporal])
523
+ end
524
+
525
+ # convenience method for subject/titleInfo values (to avoid parsing the mods for the same thing multiple times)
526
+ def subject_titles
527
+ @subject_titles ||= self.sw_subject_titles
528
+ end
529
+
530
+ # convenience method for subject/topic values (to avoid parsing the mods for the same thing multiple times)
531
+ def subject_topics
532
+ @subject_topics ||= self.term_values([:subject, :topic])
533
+ end
534
+
535
+ #get a 4 digit year like 1865 from the date array
536
+ def get_plain_four_digit_year dates
537
+ dates.each do |f_date|
538
+ matches=f_date.scan(/\d{4}/)
539
+ if matches.length == 1
540
+ @pub_year=matches.first
541
+ return matches.first
542
+ else
543
+ #if there are multiples, check for ones with CE after them
544
+ matches.each do |match|
545
+ #look for things like '1865-6 CE'
546
+ pos = f_date.index(Regexp.new(match+'...CE'))
547
+ pos = pos ? pos.to_i : 0
548
+ if f_date.include?(match+' CE') or pos > 0
549
+ @pub_year=match
550
+ return match
551
+ end
552
+ end
553
+ end
554
+ end
555
+ return nil
556
+ end
557
+
558
+ #get a double digit century like '12th century' from the date array
559
+ def get_double_digit_century dates
560
+ dates.each do |f_date|
561
+ matches=f_date.scan(/\d{2}th/)
562
+ if matches.length == 1
563
+ @pub_year=((matches.first[0,2].to_i)-1).to_s+'--'
564
+ return @pub_year
565
+ end
566
+ #if there are multiples, check for ones with CE after them
567
+ if matches.length > 0
568
+ matches.each do |match|
569
+ pos = f_date.index(Regexp.new(match+'...CE'))
570
+ pos = pos ? pos.to_i : f_date.index(Regexp.new(match+' century CE'))
571
+ pos = pos ? pos.to_i : 0
572
+ if f_date.include?(match+' CE') or pos > 0
573
+ @pub_year=((match[0,2].to_i) - 1).to_s+'--'
574
+ return @pub_year
575
+ end
576
+ end
577
+ end
578
+ end
579
+ return nil
580
+ end
581
+
582
+ #get a 3 digit year like 965 from the date array
583
+ def get_three_digit_year dates
584
+ dates.each do |f_date|
585
+ matches=f_date.scan(/\d{3}/)
586
+ if matches.length > 0
587
+ return matches.first
588
+ end
589
+ end
590
+ return nil
591
+ end
592
+
593
+ #get a single digit century like '9th century' from the date array
594
+ def get_single_digit_century dates
595
+ dates.each do |f_date|
596
+ matches=f_date.scan(/\d{1}th/)
597
+ if matches.length == 1
598
+ @pub_year=((matches.first[0,2].to_i)-1).to_s+'--'
599
+ return @pub_year
600
+ end
601
+ #if there are multiples, check for ones with CE after them
602
+ if matches.length > 0
603
+ matches.each do |match|
604
+ pos = f_date.index(Regexp.new(match+'...CE'))
605
+ pos = pos ? pos.to_i : f_date.index(Regexp.new(match+' century CE'))
606
+ pos = pos ? pos.to_i : 0
607
+ if f_date.include?(match+' CE') or pos > 0
608
+ @pub_year=((match[0,1].to_i) - 1).to_s+'--'
609
+ return @pub_year
610
+ end
611
+ end
612
+ end
613
+ end
614
+ return nil
615
+ end
185
616
  end # class Record
186
617
  end # Module Mods
187
618
  end # Module Stanford
@@ -1,6 +1,6 @@
1
1
  module Stanford
2
2
  module Mods
3
3
  # this is the Ruby Gem version
4
- VERSION = "0.0.13"
4
+ VERSION = "0.0.14"
5
5
  end
6
6
  end
@@ -0,0 +1,634 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ describe "Searchworks mixin for Stanford::Mods::Record" do
5
+
6
+ before(:all) do
7
+ @smods_rec = Stanford::Mods::Record.new
8
+ @ns_decl = "xmlns='#{Mods::MODS_NS}'"
9
+ end
10
+ before :each do
11
+ @genre = 'genre top level'
12
+ @cart_coord = '6 00 S, 71 30 E'
13
+ @s_genre = 'genre in subject'
14
+ @geo = 'Somewhere'
15
+ @geo_code = 'us'
16
+ @hier_geo_country = 'France'
17
+ @s_name = 'name in subject'
18
+ @occupation = 'worker bee'
19
+ @temporal = 'temporal'
20
+ @s_title = 'title in subject'
21
+ @topic = 'topic'
22
+ m = "<mods #{@ns_decl}>
23
+ <genre>#{@genre}</genre>
24
+ <subject><cartographics><coordinates>#{@cart_coord}</coordinates></cartographics></subject>
25
+ <subject><genre>#{@s_genre}</genre></subject>
26
+ <subject><geographic>#{@geo}</geographic></subject>
27
+ <subject><geographicCode authority='iso3166'>#{@geo_code}</geographicCode></subject>
28
+ <subject><hierarchicalGeographic><country>#{@hier_geo_country}</country></hierarchicalGeographic></subject>
29
+ <subject><name><namePart>#{@s_name}</namePart></name></subject>
30
+ <subject><occupation>#{@occupation}</occupation></subject>
31
+ <subject><temporal>#{@temporal}</temporal></subject>
32
+ <subject><titleInfo><title>#{@s_title}</title></titleInfo></subject>
33
+ <subject><topic>#{@topic}</topic></subject>
34
+ </mods>"
35
+ @smods_rec = Stanford::Mods::Record.new
36
+ @smods_rec.from_str(m)
37
+ @ng_mods = Nokogiri::XML(m)
38
+ m_no_subject = "<mods #{@ns_decl}><note>notit</note></mods>"
39
+ @ng_mods_no_subject = Nokogiri::XML(m_no_subject)
40
+ end
41
+
42
+ context "sw author methods" do
43
+ before(:all) do
44
+ m = "<mods #{@ns_decl}>
45
+
46
+ </mods>"
47
+ @smods_rec = Stanford::Mods::Record.new
48
+ @smods_rec.from_str(m)
49
+ end
50
+ it 'should choose a date ending with CE if there are multiple dates' do
51
+ m = "<mods #{@ns_decl}><originInfo><dateIssued>7192 AM (li-Adam) / 1684 CE</dateIssued><issuance>monographic</issuance></originInfo>"
52
+ @smods_rec = Stanford::Mods::Record.new
53
+ @smods_rec.from_str(m)
54
+ @smods_rec.pub_date.should == '1684'
55
+ end
56
+
57
+ end
58
+
59
+ context "search fields" do
60
+
61
+ context "topic_search" do
62
+ before :each do
63
+ @genre = 'genre top level'
64
+ @cart_coord = '6 00 S, 71 30 E'
65
+ @s_genre = 'genre in subject'
66
+ @geo = 'Somewhere'
67
+ @geo_code = 'us'
68
+ @hier_geo_country = 'France'
69
+ @s_name = 'name in subject'
70
+ @occupation = 'worker bee'
71
+ @temporal = 'temporal'
72
+ @s_title = 'title in subject'
73
+ @topic = 'topic'
74
+ m = "<mods #{@ns_decl}>
75
+ <genre>#{@genre}</genre>
76
+ <subject><cartographics><coordinates>#{@cart_coord}</coordinates></cartographics></subject>
77
+ <subject><genre>#{@s_genre}</genre></subject>
78
+ <subject><geographic>#{@geo}</geographic></subject>
79
+ <subject><geographicCode authority='iso3166'>#{@geo_code}</geographicCode></subject>
80
+ <subject><hierarchicalGeographic><country>#{@hier_geo_country}</country></hierarchicalGeographic></subject>
81
+ <subject><name><namePart>#{@s_name}</namePart></name></subject>
82
+ <subject><occupation>#{@occupation}</occupation></subject>
83
+ <subject><temporal>#{@temporal}</temporal></subject>
84
+ <subject><titleInfo><title>#{@s_title}</title></titleInfo></subject>
85
+ <subject><topic>#{@topic}</topic></subject>
86
+ </mods>"
87
+ @smods_rec = Stanford::Mods::Record.new
88
+ @smods_rec.from_str(m)
89
+ @ng_mods = Nokogiri::XML(m)
90
+ m_no_subject = "<mods #{@ns_decl}><note>notit</note></mods>"
91
+ @ng_mods_no_subject = Nokogiri::XML(m_no_subject)
92
+ end
93
+ it "should be nil if there are no values in the MODS" do
94
+ m = "<mods #{@ns_decl}></mods>"
95
+ @smods_rec = Stanford::Mods::Record.new
96
+ @smods_rec.from_str(m)
97
+ @smods_rec.topic_search.should == nil
98
+ end
99
+ it "should contain subject <topic> subelement data" do
100
+ @smods_rec.topic_search.should include(@topic)
101
+ end
102
+ it "should contain top level <genre> element data" do
103
+ @smods_rec.topic_search.should include(@genre)
104
+ end
105
+ it "should not contain other subject element data" do
106
+ @smods_rec.topic_search.should_not include(@cart_coord)
107
+ @smods_rec.topic_search.should_not include(@s_genre)
108
+ @smods_rec.topic_search.should_not include(@geo)
109
+ @smods_rec.topic_search.should_not include(@geo_code)
110
+ @smods_rec.topic_search.should_not include(@hier_geo_country)
111
+ @smods_rec.topic_search.should_not include(@s_name)
112
+ @smods_rec.topic_search.should_not include(@occupation)
113
+ @smods_rec.topic_search.should_not include(@temporal)
114
+ @smods_rec.topic_search.should_not include(@s_title)
115
+ end
116
+ it "should not be nil if there are only subject/topic elements (no <genre>)" do
117
+ m = "<mods #{@ns_decl}><subject><topic>#{@topic}</topic></subject></mods>"
118
+ @smods_rec = Stanford::Mods::Record.new
119
+ @smods_rec.from_str(m)
120
+ @smods_rec.topic_search.should == [@topic]
121
+ end
122
+ it "should not be nil if there are only <genre> elements (no subject/topic elements)" do
123
+ m = "<mods #{@ns_decl}><genre>#{@genre}</genre></mods>"
124
+ @smods_rec = Stanford::Mods::Record.new
125
+ @smods_rec.from_str(m)
126
+ @smods_rec.topic_search.should == [@genre]
127
+ end
128
+ context "topic subelement" do
129
+ it "should have a separate value for each topic element" do
130
+ m = "<mods #{@ns_decl}>
131
+ <subject>
132
+ <topic>first</topic>
133
+ <topic>second</topic>
134
+ </subject>
135
+ <subject><topic>third</topic></subject>
136
+ </mods>"
137
+ @smods_rec = Stanford::Mods::Record.new
138
+ @smods_rec.from_str(m)
139
+ @smods_rec.topic_search.should == ['first', 'second', 'third']
140
+ end
141
+ it "should be nil if there are only empty values in the MODS" do
142
+ m = "<mods #{@ns_decl}><subject><topic/></subject><note>notit</note></mods>"
143
+ @smods_rec = Stanford::Mods::Record.new
144
+ @smods_rec.from_str(m)
145
+ @smods_rec.topic_search.should == nil
146
+ end
147
+ end
148
+ end # topic_search
149
+
150
+ context "geographic_search" do
151
+ it "should call sw_geographic_search (from stanford-mods gem)" do
152
+ m = "<mods #{@ns_decl}><subject><geographic>#{@geo}</geographic></subject></mods>"
153
+ @smods_rec = Stanford::Mods::Record.new
154
+ @smods_rec.from_str(m)
155
+ @smods_rec.should_receive(:sw_geographic_search)
156
+ @smods_rec.geographic_search
157
+ end
158
+ it "should log an info message when it encounters a geographicCode encoding it doesn't translate" do
159
+ m = "<mods #{@ns_decl}><subject><geographicCode authority='iso3166'>ca</geographicCode></subject></mods>"
160
+ @smods_rec = Stanford::Mods::Record.new
161
+ @smods_rec.from_str(m)
162
+ @smods_rec.sw_logger.should_receive(:info).with(/#{@fake_druid} has subject geographicCode element with untranslated encoding \(iso3166\): <geographicCode authority=.*>ca<\/geographicCode>/)
163
+ @smods_rec.geographic_search
164
+ end
165
+ end # geographic_search
166
+
167
+ context "subject_other_search" do
168
+
169
+ it "should call sw_subject_names (from stanford-mods gem)" do
170
+ @smods_rec.should_receive(:sw_subject_names)
171
+ @smods_rec.subject_other_search
172
+ end
173
+ it "should call sw_subject_titles (from stanford-mods gem)" do
174
+ @smods_rec.should_receive(:sw_subject_titles)
175
+ @smods_rec.subject_other_search
176
+ end
177
+ it "should be nil if there are no values in the MODS" do
178
+ m = "<mods #{@ns_decl}></mods>"
179
+ @smods_rec = Stanford::Mods::Record.new
180
+ @smods_rec.from_str(m)
181
+ @smods_rec.subject_other_search.should == nil
182
+ end
183
+ it "should contain subject <name> SUBelement data" do
184
+ @smods_rec.subject_other_search.should include(@s_name)
185
+ end
186
+ it "should contain subject <occupation> subelement data" do
187
+ @smods_rec.subject_other_search.should include(@occupation)
188
+ end
189
+ it "should contain subject <titleInfo> SUBelement data" do
190
+ @smods_rec.subject_other_search.should include(@s_title)
191
+ end
192
+ it "should not contain other subject element data" do
193
+ @smods_rec.subject_other_search.should_not include(@genre)
194
+ @smods_rec.subject_other_search.should_not include(@cart_coord)
195
+ @smods_rec.subject_other_search.should_not include(@s_genre)
196
+ @smods_rec.subject_other_search.should_not include(@geo)
197
+ @smods_rec.subject_other_search.should_not include(@geo_code)
198
+ @smods_rec.subject_other_search.should_not include(@hier_geo_country)
199
+ @smods_rec.subject_other_search.should_not include(@temporal)
200
+ @smods_rec.subject_other_search.should_not include(@topic)
201
+ end
202
+ it "should not be nil if there are only subject/name elements" do
203
+ m = "<mods #{@ns_decl}><subject><name><namePart>#{@s_name}</namePart></name></subject></mods>"
204
+ @smods_rec = Stanford::Mods::Record.new
205
+ @smods_rec.from_str(m)
206
+ @smods_rec.subject_other_search.should == [@s_name]
207
+ end
208
+ it "should not be nil if there are only subject/occupation elements" do
209
+ m = "<mods #{@ns_decl}><subject><occupation>#{@occupation}</occupation></subject></mods>"
210
+ @smods_rec = Stanford::Mods::Record.new
211
+ @smods_rec.from_str(m)
212
+
213
+
214
+ @smods_rec. subject_other_search.should == [@occupation]
215
+ end
216
+ it "should not be nil if there are only subject/titleInfo elements" do
217
+ m = "<mods #{@ns_decl}><subject><titleInfo><title>#{@s_title}</title></titleInfo></subject></mods>"
218
+ @smods_rec = Stanford::Mods::Record.new
219
+ @smods_rec.from_str(m)
220
+
221
+
222
+ @smods_rec. subject_other_search.should == [@s_title]
223
+ end
224
+ context "occupation subelement" do
225
+ it "should have a separate value for each occupation element" do
226
+ m = "<mods #{@ns_decl}>
227
+ <subject>
228
+ <occupation>first</occupation>
229
+ <occupation>second</occupation>
230
+ </subject>
231
+ <subject><occupation>third</occupation></subject>
232
+ </mods>"
233
+ @smods_rec = Stanford::Mods::Record.new
234
+ @smods_rec.from_str(m)
235
+
236
+ @smods_rec.subject_other_search.should == ['first', 'second', 'third']
237
+ end
238
+ it "should be nil if there are only empty values in the MODS" do
239
+ m = "<mods #{@ns_decl}><subject><occupation/></subject><note>notit</note></mods>"
240
+ @smods_rec = Stanford::Mods::Record.new
241
+ @smods_rec.from_str(m)
242
+
243
+ @smods_rec. subject_other_search.should == nil
244
+ end
245
+ end
246
+ end # subject_other_search
247
+
248
+ context "subject_other_subvy_search" do
249
+ it "should be nil if there are no values in the MODS" do
250
+ @smods_rec = Stanford::Mods::Record.new
251
+ @smods_rec.from_str(@ng_mods_no_subject.to_s)
252
+
253
+ @smods_rec. subject_other_subvy_search.should == nil
254
+ end
255
+ it "should contain subject <temporal> subelement data" do
256
+ @smods_rec.subject_other_subvy_search.should include(@temporal)
257
+ end
258
+ it "should contain subject <genre> SUBelement data" do
259
+ @smods_rec.subject_other_subvy_search.should include(@s_genre)
260
+ end
261
+ it "should not contain other subject element data" do
262
+ @smods_rec.subject_other_subvy_search.should_not include(@genre)
263
+ @smods_rec.subject_other_subvy_search.should_not include(@cart_coord)
264
+ @smods_rec.subject_other_subvy_search.should_not include(@geo)
265
+ @smods_rec.subject_other_subvy_search.should_not include(@geo_code)
266
+ @smods_rec.subject_other_subvy_search.should_not include(@hier_geo_country)
267
+ @smods_rec.subject_other_subvy_search.should_not include(@s_name)
268
+ @smods_rec.subject_other_subvy_search.should_not include(@occupation)
269
+ @smods_rec.subject_other_subvy_search.should_not include(@topic)
270
+ @smods_rec.subject_other_subvy_search.should_not include(@s_title)
271
+ end
272
+ it "should not be nil if there are only subject/temporal elements (no subject/genre)" do
273
+ m = "<mods #{@ns_decl}><subject><temporal>#{@temporal}</temporal></subject></mods>"
274
+ @smods_rec = Stanford::Mods::Record.new
275
+ @smods_rec.from_str(m)
276
+
277
+
278
+ @smods_rec. subject_other_subvy_search.should == [@temporal]
279
+ end
280
+ it "should not be nil if there are only subject/genre elements (no subject/temporal)" do
281
+ m = "<mods #{@ns_decl}><subject><genre>#{@s_genre}</genre></subject></mods>"
282
+ @smods_rec = Stanford::Mods::Record.new
283
+ @smods_rec.from_str(m)
284
+
285
+
286
+ @smods_rec. subject_other_subvy_search.should == [@s_genre]
287
+ end
288
+ context "temporal subelement" do
289
+ it "should have a separate value for each temporal element" do
290
+ m = "<mods #{@ns_decl}>
291
+ <subject>
292
+ <temporal>1890-1910</temporal>
293
+ <temporal>20th century</temporal>
294
+ </subject>
295
+ <subject><temporal>another</temporal></subject>
296
+ </mods>"
297
+ @smods_rec = Stanford::Mods::Record.new
298
+ @smods_rec.from_str(m)
299
+
300
+ @smods_rec. subject_other_subvy_search.should == ['1890-1910', '20th century', 'another']
301
+ end
302
+ it "should log an info message when it encounters an encoding it doesn't translate" do
303
+ m = "<mods #{@ns_decl}><subject><temporal encoding='iso8601'>197505</temporal></subject></mods>"
304
+ @smods_rec = Stanford::Mods::Record.new
305
+ @smods_rec.from_str(m)
306
+
307
+ @smods_rec.sw_logger.should_receive(:info).with(/#{@fake_druid} has subject temporal element with untranslated encoding: <temporal encoding=.*>197505<\/temporal>/)
308
+ @smods_rec.subject_other_subvy_search
309
+ end
310
+ it "should be nil if there are only empty values in the MODS" do
311
+ m = "<mods #{@ns_decl}><subject><temporal/></subject><note>notit</note></mods>"
312
+ @smods_rec = Stanford::Mods::Record.new
313
+ @smods_rec.from_str(m)
314
+
315
+ @smods_rec. subject_other_subvy_search.should == nil
316
+ end
317
+ end
318
+ context "genre subelement" do
319
+ it "should have a separate value for each genre element" do
320
+ m = "<mods #{@ns_decl}>
321
+ <subject>
322
+ <genre>first</genre>
323
+ <genre>second</genre>
324
+ </subject>
325
+ <subject><genre>third</genre></subject>
326
+ </mods>"
327
+ @smods_rec = Stanford::Mods::Record.new
328
+ @smods_rec.from_str(m)
329
+
330
+ @smods_rec. subject_other_subvy_search.should == ['first', 'second', 'third']
331
+ end
332
+ it "should be nil if there are only empty values in the MODS" do
333
+ m = "<mods #{@ns_decl}><subject><genre/></subject><note>notit</note></mods>"
334
+ @smods_rec = Stanford::Mods::Record.new
335
+ @smods_rec.from_str(m)
336
+
337
+ @smods_rec. subject_other_subvy_search.should == nil
338
+ end
339
+ end
340
+ end # subject_other_subvy_search
341
+
342
+ context "subject_all_search" do
343
+ it "should be nil if there are no values in the MODS" do
344
+ @smods_rec = Stanford::Mods::Record.new
345
+ @smods_rec.from_str(@ng_mods_no_subject.to_s)
346
+
347
+ @smods_rec. subject_all_search.should == nil
348
+ end
349
+ it "should contain top level <genre> element data" do
350
+ @smods_rec.subject_all_search.should include(@genre)
351
+ end
352
+ it "should not contain cartographic sub element" do
353
+ @smods_rec.subject_all_search.should_not include(@cart_coord)
354
+ end
355
+ it "should not include codes from hierarchicalGeographic sub element" do
356
+ @smods_rec.subject_all_search.should_not include(@geo_code)
357
+ end
358
+ it "should contain all other subject subelement data" do
359
+ @smods_rec.subject_all_search.should include(@s_genre)
360
+ @smods_rec.subject_all_search.should include(@geo)
361
+ @smods_rec.subject_all_search.should include(@hier_geo_country)
362
+ @smods_rec.subject_all_search.should include(@s_name)
363
+ @smods_rec.subject_all_search.should include(@occupation)
364
+ @smods_rec.subject_all_search.should include(@temporal)
365
+ @smods_rec.subject_all_search.should include(@s_title)
366
+ @smods_rec.subject_all_search.should include(@topic)
367
+ end
368
+ end # subject_all_search
369
+ end # subject search fields
370
+
371
+ context "facet fields" do
372
+ context "topic_facet" do
373
+ it "should include topic subelement" do
374
+ @smods_rec.topic_facet.should include(@topic)
375
+ end
376
+ it "should include sw_subject_names" do
377
+ @smods_rec.topic_facet.should include(@s_name)
378
+ end
379
+ it "should include sw_subject_titles" do
380
+ @smods_rec.topic_facet.should include(@s_title)
381
+ end
382
+ it "should include occupation subelement" do
383
+ @smods_rec.topic_facet.should include(@occupation)
384
+ end
385
+ it "should have the trailing punctuation removed" do
386
+ m = "<mods #{@ns_decl}><subject>
387
+ <topic>comma,</topic>
388
+ <occupation>semicolon;</occupation>
389
+ <titleInfo><title>backslash \\</title></titleInfo>
390
+ <name><namePart>internal, punct;uation</namePart></name>
391
+ </subject></mods>"
392
+ @smods_rec = Stanford::Mods::Record.new
393
+ @smods_rec.from_str(m)
394
+
395
+
396
+ @smods_rec. topic_facet.should include('comma')
397
+ @smods_rec. topic_facet.should include('semicolon')
398
+ @smods_rec. topic_facet.should include('backslash')
399
+ @smods_rec. topic_facet.should include('internal, punct;uation')
400
+ end
401
+ it "should be nil if there are no values" do
402
+ @smods_rec = Stanford::Mods::Record.new
403
+ @smods_rec.from_str(@ng_mods_no_subject.to_s)
404
+ @smods_rec. topic_facet.should == nil
405
+ end
406
+ end
407
+ context "geographic_facet" do
408
+ it "should call geographic_search" do
409
+ @smods_rec.should_receive(:geographic_search)
410
+ @smods_rec.geographic_facet
411
+ end
412
+ it "should be like geographic_search with the trailing punctuation (and preceding spaces) removed" do
413
+ m = "<mods #{@ns_decl}><subject>
414
+ <geographic>comma,</geographic>
415
+ <geographic>semicolon;</geographic>
416
+ <geographic>backslash \\</geographic>
417
+ <geographic>internal, punct;uation</geographic>
418
+ </subject></mods>"
419
+ @smods_rec = Stanford::Mods::Record.new
420
+ @smods_rec.from_str(m)
421
+
422
+
423
+ @smods_rec. geographic_facet.should include('comma')
424
+ @smods_rec. geographic_facet.should include('semicolon')
425
+ @smods_rec. geographic_facet.should include('backslash')
426
+ @smods_rec. geographic_facet.should include('internal, punct;uation')
427
+ end
428
+ it "should be nil if there are no values" do
429
+ @smods_rec = Stanford::Mods::Record.new
430
+ @smods_rec.from_str(@ng_mods_no_subject.to_s)
431
+ @smods_rec. geographic_facet.should == nil
432
+ end
433
+ end
434
+ context "era_facet" do
435
+ it "should be temporal subelement with the trailing punctuation removed" do
436
+ m = "<mods #{@ns_decl}><subject>
437
+ <temporal>comma,</temporal>
438
+ <temporal>semicolon;</temporal>
439
+ <temporal>backslash \\</temporal>
440
+ <temporal>internal, punct;uation</temporal>
441
+ </subject></mods>"
442
+ @smods_rec = Stanford::Mods::Record.new
443
+ @smods_rec.from_str(m)
444
+
445
+
446
+ @smods_rec. era_facet.should include('comma')
447
+ @smods_rec. era_facet.should include('semicolon')
448
+ @smods_rec. era_facet.should include('backslash')
449
+ @smods_rec. era_facet.should include('internal, punct;uation')
450
+ end
451
+ it "should be nil if there are no values" do
452
+ @smods_rec = Stanford::Mods::Record.new
453
+ @smods_rec.from_str(@ng_mods_no_subject.to_s)
454
+ @smods_rec. era_facet.should == nil
455
+ end
456
+
457
+ end # subject facet fields
458
+ context "pub_dates" do
459
+ it "should choose the first date" do
460
+ m = "<mods #{@ns_decl}><originInfo>
461
+ <dateCreated>1904</dateCreated>
462
+ <dateCreated>1904</dateCreated>
463
+ <dateIssued>1906</dateIssued>
464
+
465
+ </originInfo></mods>"
466
+ @smods_rec = Stanford::Mods::Record.new
467
+ @smods_rec.from_str(m)
468
+ @smods_rec.pub_dates.should == ['1906','1904','1904']
469
+ end
470
+ end
471
+ end # context sw subject methods
472
+ context "pub_date" do
473
+ it "should choose the first date" do
474
+ m = "<mods #{@ns_decl}><originInfo>
475
+ <dateCreated>1904</dateCreated>
476
+ </originInfo></mods>"
477
+ @smods_rec = Stanford::Mods::Record.new
478
+ @smods_rec.from_str(m)
479
+ @smods_rec.pub_date.should == '1904'
480
+ end
481
+ it "should parse a date" do
482
+ m = "<mods #{@ns_decl}><originInfo>
483
+ <dateCreated>Aug. 3rd, 1886</dateCreated>
484
+ </originInfo></mods>"
485
+ @smods_rec = Stanford::Mods::Record.new
486
+ @smods_rec.from_str(m)
487
+ @smods_rec.pub_date.should == '1886'
488
+ end
489
+ it "should remove question marks and brackets" do
490
+ m = "<mods #{@ns_decl}><originInfo>
491
+ <dateCreated>Aug. 3rd, [18]86?</dateCreated>
492
+ </originInfo></mods>"
493
+ @smods_rec = Stanford::Mods::Record.new
494
+ @smods_rec.from_str(m)
495
+ @smods_rec.pub_date.should == '1886'
496
+ end
497
+ it 'should handle an s after the decade' do
498
+ m = "<mods #{@ns_decl}><originInfo>
499
+ <dateCreated>early 1890s</dateCreated>
500
+ </originInfo></mods>"
501
+ @smods_rec = Stanford::Mods::Record.new
502
+ @smods_rec.from_str(m)
503
+ @smods_rec.pub_date.should == '1890'
504
+ end
505
+ it 'should choose a date ending with CE if there are multiple dates' do
506
+ m = "<mods #{@ns_decl}><originInfo><dateIssued>7192 AM (li-Adam) / 1684 CE</dateIssued><issuance>monographic</issuance></originInfo>"
507
+ @smods_rec = Stanford::Mods::Record.new
508
+ @smods_rec.from_str(m)
509
+ @smods_rec.pub_date.should == '1684'
510
+ end
511
+ it 'should handle hyphenated range dates' do
512
+ m = "<mods #{@ns_decl}><originInfo><dateIssued>1282 AH / 1865-6 CE</dateIssued><issuance>monographic</issuance></originInfo>"
513
+ @smods_rec = Stanford::Mods::Record.new
514
+ @smods_rec.from_str(m)
515
+ @smods_rec.pub_date.should == '1865'
516
+ end
517
+ it 'should handle century based dates' do
518
+ m = "<mods #{@ns_decl}><originInfo><dateIssued>13th century AH / 19th CE</dateIssued><issuance>monographic</issuance></originInfo>"
519
+ @smods_rec = Stanford::Mods::Record.new
520
+ @smods_rec.from_str(m)
521
+ @smods_rec.pub_date_facet.should == '19th century'
522
+ @smods_rec.pub_date_sort.should =='1800'
523
+ @smods_rec.pub_date.should == '18--'
524
+ end
525
+ it 'should handle multiple CE dates' do
526
+ m = "<mods #{@ns_decl}><originInfo><dateIssued>6 Dhu al-Hijjah 923 AH / 1517 CE -- 7 Rabi I 924 AH / 1518 CE</dateIssued><issuance>monographic</issuance></originInfo>"
527
+ @smods_rec = Stanford::Mods::Record.new
528
+ @smods_rec.from_str(m)
529
+ @smods_rec.pub_date.should == '1517'
530
+ @smods_rec.pub_date_sort.should =='1517'
531
+ @smods_rec.pub_date_facet.should == '1517'
532
+ end
533
+ it 'should handle this case from walters' do
534
+ m = "<mods #{@ns_decl}><originInfo><dateIssued>Late 14th or early 15th century CE</dateIssued><issuance>monographic</issuance></originInfo>"
535
+ @smods_rec = Stanford::Mods::Record.new
536
+ @smods_rec.from_str(m)
537
+ @smods_rec.pub_date.should == '14--'
538
+ @smods_rec.pub_date_sort.should =='1400'
539
+ @smods_rec.pub_date_facet.should == '15th century'
540
+ end
541
+ it 'should work on 3 digit dates' do
542
+ m = "<mods #{@ns_decl}><originInfo><dateIssued>966 CE</dateIssued><issuance>monographic</issuance></originInfo>"
543
+ @smods_rec = Stanford::Mods::Record.new
544
+ @smods_rec.from_str(m)
545
+ @smods_rec.pub_date.should == '966'
546
+ @smods_rec.pub_date_sort.should =='0966'
547
+ @smods_rec.pub_date_facet.should == '966'
548
+ end
549
+ it 'should work on 3 digit dates' do
550
+ m = "<mods #{@ns_decl}><originInfo><dateIssued>3rd century AH / 9th CE</dateIssued><issuance>monographic</issuance></originInfo>"
551
+ @smods_rec = Stanford::Mods::Record.new
552
+ @smods_rec.from_str(m)
553
+
554
+ @smods_rec.pub_date.should == '8--'
555
+ @smods_rec.pub_date_sort.should =='0800'
556
+ @smods_rec.pub_date_facet.should == '9th century'
557
+ end
558
+
559
+
560
+
561
+
562
+
563
+ end #context pub_dates
564
+ context 'pub_date_sort' do
565
+ before :each do
566
+ m = "<mods #{@ns_decl}><originInfo>
567
+ <dateCreated>Aug. 3rd, 1886</dateCreated>
568
+ </originInfo></mods>"
569
+ @smods_rec = Stanford::Mods::Record.new
570
+ @smods_rec.from_str(m)
571
+
572
+ end
573
+ it 'should work on normal dates' do
574
+ @smods_rec.stub(:pub_date).and_return('1945')
575
+ @smods_rec.pub_date_sort.should == '1945'
576
+ end
577
+ it 'should work on 3 digit dates' do
578
+ @smods_rec.stub(:pub_date).and_return('945')
579
+ @smods_rec.pub_date_sort.should == '0945'
580
+ end
581
+ it 'should work on century dates' do
582
+ @smods_rec.stub(:pub_date).and_return('16--')
583
+ @smods_rec.pub_date_sort.should == '1600'
584
+ end
585
+ it 'should work on 3 digit century dates' do
586
+ @smods_rec.stub(:pub_date).and_return('9--')
587
+ @smods_rec.pub_date_sort.should == '0900'
588
+ end
589
+ end
590
+
591
+ context "format" do
592
+ it "should choose the format" do
593
+ m = "<mods #{@ns_decl}><typeOfResource>still image</typeOfResouce></mods>"
594
+ @smods_rec = Stanford::Mods::Record.new
595
+ @smods_rec.from_str(m)
596
+ @smods_rec.format.should == ['Image']
597
+ end
598
+ it "should return nothing if there is no format info" do
599
+ m = "<mods #{@ns_decl}><originInfo>
600
+ <dateCreated>1904</dateCreated>
601
+ </originInfo></mods>"
602
+ @smods_rec = Stanford::Mods::Record.new
603
+ @smods_rec.from_str(m)
604
+ @smods_rec.format.should == []
605
+ end
606
+ end#context format
607
+ context "pub_date_groups" do
608
+ it 'should generate the groups' do
609
+ m = "<mods #{@ns_decl}><originInfo>
610
+ <dateCreated>1904</dateCreated>
611
+ </originInfo></mods>"
612
+ @smods_rec = Stanford::Mods::Record.new
613
+ @smods_rec.from_str(m)
614
+
615
+ @smods_rec.pub_date_groups(1904).should == ['More than 50 years ago']
616
+ end
617
+ it 'should work for a modern date too' do
618
+ m = "<mods #{@ns_decl}><originInfo>
619
+ <dateCreated>1904</dateCreated>
620
+ </originInfo></mods>"
621
+ @smods_rec = Stanford::Mods::Record.new
622
+ @smods_rec.from_str(m)
623
+ @smods_rec.pub_date_groups(2013).should == ["This year"]
624
+ end
625
+ it 'should work ok given a nil date' do
626
+ m = "<mods #{@ns_decl}><originInfo>
627
+ <dateCreated>1904</dateCreated>
628
+ </originInfo></mods>"
629
+ @smods_rec = Stanford::Mods::Record.new
630
+ @smods_rec.from_str(m)
631
+ @smods_rec.pub_date_groups(nil).should == nil
632
+ end
633
+ end#context pub date groups
634
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stanford-mods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-04-23 00:00:00.000000000 Z
13
+ date: 2013-06-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: mods
@@ -151,6 +151,7 @@ files:
151
151
  - lib/stanford-mods/version.rb
152
152
  - spec/kolb_spec.rb
153
153
  - spec/name_spec.rb
154
+ - spec/searchworks_gdor_spec.rb
154
155
  - spec/searchworks_spec.rb
155
156
  - spec/searchworks_subject_spec.rb
156
157
  - spec/spec_helper.rb
@@ -169,7 +170,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
169
170
  version: '0'
170
171
  segments:
171
172
  - 0
172
- hash: -2062019389592910625
173
+ hash: 823695280464572683
173
174
  required_rubygems_version: !ruby/object:Gem::Requirement
174
175
  none: false
175
176
  requirements:
@@ -178,16 +179,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
179
  version: '0'
179
180
  segments:
180
181
  - 0
181
- hash: -2062019389592910625
182
+ hash: 823695280464572683
182
183
  requirements: []
183
184
  rubyforge_project:
184
- rubygems_version: 1.8.24
185
+ rubygems_version: 1.8.25
185
186
  signing_key:
186
187
  specification_version: 3
187
188
  summary: Stanford specific wrangling of MODS metadata
188
189
  test_files:
189
190
  - spec/kolb_spec.rb
190
191
  - spec/name_spec.rb
192
+ - spec/searchworks_gdor_spec.rb
191
193
  - spec/searchworks_spec.rb
192
194
  - spec/searchworks_subject_spec.rb
193
195
  - spec/spec_helper.rb