stanford-mods 2.6.4 → 3.1.0

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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -1
  3. data/lib/stanford-mods/{geo_spatial.rb → concerns/geo_spatial.rb} +3 -5
  4. data/lib/stanford-mods/concerns/name.rb +57 -0
  5. data/lib/stanford-mods/concerns/origin_info.rb +113 -0
  6. data/lib/stanford-mods/{physical_location.rb → concerns/physical_location.rb} +2 -2
  7. data/lib/stanford-mods/concerns/searchworks.rb +125 -0
  8. data/lib/stanford-mods/concerns/searchworks_subjects.rb +126 -0
  9. data/lib/stanford-mods/concerns/title.rb +87 -0
  10. data/lib/stanford-mods/coordinate.rb +24 -3
  11. data/lib/stanford-mods/date_parsing.rb +32 -289
  12. data/lib/stanford-mods/imprint.rb +170 -322
  13. data/lib/stanford-mods/record.rb +20 -0
  14. data/lib/stanford-mods/version.rb +1 -1
  15. data/lib/stanford-mods/{searchworks_languages.rb → vocabularies/searchworks_languages.rb} +0 -0
  16. data/lib/stanford-mods.rb +12 -11
  17. data/spec/fixtures/searchworks_imprint_data.rb +38 -39
  18. data/spec/fixtures/searchworks_pub_date_data.rb +7 -7
  19. data/spec/fixtures/spotlight_pub_date_data.rb +7 -7
  20. data/spec/geo_spatial_spec.rb +1 -6
  21. data/spec/imprint_spec.rb +263 -207
  22. data/spec/lib/stanford-mods/coordinate_spec.rb +3 -5
  23. data/spec/name_spec.rb +26 -230
  24. data/spec/origin_info_spec.rb +34 -300
  25. data/spec/searchworks_basic_spec.rb +1 -3
  26. data/spec/searchworks_pub_dates_spec.rb +0 -215
  27. data/spec/searchworks_spec.rb +0 -21
  28. data/spec/searchworks_subject_raw_spec.rb +106 -105
  29. data/spec/searchworks_subject_spec.rb +19 -55
  30. data/spec/searchworks_title_spec.rb +5 -5
  31. data/stanford-mods.gemspec +1 -1
  32. metadata +19 -15
  33. data/lib/marc_countries.rb +0 -387
  34. data/lib/stanford-mods/geo_utils.rb +0 -28
  35. data/lib/stanford-mods/name.rb +0 -80
  36. data/lib/stanford-mods/origin_info.rb +0 -489
  37. data/lib/stanford-mods/searchworks.rb +0 -333
  38. data/lib/stanford-mods/searchworks_subjects.rb +0 -196
  39. data/spec/date_parsing_spec.rb +0 -905
@@ -1,7 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  describe "Searchworks mixin for Stanford::Mods::Record" do
3
3
  before(:all) do
4
- @smods_rec = Stanford::Mods::Record.new
5
4
  @ns_decl = "xmlns='#{Mods::MODS_NS}'"
6
5
  end
7
6
 
@@ -18,7 +17,10 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
18
17
  @temporal = 'temporal'
19
18
  @s_title = 'title in subject'
20
19
  @topic = 'topic'
21
- m = "<mods #{@ns_decl}>
20
+ end
21
+
22
+ let(:m) do
23
+ "<mods #{@ns_decl}>
22
24
  <genre>#{@genre}</genre>
23
25
  <subject><cartographics><coordinates>#{@cart_coord}</coordinates></cartographics></subject>
24
26
  <subject><genre>#{@s_genre}</genre></subject>
@@ -31,26 +33,30 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
31
33
  <subject><titleInfo><title>#{@s_title}</title></titleInfo></subject>
32
34
  <subject><topic>#{@topic}</topic></subject>
33
35
  </mods>"
36
+ end
37
+
38
+ before do
39
+ @smods_rec = Stanford::Mods::Record.new
34
40
  @smods_rec.from_str m
35
- @sw_geographic_search = @smods_rec.sw_geographic_search
36
- @sw_subject_titles = @smods_rec.sw_subject_titles
37
- @sw_subject_names = @smods_rec.sw_subject_names
38
41
  end
39
42
 
40
- context "sw_subject_names" do
43
+ context "subject_names" do
44
+ subject(:subject_names) do
45
+ @smods_rec.send(:subject_names)
46
+ end
41
47
  it "should contain <subject><name><namePart> values" do
42
- expect(@sw_subject_names).to include(@s_name)
48
+ expect(subject_names).to include(@s_name)
43
49
  end
44
50
  it "should not contain non-name subject subelements" do
45
- expect(@sw_subject_names).not_to include(@cart_coord)
46
- expect(@sw_subject_names).not_to include(@s_genre)
47
- expect(@sw_subject_names).not_to include(@geo)
48
- expect(@sw_subject_names).not_to include(@geo_code)
49
- expect(@sw_subject_names).not_to include(@hier_geo_country)
50
- expect(@sw_subject_names).not_to include(@occupation)
51
- expect(@sw_subject_names).not_to include(@temporal)
52
- expect(@sw_subject_names).not_to include(@topic)
53
- expect(@sw_subject_names).not_to include(@s_title)
51
+ expect(subject_names).not_to include(@cart_coord)
52
+ expect(subject_names).not_to include(@s_genre)
53
+ expect(subject_names).not_to include(@geo)
54
+ expect(subject_names).not_to include(@geo_code)
55
+ expect(subject_names).not_to include(@hier_geo_country)
56
+ expect(subject_names).not_to include(@occupation)
57
+ expect(subject_names).not_to include(@temporal)
58
+ expect(subject_names).not_to include(@topic)
59
+ expect(subject_names).not_to include(@s_title)
54
60
  end
55
61
  it "should not contain subject/name/role" do
56
62
  m = "<mods #{@ns_decl}>
@@ -63,7 +69,7 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
63
69
  </role>
64
70
  </name></subject></mods>"
65
71
  @smods_rec.from_str m
66
- expect(@smods_rec.sw_subject_names.find { |sn| sn =~ /cre/ }).to be_nil
72
+ expect(@smods_rec.send(:subject_names).find { |sn| sn =~ /cre/ }).to be_nil
67
73
  end
68
74
  it "should not contain subject/name/affiliation" do
69
75
  m = "<mods #{@ns_decl}>
@@ -73,7 +79,7 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
73
79
  <affiliation>Chemistry Dept., American University</affiliation>
74
80
  </name></subject></mods>"
75
81
  @smods_rec.from_str m
76
- expect(@smods_rec.sw_subject_names.find { |sn| sn =~ /Chemistry/ }).to be_nil
82
+ expect(@smods_rec.send(:subject_names).find { |sn| sn =~ /Chemistry/ }).to be_nil
77
83
  end
78
84
  it "should not contain subject/name/description" do
79
85
  m = "<mods #{@ns_decl}>
@@ -82,7 +88,7 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
82
88
  <description>American artist, 20th c.</description>
83
89
  </name></subject></mods>"
84
90
  @smods_rec.from_str m
85
- expect(@smods_rec.sw_subject_names.find { |sn| sn =~ /artist/ }).to be_nil
91
+ expect(@smods_rec.send(:subject_names).find { |sn| sn =~ /artist/ }).to be_nil
86
92
  end
87
93
  it "should not include top level name element" do
88
94
  m = "<mods #{@ns_decl}>
@@ -91,7 +97,7 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
91
97
  <description>American artist, 20th c.</description>
92
98
  </name></mods>"
93
99
  @smods_rec.from_str m
94
- expect(@smods_rec.sw_subject_names).to eq([])
100
+ expect(@smods_rec.send(:subject_names)).to eq([])
95
101
  end
96
102
  it "should have one value for each name element" do
97
103
  m = "<mods #{@ns_decl}>
@@ -104,59 +110,57 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
104
110
  </subject>
105
111
  </mods>"
106
112
  @smods_rec.from_str m
107
- expect(@smods_rec.sw_subject_names).to eq(['first', 'second', 'third'])
113
+ expect(@smods_rec.send(:subject_names)).to eq(['first', 'second', 'third'])
108
114
  end
109
115
  it "should be an empty Array if there are no values in the mods" do
110
116
  m = "<mods #{@ns_decl}><note>notit</note></mods>"
111
117
  @smods_rec.from_str m
112
- expect(@smods_rec.sw_subject_names).to eq([])
118
+ expect(@smods_rec.send(:subject_names)).to eq([])
113
119
  end
114
120
  it "should be an empty Array if there are empty values in the mods" do
115
121
  m = "<mods #{@ns_decl}><subject><name><namePart/></name></subject><note>notit</note></mods>"
116
122
  @smods_rec.from_str m
117
- expect(@smods_rec.sw_subject_names).to eq([])
123
+ expect(@smods_rec.send(:subject_names)).to eq([])
118
124
  end
119
125
  context "combining subelements" do
120
- before(:all) do
121
- m = "<mods #{@ns_decl}>
122
- <subject>
123
- <name>
124
- <namePart>first</namePart>
125
- <namePart>second</namePart>
126
- </name>
127
- </subject>
128
- </mods>"
129
- @smods_rec.from_str m
126
+ let(:m) do
127
+ "<mods #{@ns_decl}>
128
+ <subject>
129
+ <name>
130
+ <namePart>first</namePart>
131
+ <namePart>second</namePart>
132
+ </name>
133
+ </subject>
134
+ </mods>"
130
135
  end
131
136
 
132
137
  it "uses a ', ' as the separator by default" do
133
- expect(@smods_rec.sw_subject_names).to eq ['first, second']
134
- end
135
- it "honors any string value passed in for the separator" do
136
- expect(@smods_rec.sw_subject_names(' --')).to eq(['first --second'])
138
+ expect(@smods_rec.send(:subject_names)).to eq ['first, second']
137
139
  end
138
140
  end
139
- end # sw_subject_names
141
+ end
142
+
143
+ context "subject_titles" do
144
+ subject(:subject_titles) { @smods_rec.send(:subject_titles) }
140
145
 
141
- context "sw_subject_titles" do
142
146
  it "should contain <subject><titleInfo> subelement values" do
143
- expect(@sw_subject_titles).to include(@s_title)
147
+ expect(subject_titles).to include(@s_title)
144
148
  end
145
149
  it "should not contain non-name subject subelements" do
146
- expect(@sw_subject_titles).not_to include(@cart_coord)
147
- expect(@sw_subject_titles).not_to include(@s_genre)
148
- expect(@sw_subject_titles).not_to include(@geo)
149
- expect(@sw_subject_titles).not_to include(@geo_code)
150
- expect(@sw_subject_titles).not_to include(@hier_geo_country)
151
- expect(@sw_subject_titles).not_to include(@s_name)
152
- expect(@sw_subject_titles).not_to include(@occupation)
153
- expect(@sw_subject_titles).not_to include(@temporal)
154
- expect(@sw_subject_titles).not_to include(@topic)
150
+ expect(subject_titles).not_to include(@cart_coord)
151
+ expect(subject_titles).not_to include(@s_genre)
152
+ expect(subject_titles).not_to include(@geo)
153
+ expect(subject_titles).not_to include(@geo_code)
154
+ expect(subject_titles).not_to include(@hier_geo_country)
155
+ expect(subject_titles).not_to include(@s_name)
156
+ expect(subject_titles).not_to include(@occupation)
157
+ expect(subject_titles).not_to include(@temporal)
158
+ expect(subject_titles).not_to include(@topic)
155
159
  end
156
160
  it "should not include top level titleInfo element" do
157
161
  m = "<mods #{@ns_decl}><titleInfo><title>Oklahoma</title></titleInfo></mods>"
158
162
  @smods_rec.from_str m
159
- expect(@smods_rec.sw_subject_titles).to eq([])
163
+ expect(@smods_rec.send(:subject_titles)).to eq([])
160
164
  end
161
165
  it "should have one value for each titleInfo element" do
162
166
  m = "<mods #{@ns_decl}>
@@ -169,37 +173,34 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
169
173
  </subject>
170
174
  </mods>"
171
175
  @smods_rec.from_str m
172
- expect(@smods_rec.sw_subject_titles).to eq(['first', 'second', 'third'])
176
+ expect(@smods_rec.send(:subject_titles)).to eq(['first', 'second', 'third'])
173
177
  end
174
178
  it "should be an empty Array if there are no values in the mods" do
175
179
  m = "<mods #{@ns_decl}><note>notit</note></mods>"
176
180
  @smods_rec.from_str m
177
- expect(@smods_rec.sw_subject_titles).to eq([])
181
+ expect(@smods_rec.send(:subject_titles)).to eq([])
178
182
  end
179
183
  it "should be an empty Array if there are empty values in the mods" do
180
184
  m = "<mods #{@ns_decl}><subject><titleInfo><title/></titleInfo></subject><note>notit</note></mods>"
181
185
  @smods_rec.from_str m
182
- expect(@smods_rec.sw_subject_titles).to eq([])
186
+ expect(@smods_rec.send(:subject_titles)).to eq([])
183
187
  end
184
188
  context "combining subelements" do
185
- before(:all) do
186
- m = "<mods #{@ns_decl}>
187
- <subject>
188
- <titleInfo>
189
- <title>first</title>
190
- <subTitle>second</subTitle>
191
- </titleInfo>
192
- </subject>
193
- </mods>"
194
- @smods_rec.from_str m
189
+ let(:m) do
190
+ "<mods #{@ns_decl}>
191
+ <subject>
192
+ <titleInfo>
193
+ <title>first</title>
194
+ <subTitle>second</subTitle>
195
+ </titleInfo>
196
+ </subject>
197
+ </mods>"
195
198
  end
196
199
 
197
200
  it "uses a ' ' as the separator by default" do
198
- expect(@smods_rec.sw_subject_titles).to eq ['first second']
199
- end
200
- it "honors any string value passed in for the separator" do
201
- expect(@smods_rec.sw_subject_titles(' --')).to eq(['first --second'])
201
+ expect(@smods_rec.send(:subject_titles)).to eq ['first second']
202
202
  end
203
+
203
204
  it "includes all subelements in the order of occurrence" do
204
205
  m = "<mods #{@ns_decl}>
205
206
  <subject>
@@ -213,52 +214,54 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
213
214
  </subject>
214
215
  </mods>"
215
216
  @smods_rec.from_str m
216
- expect(@smods_rec.sw_subject_titles).to eq(['1 2 3 4 5'])
217
+ expect(@smods_rec.send(:subject_titles)).to eq(['1 2 3 4 5'])
217
218
  end
218
219
  end
219
- end # sw_subject_titles
220
+ end # subject_titles
220
221
 
221
222
  context "sw_geographic_search" do
223
+ subject(:geographic_search) { @smods_rec.geographic_search }
224
+
222
225
  it "should contain subject <geographic> subelement data" do
223
- expect(@sw_geographic_search).to include(@geo)
226
+ expect(geographic_search).to include(@geo)
224
227
  end
225
228
  it "should contain subject <hierarchicalGeographic> subelement data" do
226
- expect(@sw_geographic_search).to include(@hier_geo_country)
229
+ expect(geographic_search).to include(@hier_geo_country)
227
230
  end
228
231
  it "should contain translation of <geographicCode> subelement data with translated authorities" do
229
232
  m = "<mods #{@ns_decl}><subject><geographicCode authority='marcgac'>e-er</geographicCode></subject></mods>"
230
233
  @smods_rec.from_str m
231
- expect(@smods_rec.sw_geographic_search).to include('Estonia')
234
+ expect(@smods_rec.geographic_search).to include('Estonia')
232
235
  end
233
236
  it "should not contain other subject element data" do
234
- expect(@sw_geographic_search).not_to include(@genre)
235
- expect(@sw_geographic_search).not_to include(@cart_coord)
236
- expect(@sw_geographic_search).not_to include(@s_genre)
237
- expect(@sw_geographic_search).not_to include(@s_name)
238
- expect(@sw_geographic_search).not_to include(@occupation)
239
- expect(@sw_geographic_search).not_to include(@temporal)
240
- expect(@sw_geographic_search).not_to include(@topic)
241
- expect(@sw_geographic_search).not_to include(@s_title)
237
+ expect(geographic_search).not_to include(@genre)
238
+ expect(geographic_search).not_to include(@cart_coord)
239
+ expect(geographic_search).not_to include(@s_genre)
240
+ expect(geographic_search).not_to include(@s_name)
241
+ expect(geographic_search).not_to include(@occupation)
242
+ expect(geographic_search).not_to include(@temporal)
243
+ expect(geographic_search).not_to include(@topic)
244
+ expect(geographic_search).not_to include(@s_title)
242
245
  end
243
246
  it "should be [] if there are no values in the MODS" do
244
247
  m = "<mods #{@ns_decl}><note>notit</note></mods>"
245
248
  @smods_rec.from_str m
246
- expect(@smods_rec.sw_geographic_search).to eq([])
249
+ expect(@smods_rec.geographic_search).to eq([])
247
250
  end
248
251
  it "should not be empty Array if there are only subject/geographic elements" do
249
252
  m = "<mods #{@ns_decl}><subject><geographic>#{@geo}</geographic></subject></mods>"
250
253
  @smods_rec.from_str m
251
- expect(@smods_rec.sw_geographic_search).to eq([@geo])
254
+ expect(@smods_rec.geographic_search).to eq([@geo])
252
255
  end
253
256
  it "should not be empty Array if there are only subject/hierarchicalGeographic" do
254
257
  m = "<mods #{@ns_decl}><subject><hierarchicalGeographic><country>#{@hier_geo_country}</country></hierarchicalGeographic></subject></mods>"
255
258
  @smods_rec.from_str m
256
- expect(@smods_rec.sw_geographic_search).to eq([@hier_geo_country])
259
+ expect(@smods_rec.geographic_search).to eq([@hier_geo_country])
257
260
  end
258
261
  it "should not be empty Array if there are only subject/geographicCode elements" do
259
262
  m = "<mods #{@ns_decl}><subject><geographicCode authority='marcgac'>e-er</geographicCode></subject></mods>"
260
263
  @smods_rec.from_str m
261
- expect(@smods_rec.sw_geographic_search).to eq(['Estonia'])
264
+ expect(@smods_rec.geographic_search).to eq(['Estonia'])
262
265
  end
263
266
  context "geographic subelement" do
264
267
  it "should have a separate value for each geographic element" do
@@ -270,12 +273,12 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
270
273
  <subject><geographic>Washington (D.C.)</geographic></subject>
271
274
  </mods>"
272
275
  @smods_rec.from_str m
273
- expect(@smods_rec.sw_geographic_search).to eq(['Mississippi', 'Tippah County', 'Washington (D.C.)'])
276
+ expect(@smods_rec.geographic_search).to eq(['Mississippi', 'Tippah County', 'Washington (D.C.)'])
274
277
  end
275
278
  it "should be empty Array if there are only empty values in the MODS" do
276
279
  m = "<mods #{@ns_decl}><subject><geographic/></subject><note>notit</note></mods>"
277
280
  @smods_rec.from_str m
278
- expect(@smods_rec.sw_geographic_search).to eq([])
281
+ expect(@smods_rec.geographic_search).to eq([])
279
282
  end
280
283
  end
281
284
 
@@ -289,16 +292,16 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
289
292
  <subject><hierarchicalGeographic><area>third</area></hierarchicalGeographic></subject>
290
293
  </mods>"
291
294
  @smods_rec.from_str m
292
- expect(@smods_rec.sw_geographic_search).to eq(['first', 'second', 'third'])
295
+ expect(@smods_rec.geographic_search).to eq(['first', 'second', 'third'])
293
296
  end
294
297
  it "should be empty Array if there are only empty values in the MODS" do
295
298
  m = "<mods #{@ns_decl}><subject><hierarchicalGeographic/></subject><note>notit</note></mods>"
296
299
  @smods_rec.from_str m
297
- expect(@smods_rec.sw_geographic_search).to eq([])
300
+ expect(@smods_rec.geographic_search).to eq([])
298
301
  end
299
302
  context "combining subelements" do
300
- before(:all) do
301
- m = "<mods #{@ns_decl}>
303
+ let(:m) do
304
+ "<mods #{@ns_decl}>
302
305
  <subject>
303
306
  <hierarchicalGeographic>
304
307
  <country>Canada</country>
@@ -306,28 +309,26 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
306
309
  <city>Vancouver</city>
307
310
  </hierarchicalGeographic>
308
311
  </subject></mods>"
309
- @smods_rec.from_str m
310
312
  end
311
313
 
312
314
  it "uses a space as the separator by default" do
313
- expect(@smods_rec.sw_geographic_search).to eq ['Canada British Columbia Vancouver']
314
- end
315
- it "honors any string value passed in for the separator" do
316
- expect(@smods_rec.sw_geographic_search(' --')).to eq(['Canada --British Columbia --Vancouver'])
315
+ expect(@smods_rec.geographic_search).to eq ['Canada British Columbia Vancouver']
317
316
  end
318
317
  end
319
318
  end # hierarchicalGeographic
320
319
 
321
320
  context "geographicCode subelement" do
322
- before(:all) do
323
- m = "<mods #{@ns_decl}>
321
+ let(:m) do
322
+ "<mods #{@ns_decl}>
324
323
  <subject><geographicCode authority='marcgac'>n-us-md</geographicCode></subject>
325
324
  <subject><geographicCode authority='marcgac'>e-er</geographicCode></subject>
326
325
  <subject><geographicCode authority='marccountry'>mg</geographicCode></subject>
327
326
  <subject><geographicCode authority='iso3166'>us</geographicCode></subject>
328
327
  </mods>"
329
- @smods_rec.from_str m
330
- @geo_search_from_codes = @smods_rec.sw_geographic_search
328
+ end
329
+
330
+ before do
331
+ @geo_search_from_codes = @smods_rec.geographic_search
331
332
  end
332
333
 
333
334
  it "should not add untranslated values" do
@@ -354,12 +355,12 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
354
355
  <subject><geographicCode authority='marcgac'>n-us-md</geographicCode></subject>
355
356
  </mods>"
356
357
  @smods_rec.from_str m
357
- expect(@smods_rec.sw_geographic_search).to eq(['Estonia', 'Madagascar', 'Maryland'])
358
+ expect(@smods_rec.geographic_search).to eq(['Estonia', 'Madagascar', 'Maryland'])
358
359
  end
359
360
  it "should be empty Array if there are only empty values in the MODS" do
360
361
  m = "<mods #{@ns_decl}><subject><geographicCode/></subject><note>notit</note></mods>"
361
362
  @smods_rec.from_str m
362
- expect(@smods_rec.sw_geographic_search).to eq([])
363
+ expect(@smods_rec.geographic_search).to eq([])
363
364
  end
364
365
  it "should add the translated value if it wasn't present already" do
365
366
  m = "<mods #{@ns_decl}>
@@ -367,8 +368,8 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
367
368
  <subject><geographicCode authority='marcgac'>e-er</geographicCode></subject>
368
369
  </mods>"
369
370
  @smods_rec.from_str m
370
- expect(@smods_rec.sw_geographic_search.size).to eq(2)
371
- expect(@smods_rec.sw_geographic_search).to include('Estonia')
371
+ expect(@smods_rec.geographic_search.size).to eq(2)
372
+ expect(@smods_rec.geographic_search).to include('Estonia')
372
373
  end
373
374
  it "should not add the translated value if it was already present" do
374
375
  m = "<mods #{@ns_decl}>
@@ -376,8 +377,8 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
376
377
  <subject><geographicCode authority='marcgac'>e-er</geographicCode></subject>
377
378
  </mods>"
378
379
  @smods_rec.from_str m
379
- expect(@smods_rec.sw_geographic_search.size).to eq(1)
380
- expect(@smods_rec.sw_geographic_search).to eq(['Estonia'])
380
+ expect(@smods_rec.geographic_search.size).to eq(1)
381
+ expect(@smods_rec.geographic_search).to eq(['Estonia'])
381
382
  end
382
383
  end
383
384
  end # sw_geographic_search
@@ -26,11 +26,14 @@ describe "Subject fields (searchworks.rb)" do
26
26
  <subject><titleInfo><title>#{@s_title}</title></titleInfo></subject>
27
27
  <subject><topic>#{@topic}</topic></subject>
28
28
  </mods>"
29
+ m_no_subject = "<mods #{@ns_decl}><note>notit</note></mods>"
30
+ @ng_mods_no_subject = Nokogiri::XML(m_no_subject)
31
+ end
32
+
33
+ before(:each) do
29
34
  @smods_rec = Stanford::Mods::Record.new
30
35
  @smods_rec.from_str(@subject_mods)
31
36
  @ng_mods = Nokogiri::XML(@subject_mods)
32
- m_no_subject = "<mods #{@ns_decl}><note>notit</note></mods>"
33
- @ng_mods_no_subject = Nokogiri::XML(m_no_subject)
34
37
  end
35
38
 
36
39
  context "search fields" do
@@ -39,7 +42,7 @@ describe "Subject fields (searchworks.rb)" do
39
42
  m = "<mods #{@ns_decl}></mods>"
40
43
  @smods_rec = Stanford::Mods::Record.new
41
44
  @smods_rec.from_str(m)
42
- expect(@smods_rec.topic_search).to be_nil
45
+ expect(@smods_rec.topic_search).to eq []
43
46
  end
44
47
  it "should contain subject <topic> subelement data" do
45
48
  expect(@smods_rec.topic_search).to include(@topic)
@@ -74,48 +77,21 @@ describe "Subject fields (searchworks.rb)" do
74
77
  @smods_rec.from_str(m)
75
78
  expect(@smods_rec.topic_search).to eq(['first', 'second', 'third'])
76
79
  end
77
- it "should be nil if there are only empty values in the MODS" do
80
+ it "should be empty if there are only empty values in the MODS" do
78
81
  m = "<mods #{@ns_decl}><subject><topic/></subject><note>notit</note></mods>"
79
82
  @smods_rec = Stanford::Mods::Record.new
80
83
  @smods_rec.from_str(m)
81
- expect(@smods_rec.topic_search).to be_nil
84
+ expect(@smods_rec.topic_search).to eq []
82
85
  end
83
86
  end
84
87
  end # topic_search
85
88
 
86
- context "geographic_search" do
87
- it "should call sw_geographic_search (from stanford-mods gem)" do
88
- m = "<mods #{@ns_decl}><subject><geographic>#{@geo}</geographic></subject></mods>"
89
- @smods_rec = Stanford::Mods::Record.new
90
- @smods_rec.from_str(m)
91
- expect(@smods_rec).to receive(:sw_geographic_search)
92
- @smods_rec.geographic_search
93
- end
94
- it "should log an info message when it encounters a geographicCode encoding it doesn't translate" do
95
- m = "<mods #{@ns_decl}><subject><geographicCode authority='iso3166'>ca</geographicCode></subject></mods>"
96
- @smods_rec = Stanford::Mods::Record.new
97
- @smods_rec.from_str(m)
98
- expect(@smods_rec.sw_logger).to receive(:info).with(/ has subject geographicCode element with untranslated encoding \(iso3166\): <geographicCode authority=.*>ca<\/geographicCode>/)
99
- @smods_rec.geographic_search
100
- end
101
- end # geographic_search
102
-
103
89
  context "subject_other_search" do
104
- it "should call sw_subject_names (from stanford-mods gem)" do
105
- smods_rec = Stanford::Mods::Record.new
106
- smods_rec.from_str(@subject_mods)
107
- expect(smods_rec).to receive(:sw_subject_names)
108
- smods_rec.subject_other_search
109
- end
110
- it "should call sw_subject_titles (from stanford-mods gem)" do
111
- expect(@smods_rec).to receive(:sw_subject_titles)
112
- @smods_rec.subject_other_search
113
- end
114
90
  it "should be nil if there are no values in the MODS" do
115
91
  m = "<mods #{@ns_decl}></mods>"
116
92
  @smods_rec = Stanford::Mods::Record.new
117
93
  @smods_rec.from_str(m)
118
- expect(@smods_rec.subject_other_search).to be_nil
94
+ expect(@smods_rec.subject_other_search).to eq []
119
95
  end
120
96
  it "should contain subject <name> SUBelement data" do
121
97
  expect(@smods_rec.subject_other_search).to include(@s_name)
@@ -173,7 +149,7 @@ describe "Subject fields (searchworks.rb)" do
173
149
  m = "<mods #{@ns_decl}><subject><occupation/></subject><note>notit</note></mods>"
174
150
  @smods_rec = Stanford::Mods::Record.new
175
151
  @smods_rec.from_str(m)
176
- expect(@smods_rec.subject_other_search).to be_nil
152
+ expect(@smods_rec.subject_other_search).to eq []
177
153
  end
178
154
  end
179
155
  end # subject_other_search
@@ -182,7 +158,7 @@ describe "Subject fields (searchworks.rb)" do
182
158
  it "should be nil if there are no values in the MODS" do
183
159
  @smods_rec = Stanford::Mods::Record.new
184
160
  @smods_rec.from_str(@ng_mods_no_subject.to_s)
185
- expect(@smods_rec.subject_other_subvy_search).to be_nil
161
+ expect(@smods_rec.subject_other_subvy_search).to eq []
186
162
  end
187
163
  it "should contain subject <temporal> subelement data" do
188
164
  expect(@smods_rec.subject_other_subvy_search).to include(@temporal)
@@ -226,18 +202,11 @@ describe "Subject fields (searchworks.rb)" do
226
202
  @smods_rec.from_str(m)
227
203
  expect(@smods_rec.subject_other_subvy_search).to eq(['1890-1910', '20th century', 'another'])
228
204
  end
229
- it "should log an info message when it encounters an encoding it doesn't translate" do
230
- m = "<mods #{@ns_decl}><subject><temporal encoding='iso8601'>197505</temporal></subject></mods>"
231
- @smods_rec = Stanford::Mods::Record.new
232
- @smods_rec.from_str(m)
233
- expect(@smods_rec.sw_logger).to receive(:info).with(/ has subject temporal element with untranslated encoding: <temporal encoding=.*>197505<\/temporal>/)
234
- @smods_rec.subject_other_subvy_search
235
- end
236
205
  it "should be nil if there are only empty values in the MODS" do
237
206
  m = "<mods #{@ns_decl}><subject><temporal/></subject><note>notit</note></mods>"
238
207
  @smods_rec = Stanford::Mods::Record.new
239
208
  @smods_rec.from_str(m)
240
- expect(@smods_rec.subject_other_subvy_search).to be_nil
209
+ expect(@smods_rec.subject_other_subvy_search).to eq []
241
210
  end
242
211
  end
243
212
 
@@ -258,20 +227,16 @@ describe "Subject fields (searchworks.rb)" do
258
227
  m = "<mods #{@ns_decl}><subject><genre/></subject><note>notit</note></mods>"
259
228
  @smods_rec = Stanford::Mods::Record.new
260
229
  @smods_rec.from_str(m)
261
- expect(@smods_rec.subject_other_subvy_search).to be_nil
230
+ expect(@smods_rec.subject_other_subvy_search).to eq []
262
231
  end
263
232
  end
264
233
  end # subject_other_subvy_search
265
234
 
266
235
  context "subject_all_search" do
267
- before :each do
268
- allow(@smods_rec.sw_logger).to receive(:info).with(/ has subject geographicCode element with untranslated encoding \(iso3166\): <geographicCode authority=.*>us<\/geographicCode>/)
269
- end
270
-
271
236
  it "should be nil if there are no values in the MODS" do
272
237
  @smods_rec = Stanford::Mods::Record.new
273
238
  @smods_rec.from_str(@ng_mods_no_subject.to_s)
274
- expect(@smods_rec.subject_all_search).to be_nil
239
+ expect(@smods_rec.subject_all_search).to eq []
275
240
  end
276
241
  it "should not contain cartographic sub element" do
277
242
  expect(@smods_rec.subject_all_search).not_to include(@cart_coord)
@@ -283,7 +248,6 @@ describe "Subject fields (searchworks.rb)" do
283
248
  @smods_rec = Stanford::Mods::Record.new
284
249
  @smods_rec.from_str(@subject_mods)
285
250
  ## need to re-allow/expect :info message with newly assigned object
286
- expect(@smods_rec.sw_logger).to receive(:info).with(/ has subject geographicCode element with untranslated encoding \(iso3166\): <geographicCode authority=.*>us<\/geographicCode>/)
287
251
  expect(@smods_rec.subject_all_search).to include(@s_genre)
288
252
  expect(@smods_rec.subject_all_search).to include(@geo)
289
253
  expect(@smods_rec.subject_all_search).to include(@hier_geo_country)
@@ -327,7 +291,7 @@ describe "Subject fields (searchworks.rb)" do
327
291
  it "should be nil if there are no values" do
328
292
  @smods_rec = Stanford::Mods::Record.new
329
293
  @smods_rec.from_str(@ng_mods_no_subject.to_s)
330
- expect(@smods_rec.topic_facet).to be_nil
294
+ expect(@smods_rec.topic_facet).to eq []
331
295
  end
332
296
  end
333
297
 
@@ -351,10 +315,10 @@ describe "Subject fields (searchworks.rb)" do
351
315
  expect(@smods_rec.geographic_facet).to include('backslash')
352
316
  expect(@smods_rec.geographic_facet).to include('internal, punct;uation')
353
317
  end
354
- it "should be nil if there are no values" do
318
+ it "should be empty if there are no values" do
355
319
  @smods_rec = Stanford::Mods::Record.new
356
320
  @smods_rec.from_str(@ng_mods_no_subject.to_s)
357
- expect(@smods_rec.geographic_facet).to be_nil
321
+ expect(@smods_rec.geographic_facet).to eq []
358
322
  end
359
323
  end
360
324
 
@@ -373,10 +337,10 @@ describe "Subject fields (searchworks.rb)" do
373
337
  expect(@smods_rec.era_facet).to include('backslash')
374
338
  expect(@smods_rec.era_facet).to include('internal, punct;uation')
375
339
  end
376
- it "should be nil if there are no values" do
340
+ it "should be empty if there are no values" do
377
341
  @smods_rec = Stanford::Mods::Record.new
378
342
  @smods_rec.from_str(@ng_mods_no_subject.to_s)
379
- expect(@smods_rec.era_facet).to be_nil
343
+ expect(@smods_rec.era_facet).to eq []
380
344
  end
381
345
  end
382
346
  end # facet fields
@@ -3,7 +3,7 @@ describe 'title fields (searchworks.rb)' do
3
3
  before(:all) do
4
4
  @smods_rec = Stanford::Mods::Record.new
5
5
  @ns_decl = "xmlns='#{Mods::MODS_NS}'"
6
- m = "<mods #{@ns_decl}><titleInfo><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle><nonSort>The</nonSort></titleInfo></mods>"
6
+ m = "<mods #{@ns_decl}><titleInfo><nonSort>The</nonSort><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle></titleInfo></mods>"
7
7
  @smods_rec.from_str m
8
8
  end
9
9
 
@@ -19,7 +19,7 @@ describe 'title fields (searchworks.rb)' do
19
19
 
20
20
  context 'blank title node' do
21
21
  it 'should deal with a second blank titleInfo node' do
22
- m = "<mods #{@ns_decl}><titleInfo> </titleInfo><otherStuff>goes here</otherStuff><titleInfo><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle><nonSort>The</nonSort></titleInfo></mods>"
22
+ m = "<mods #{@ns_decl}><titleInfo> </titleInfo><otherStuff>goes here</otherStuff><titleInfo><nonSort>The</nonSort><title>Jerk</title><subTitle>A Tale of Tourettes</subTitle>></titleInfo></mods>"
23
23
  smods_rec_blank_node = Stanford::Mods::Record.new
24
24
  smods_rec_blank_node.from_str m
25
25
  expect(smods_rec_blank_node.sw_short_title).to eq 'The Jerk'
@@ -113,7 +113,7 @@ describe 'title fields (searchworks.rb)' do
113
113
  <subTitle>a history</subTitle>
114
114
  </titleInfo></mods>"
115
115
  @smods_rec.from_str(m)
116
- expect(@smods_rec.sw_full_title).to eq 'The Olympics : a history.'
116
+ expect(@smods_rec.sw_full_title).to eq 'The Olympics: a history.'
117
117
  end #
118
118
  # "end subtitle with period" - see above
119
119
  it 'subtitle already ends with period' do
@@ -389,7 +389,7 @@ describe 'title fields (searchworks.rb)' do
389
389
  <subTitle>a history</subTitle>
390
390
  </titleInfo></mods>"
391
391
  @smods_rec.from_str(m)
392
- expect(@smods_rec.sw_title_display).to eq 'The Olympics : a history'
392
+ expect(@smods_rec.sw_title_display).to eq 'The Olympics: a history'
393
393
  end #
394
394
  # "end subtitle with period" - see above
395
395
  it 'subtitle already ends with period' do
@@ -680,7 +680,7 @@ describe 'title fields (searchworks.rb)' do
680
680
  end
681
681
  it 'additional titles' do
682
682
  expect(@mccarthy_smods_rec.sw_addl_titles).to eql []
683
- expect(@insp_general_smods_rec.sw_addl_titles).to eql []
683
+ expect(@insp_general_smods_rec.sw_addl_titles).to eql ['Semiannual report to Congress (Online)']
684
684
  expect(@cfb_smods_rec.sw_addl_titles).to eql []
685
685
  expect(@all_smods_rec.sw_addl_titles).to eql []
686
686
  end
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.test_files = gem.files.grep(%r{^spec/})
17
17
  gem.require_paths = ["lib"]
18
18
 
19
- gem.add_dependency 'mods', '~> 2.2'
19
+ gem.add_dependency 'mods', '~> 3.0', '>= 3.0.1'
20
20
  # active_support for .ordinalize, eg. 1 -> 1st, 2 -> 2nd for centuries
21
21
  gem.add_dependency 'activesupport'
22
22