stanford-mods 1.1.2 → 1.1.3
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 +4 -4
- data/.rspec +1 -0
- data/README.rdoc +12 -13
- data/Rakefile +3 -5
- data/config/mappings_hash.rb +22 -23
- data/lib/stanford-mods/searchworks.rb +91 -93
- data/lib/stanford-mods/version.rb +1 -1
- data/lib/stanford-mods.rb +7 -7
- data/spec/name_spec.rb +43 -43
- data/spec/searchworks_basic_spec.rb +49 -0
- data/spec/searchworks_format_spec.rb +7 -7
- data/spec/searchworks_pub_dates_spec.rb +50 -52
- data/spec/searchworks_spec.rb +25 -25
- data/spec/searchworks_subject_raw_spec.rb +83 -83
- data/spec/searchworks_subject_spec.rb +97 -93
- data/spec/searchworks_title_spec.rb +10 -10
- data/stanford-mods.gemspec +10 -10
- metadata +24 -21
@@ -32,28 +32,28 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
32
32
|
<subject><occupation>#{@occupation}</occupation></subject>
|
33
33
|
<subject><temporal>#{@temporal}</temporal></subject>
|
34
34
|
<subject><titleInfo><title>#{@s_title}</title></titleInfo></subject>
|
35
|
-
<subject><topic>#{@topic}</topic></subject>
|
35
|
+
<subject><topic>#{@topic}</topic></subject>
|
36
36
|
</mods>"
|
37
37
|
@smods_rec.from_str m
|
38
|
-
@sw_geographic_search = @smods_rec.sw_geographic_search
|
39
|
-
@sw_subject_titles
|
40
|
-
@sw_subject_names
|
38
|
+
@sw_geographic_search = @smods_rec.sw_geographic_search
|
39
|
+
@sw_subject_titles = @smods_rec.sw_subject_titles
|
40
|
+
@sw_subject_names = @smods_rec.sw_subject_names
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
context "sw_subject_names" do
|
44
44
|
it "should contain <subject><name><namePart> values" do
|
45
|
-
@sw_subject_names.
|
45
|
+
expect(@sw_subject_names).to include(@s_name)
|
46
46
|
end
|
47
47
|
it "should not contain non-name subject subelements" do
|
48
|
-
@sw_subject_names.
|
49
|
-
@sw_subject_names.
|
50
|
-
@sw_subject_names.
|
51
|
-
@sw_subject_names.
|
52
|
-
@sw_subject_names.
|
53
|
-
@sw_subject_names.
|
54
|
-
@sw_subject_names.
|
55
|
-
@sw_subject_names.
|
56
|
-
@sw_subject_names.
|
48
|
+
expect(@sw_subject_names).not_to include(@cart_coord)
|
49
|
+
expect(@sw_subject_names).not_to include(@s_genre)
|
50
|
+
expect(@sw_subject_names).not_to include(@geo)
|
51
|
+
expect(@sw_subject_names).not_to include(@geo_code)
|
52
|
+
expect(@sw_subject_names).not_to include(@hier_geo_country)
|
53
|
+
expect(@sw_subject_names).not_to include(@occupation)
|
54
|
+
expect(@sw_subject_names).not_to include(@temporal)
|
55
|
+
expect(@sw_subject_names).not_to include(@topic)
|
56
|
+
expect(@sw_subject_names).not_to include(@s_title)
|
57
57
|
end
|
58
58
|
it "should not contain subject/name/role" do
|
59
59
|
m = "<mods #{@ns_decl}>
|
@@ -66,7 +66,7 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
66
66
|
</role>
|
67
67
|
</name></subject></mods>"
|
68
68
|
@smods_rec.from_str m
|
69
|
-
@smods_rec.sw_subject_names.find { |sn| sn =~ /cre/ }.
|
69
|
+
expect(@smods_rec.sw_subject_names.find { |sn| sn =~ /cre/ }).to be_nil
|
70
70
|
end
|
71
71
|
it "should not contain subject/name/affiliation" do
|
72
72
|
m = "<mods #{@ns_decl}>
|
@@ -76,7 +76,7 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
76
76
|
<affiliation>Chemistry Dept., American University</affiliation>
|
77
77
|
</name></subject></mods>"
|
78
78
|
@smods_rec.from_str m
|
79
|
-
@smods_rec.sw_subject_names.find { |sn| sn =~ /Chemistry/ }.
|
79
|
+
expect(@smods_rec.sw_subject_names.find { |sn| sn =~ /Chemistry/ }).to be_nil
|
80
80
|
end
|
81
81
|
it "should not contain subject/name/description" do
|
82
82
|
m = "<mods #{@ns_decl}>
|
@@ -85,7 +85,7 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
85
85
|
<description>American artist, 20th c.</description>
|
86
86
|
</name></subject></mods>"
|
87
87
|
@smods_rec.from_str m
|
88
|
-
@smods_rec.sw_subject_names.find { |sn| sn =~ /artist/ }.
|
88
|
+
expect(@smods_rec.sw_subject_names.find { |sn| sn =~ /artist/ }).to be_nil
|
89
89
|
end
|
90
90
|
it "should not include top level name element" do
|
91
91
|
m = "<mods #{@ns_decl}>
|
@@ -94,7 +94,7 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
94
94
|
<description>American artist, 20th c.</description>
|
95
95
|
</name></mods>"
|
96
96
|
@smods_rec.from_str m
|
97
|
-
@smods_rec.sw_subject_names.
|
97
|
+
expect(@smods_rec.sw_subject_names).to eq([])
|
98
98
|
end
|
99
99
|
it "should have one value for each name element" do
|
100
100
|
m = "<mods #{@ns_decl}>
|
@@ -107,17 +107,17 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
107
107
|
</subject>
|
108
108
|
</mods>"
|
109
109
|
@smods_rec.from_str m
|
110
|
-
@smods_rec.sw_subject_names.
|
110
|
+
expect(@smods_rec.sw_subject_names).to eq(['first', 'second', 'third'])
|
111
111
|
end
|
112
112
|
it "should be an empty Array if there are no values in the mods" do
|
113
113
|
m = "<mods #{@ns_decl}><note>notit</note></mods>"
|
114
114
|
@smods_rec.from_str m
|
115
|
-
@smods_rec.sw_subject_names.
|
115
|
+
expect(@smods_rec.sw_subject_names).to eq([])
|
116
116
|
end
|
117
117
|
it "should be an empty Array if there are empty values in the mods" do
|
118
118
|
m = "<mods #{@ns_decl}><subject><name><namePart/></name></subject><note>notit</note></mods>"
|
119
119
|
@smods_rec.from_str m
|
120
|
-
@smods_rec.sw_subject_names.
|
120
|
+
expect(@smods_rec.sw_subject_names).to eq([])
|
121
121
|
end
|
122
122
|
context "combining subelements" do
|
123
123
|
before(:all) do
|
@@ -132,33 +132,33 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
132
132
|
@smods_rec.from_str m
|
133
133
|
end
|
134
134
|
it "uses a ', ' as the separator by default" do
|
135
|
-
@smods_rec.sw_subject_names.
|
136
|
-
end
|
135
|
+
expect(@smods_rec.sw_subject_names).to eq ['first, second']
|
136
|
+
end
|
137
137
|
it "honors any string value passed in for the separator" do
|
138
|
-
@smods_rec.sw_subject_names(' --').
|
138
|
+
expect(@smods_rec.sw_subject_names(' --')).to eq(['first --second'])
|
139
139
|
end
|
140
140
|
end
|
141
141
|
end # sw_subject_names
|
142
|
-
|
142
|
+
|
143
143
|
context "sw_subject_titles" do
|
144
144
|
it "should contain <subject><titleInfo> subelement values" do
|
145
|
-
@sw_subject_titles.
|
145
|
+
expect(@sw_subject_titles).to include(@s_title)
|
146
146
|
end
|
147
147
|
it "should not contain non-name subject subelements" do
|
148
|
-
@sw_subject_titles.
|
149
|
-
@sw_subject_titles.
|
150
|
-
@sw_subject_titles.
|
151
|
-
@sw_subject_titles.
|
152
|
-
@sw_subject_titles.
|
153
|
-
@sw_subject_titles.
|
154
|
-
@sw_subject_titles.
|
155
|
-
@sw_subject_titles.
|
156
|
-
@sw_subject_titles.
|
148
|
+
expect(@sw_subject_titles).not_to include(@cart_coord)
|
149
|
+
expect(@sw_subject_titles).not_to include(@s_genre)
|
150
|
+
expect(@sw_subject_titles).not_to include(@geo)
|
151
|
+
expect(@sw_subject_titles).not_to include(@geo_code)
|
152
|
+
expect(@sw_subject_titles).not_to include(@hier_geo_country)
|
153
|
+
expect(@sw_subject_titles).not_to include(@s_name)
|
154
|
+
expect(@sw_subject_titles).not_to include(@occupation)
|
155
|
+
expect(@sw_subject_titles).not_to include(@temporal)
|
156
|
+
expect(@sw_subject_titles).not_to include(@topic)
|
157
157
|
end
|
158
158
|
it "should not include top level titleInfo element" do
|
159
159
|
m = "<mods #{@ns_decl}><titleInfo><title>Oklahoma</title></titleInfo></mods>"
|
160
160
|
@smods_rec.from_str m
|
161
|
-
@smods_rec.sw_subject_titles.
|
161
|
+
expect(@smods_rec.sw_subject_titles).to eq([])
|
162
162
|
end
|
163
163
|
it "should have one value for each titleInfo element" do
|
164
164
|
m = "<mods #{@ns_decl}>
|
@@ -171,17 +171,17 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
171
171
|
</subject>
|
172
172
|
</mods>"
|
173
173
|
@smods_rec.from_str m
|
174
|
-
@smods_rec.sw_subject_titles.
|
174
|
+
expect(@smods_rec.sw_subject_titles).to eq(['first', 'second', 'third'])
|
175
175
|
end
|
176
176
|
it "should be an empty Array if there are no values in the mods" do
|
177
177
|
m = "<mods #{@ns_decl}><note>notit</note></mods>"
|
178
178
|
@smods_rec.from_str m
|
179
|
-
@smods_rec.sw_subject_titles.
|
179
|
+
expect(@smods_rec.sw_subject_titles).to eq([])
|
180
180
|
end
|
181
181
|
it "should be an empty Array if there are empty values in the mods" do
|
182
182
|
m = "<mods #{@ns_decl}><subject><titleInfo><title/></titleInfo></subject><note>notit</note></mods>"
|
183
183
|
@smods_rec.from_str m
|
184
|
-
@smods_rec.sw_subject_titles.
|
184
|
+
expect(@smods_rec.sw_subject_titles).to eq([])
|
185
185
|
end
|
186
186
|
context "combining subelements" do
|
187
187
|
before(:all) do
|
@@ -196,10 +196,10 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
196
196
|
@smods_rec.from_str m
|
197
197
|
end
|
198
198
|
it "uses a ' ' as the separator by default" do
|
199
|
-
@smods_rec.sw_subject_titles.
|
200
|
-
end
|
199
|
+
expect(@smods_rec.sw_subject_titles).to eq ['first second']
|
200
|
+
end
|
201
201
|
it "honors any string value passed in for the separator" do
|
202
|
-
@smods_rec.sw_subject_titles(' --').
|
202
|
+
expect(@smods_rec.sw_subject_titles(' --')).to eq(['first --second'])
|
203
203
|
end
|
204
204
|
it "includes all subelements in the order of occurrence" do
|
205
205
|
m = "<mods #{@ns_decl}>
|
@@ -214,53 +214,53 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
214
214
|
</subject>
|
215
215
|
</mods>"
|
216
216
|
@smods_rec.from_str m
|
217
|
-
@smods_rec.sw_subject_titles.
|
217
|
+
expect(@smods_rec.sw_subject_titles).to eq(['1 2 3 4 5'])
|
218
218
|
end
|
219
219
|
end
|
220
220
|
end # sw_subject_titles
|
221
|
-
|
222
|
-
|
221
|
+
|
222
|
+
|
223
223
|
context "sw_geographic_search" do
|
224
224
|
it "should contain subject <geographic> subelement data" do
|
225
|
-
@sw_geographic_search.
|
225
|
+
expect(@sw_geographic_search).to include(@geo)
|
226
226
|
end
|
227
227
|
it "should contain subject <hierarchicalGeographic> subelement data" do
|
228
|
-
@sw_geographic_search.
|
228
|
+
expect(@sw_geographic_search).to include(@hier_geo_country)
|
229
229
|
end
|
230
230
|
it "should contain translation of <geographicCode> subelement data with translated authorities" do
|
231
231
|
m = "<mods #{@ns_decl}><subject><geographicCode authority='marcgac'>e-er</geographicCode></subject></mods>"
|
232
232
|
@smods_rec.from_str m
|
233
|
-
@smods_rec.sw_geographic_search.
|
233
|
+
expect(@smods_rec.sw_geographic_search).to include('Estonia')
|
234
234
|
end
|
235
235
|
it "should not contain other subject element data" do
|
236
|
-
@sw_geographic_search.
|
237
|
-
@sw_geographic_search.
|
238
|
-
@sw_geographic_search.
|
239
|
-
@sw_geographic_search.
|
240
|
-
@sw_geographic_search.
|
241
|
-
@sw_geographic_search.
|
242
|
-
@sw_geographic_search.
|
243
|
-
@sw_geographic_search.
|
236
|
+
expect(@sw_geographic_search).not_to include(@genre)
|
237
|
+
expect(@sw_geographic_search).not_to include(@cart_coord)
|
238
|
+
expect(@sw_geographic_search).not_to include(@s_genre)
|
239
|
+
expect(@sw_geographic_search).not_to include(@s_name)
|
240
|
+
expect(@sw_geographic_search).not_to include(@occupation)
|
241
|
+
expect(@sw_geographic_search).not_to include(@temporal)
|
242
|
+
expect(@sw_geographic_search).not_to include(@topic)
|
243
|
+
expect(@sw_geographic_search).not_to include(@s_title)
|
244
244
|
end
|
245
245
|
it "should be [] if there are no values in the MODS" do
|
246
246
|
m = "<mods #{@ns_decl}><note>notit</note></mods>"
|
247
247
|
@smods_rec.from_str m
|
248
|
-
@smods_rec.sw_geographic_search.
|
248
|
+
expect(@smods_rec.sw_geographic_search).to eq([])
|
249
249
|
end
|
250
250
|
it "should not be empty Array if there are only subject/geographic elements" do
|
251
251
|
m = "<mods #{@ns_decl}><subject><geographic>#{@geo}</geographic></subject></mods>"
|
252
252
|
@smods_rec.from_str m
|
253
|
-
@smods_rec.sw_geographic_search.
|
253
|
+
expect(@smods_rec.sw_geographic_search).to eq([@geo])
|
254
254
|
end
|
255
255
|
it "should not be empty Array if there are only subject/hierarchicalGeographic" do
|
256
256
|
m = "<mods #{@ns_decl}><subject><hierarchicalGeographic><country>#{@hier_geo_country}</country></hierarchicalGeographic></subject></mods>"
|
257
257
|
@smods_rec.from_str m
|
258
|
-
@smods_rec.sw_geographic_search.
|
258
|
+
expect(@smods_rec.sw_geographic_search).to eq([@hier_geo_country])
|
259
259
|
end
|
260
260
|
it "should not be empty Array if there are only subject/geographicCode elements" do
|
261
261
|
m = "<mods #{@ns_decl}><subject><geographicCode authority='marcgac'>e-er</geographicCode></subject></mods>"
|
262
262
|
@smods_rec.from_str m
|
263
|
-
@smods_rec.sw_geographic_search.
|
263
|
+
expect(@smods_rec.sw_geographic_search).to eq(['Estonia'])
|
264
264
|
end
|
265
265
|
context "geographic subelement" do
|
266
266
|
it "should have a separate value for each geographic element" do
|
@@ -272,12 +272,12 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
272
272
|
<subject><geographic>Washington (D.C.)</geographic></subject>
|
273
273
|
</mods>"
|
274
274
|
@smods_rec.from_str m
|
275
|
-
@smods_rec.sw_geographic_search.
|
275
|
+
expect(@smods_rec.sw_geographic_search).to eq(['Mississippi', 'Tippah County', 'Washington (D.C.)'])
|
276
276
|
end
|
277
277
|
it "should be empty Array if there are only empty values in the MODS" do
|
278
278
|
m = "<mods #{@ns_decl}><subject><geographic/></subject><note>notit</note></mods>"
|
279
279
|
@smods_rec.from_str m
|
280
|
-
@smods_rec.sw_geographic_search.
|
280
|
+
expect(@smods_rec.sw_geographic_search).to eq([])
|
281
281
|
end
|
282
282
|
end
|
283
283
|
context "hierarchicalGeographic subelement" do
|
@@ -290,12 +290,12 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
290
290
|
<subject><hierarchicalGeographic><area>third</area></hierarchicalGeographic></subject>
|
291
291
|
</mods>"
|
292
292
|
@smods_rec.from_str m
|
293
|
-
@smods_rec.sw_geographic_search.
|
293
|
+
expect(@smods_rec.sw_geographic_search).to eq(['first', 'second', 'third'])
|
294
294
|
end
|
295
295
|
it "should be empty Array if there are only empty values in the MODS" do
|
296
296
|
m = "<mods #{@ns_decl}><subject><hierarchicalGeographic/></subject><note>notit</note></mods>"
|
297
297
|
@smods_rec.from_str m
|
298
|
-
@smods_rec.sw_geographic_search.
|
298
|
+
expect(@smods_rec.sw_geographic_search).to eq([])
|
299
299
|
end
|
300
300
|
context "combining subelements" do
|
301
301
|
before(:all) do
|
@@ -310,10 +310,10 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
310
310
|
@smods_rec.from_str m
|
311
311
|
end
|
312
312
|
it "uses a space as the separator by default" do
|
313
|
-
@smods_rec.sw_geographic_search.
|
314
|
-
end
|
313
|
+
expect(@smods_rec.sw_geographic_search).to eq ['Canada British Columbia Vancouver']
|
314
|
+
end
|
315
315
|
it "honors any string value passed in for the separator" do
|
316
|
-
@smods_rec.sw_geographic_search(' --').
|
316
|
+
expect(@smods_rec.sw_geographic_search(' --')).to eq(['Canada --British Columbia --Vancouver'])
|
317
317
|
end
|
318
318
|
end
|
319
319
|
end # hierarchicalGeographic
|
@@ -326,22 +326,22 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
326
326
|
<subject><geographicCode authority='iso3166'>us</geographicCode></subject>
|
327
327
|
</mods>"
|
328
328
|
@smods_rec.from_str m
|
329
|
-
@geo_search_from_codes = @smods_rec.sw_geographic_search
|
329
|
+
@geo_search_from_codes = @smods_rec.sw_geographic_search
|
330
330
|
end
|
331
331
|
it "should not add untranslated values" do
|
332
|
-
@geo_search_from_codes.
|
333
|
-
@geo_search_from_codes.
|
334
|
-
@geo_search_from_codes.
|
335
|
-
@geo_search_from_codes.
|
332
|
+
expect(@geo_search_from_codes).not_to include('n-us-md')
|
333
|
+
expect(@geo_search_from_codes).not_to include('e-er')
|
334
|
+
expect(@geo_search_from_codes).not_to include('mg')
|
335
|
+
expect(@geo_search_from_codes).not_to include('us')
|
336
336
|
end
|
337
337
|
it "should translate marcgac codes" do
|
338
|
-
@geo_search_from_codes.
|
338
|
+
expect(@geo_search_from_codes).to include('Estonia')
|
339
339
|
end
|
340
340
|
it "should translate marccountry codes" do
|
341
|
-
@geo_search_from_codes.
|
341
|
+
expect(@geo_search_from_codes).to include('Madagascar')
|
342
342
|
end
|
343
343
|
it "should not translate other codes" do
|
344
|
-
@geo_search_from_codes.
|
344
|
+
expect(@geo_search_from_codes).not_to include('United States')
|
345
345
|
end
|
346
346
|
it "should have a separate value for each geographicCode element" do
|
347
347
|
m = "<mods #{@ns_decl}>
|
@@ -352,12 +352,12 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
352
352
|
<subject><geographicCode authority='marcgac'>n-us-md</geographicCode></subject>
|
353
353
|
</mods>"
|
354
354
|
@smods_rec.from_str m
|
355
|
-
@smods_rec.sw_geographic_search.
|
355
|
+
expect(@smods_rec.sw_geographic_search).to eq(['Estonia', 'Madagascar', 'Maryland'])
|
356
356
|
end
|
357
357
|
it "should be empty Array if there are only empty values in the MODS" do
|
358
358
|
m = "<mods #{@ns_decl}><subject><geographicCode/></subject><note>notit</note></mods>"
|
359
359
|
@smods_rec.from_str m
|
360
|
-
@smods_rec.sw_geographic_search.
|
360
|
+
expect(@smods_rec.sw_geographic_search).to eq([])
|
361
361
|
end
|
362
362
|
it "should add the translated value if it wasn't present already" do
|
363
363
|
m = "<mods #{@ns_decl}>
|
@@ -365,8 +365,8 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
365
365
|
<subject><geographicCode authority='marcgac'>e-er</geographicCode></subject>
|
366
366
|
</mods>"
|
367
367
|
@smods_rec.from_str m
|
368
|
-
@smods_rec.sw_geographic_search.size.
|
369
|
-
@smods_rec.sw_geographic_search.
|
368
|
+
expect(@smods_rec.sw_geographic_search.size).to eq(2)
|
369
|
+
expect(@smods_rec.sw_geographic_search).to include('Estonia')
|
370
370
|
end
|
371
371
|
it "should not add the translated value if it was already present" do
|
372
372
|
m = "<mods #{@ns_decl}>
|
@@ -374,11 +374,11 @@ describe "Searchworks mixin for Stanford::Mods::Record" do
|
|
374
374
|
<subject><geographicCode authority='marcgac'>e-er</geographicCode></subject>
|
375
375
|
</mods>"
|
376
376
|
@smods_rec.from_str m
|
377
|
-
@smods_rec.sw_geographic_search.size.
|
378
|
-
@smods_rec.sw_geographic_search.
|
377
|
+
expect(@smods_rec.sw_geographic_search.size).to eq(1)
|
378
|
+
expect(@smods_rec.sw_geographic_search).to eq(['Estonia'])
|
379
379
|
end
|
380
380
|
end
|
381
381
|
end # sw_geographic_search
|
382
382
|
end # context sw subject methods
|
383
383
|
|
384
|
-
end
|
384
|
+
end
|