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
data/spec/name_spec.rb CHANGED
@@ -3,7 +3,7 @@ describe "name/author concepts" do
3
3
  let(:mods_start) { "<mods xmlns=\"#{Mods::MODS_NS}\">" }
4
4
  let(:mods_end) { "</mods>" }
5
5
 
6
- context "main_author_w_date" do
6
+ context "sw_main_author" do
7
7
  let(:plain_no_role) { "<name><namePart>plain_no_role</namePart></name>" }
8
8
  let(:plain_creator_code) { "<name>
9
9
  <namePart>plain_creator_code</namePart>
@@ -60,77 +60,72 @@ describe "name/author concepts" do
60
60
  context "marcrelator role Creator" do
61
61
  it "finds role with roleTerm type text" do
62
62
  smods_rec.from_str(mods_start + plain_creator_text + mods_end)
63
- expect(smods_rec.main_author_w_date).to eq('plain_creator_text')
63
+ expect(smods_rec.sw_main_author).to eq('plain_creator_text')
64
64
  end
65
65
  it "finds role with roleTerm type code" do
66
66
  smods_rec.from_str(mods_start + plain_creator_code + mods_end)
67
- expect(smods_rec.main_author_w_date).to eq('plain_creator_code')
67
+ expect(smods_rec.sw_main_author).to eq('plain_creator_code')
68
68
  end
69
69
  it "skips names when role isn't marcrelator authority" do
70
70
  smods_rec.from_str(mods_start + plain_creator_non_mr + mods_end)
71
- expect(smods_rec.main_author_w_date).to be_nil
71
+ expect(smods_rec.sw_main_author).to be_nil
72
72
  end
73
73
  it "skips names without roles in favor of marcrelator role of 'Creator'" do
74
74
  smods_rec.from_str(mods_start + personal_no_role + plain_creator_text + other_no_role + mods_end)
75
- expect(smods_rec.main_author_w_date).to eq('plain_creator_text')
75
+ expect(smods_rec.sw_main_author).to eq('plain_creator_text')
76
76
  smods_rec.from_str(mods_start + corp_no_role + plain_creator_code + mods_end)
77
- expect(smods_rec.main_author_w_date).to eq('plain_creator_code')
77
+ expect(smods_rec.sw_main_author).to eq('plain_creator_code')
78
78
  end
79
79
  it "does not care about name type" do
80
80
  smods_rec.from_str(mods_start + personal_creator_code + corp_creator_text + mods_end)
81
- expect(smods_rec.main_author_w_date).to eq('personal_creator_code')
81
+ expect(smods_rec.sw_main_author).to eq('personal_creator_code')
82
82
  smods_rec.from_str(mods_start + personal_no_role + corp_creator_text + mods_end)
83
- expect(smods_rec.main_author_w_date).to eq('corp_creator_text')
83
+ expect(smods_rec.sw_main_author).to eq('corp_creator_text')
84
84
  end
85
85
  end # marcrelator role Creator
86
86
 
87
87
  context "marcrelator role Author" do
88
88
  it "finds role with roleTerm type text" do
89
89
  smods_rec.from_str(mods_start + plain_author_text + mods_end)
90
- expect(smods_rec.main_author_w_date).to eq('plain_author_text')
90
+ expect(smods_rec.sw_main_author).to eq('plain_author_text')
91
91
  end
92
92
  it "finds role with roleTerm type code" do
93
93
  smods_rec.from_str(mods_start + plain_author_code + mods_end)
94
- expect(smods_rec.main_author_w_date).to eq('plain_author_code')
94
+ expect(smods_rec.sw_main_author).to eq('plain_author_code')
95
95
  end
96
96
  it "skips names when role isn't marcrelator authority" do
97
97
  smods_rec.from_str(mods_start + plain_author_non_mr + mods_end)
98
- expect(smods_rec.main_author_w_date).to be_nil
98
+ expect(smods_rec.sw_main_author).to be_nil
99
99
  end
100
100
  it "skips names without roles in favor of marcrelator role of 'Author'" do
101
101
  smods_rec.from_str(mods_start + personal_no_role + plain_author_text + other_no_role + mods_end)
102
- expect(smods_rec.main_author_w_date).to eq('plain_author_text')
102
+ expect(smods_rec.sw_main_author).to eq('plain_author_text')
103
103
  smods_rec.from_str(mods_start + corp_no_role + personal_no_role + plain_author_code + mods_end)
104
- expect(smods_rec.main_author_w_date).to eq('plain_author_code')
104
+ expect(smods_rec.sw_main_author).to eq('plain_author_code')
105
105
  end
106
106
  it "doesn't care about name type" do
107
107
  smods_rec.from_str(mods_start + personal_author_text + corp_author_code + mods_end)
108
- expect(smods_rec.main_author_w_date).to eq('personal_author_text')
108
+ expect(smods_rec.sw_main_author).to eq('personal_author_text')
109
109
  smods_rec.from_str(mods_start + personal_no_role + corp_author_code + mods_end)
110
- expect(smods_rec.main_author_w_date).to eq('corp_author_code')
110
+ expect(smods_rec.sw_main_author).to eq('corp_author_code')
111
111
  end
112
112
  end # marcrelator role Author
113
113
 
114
- it "is a String" do
115
- smods_rec.from_str(mods_start + personal_author_text + corp_creator_text + mods_end)
116
- expect(smods_rec.main_author_w_date).to be_an_instance_of(String)
117
- end
118
-
119
114
  it "takes first name with marcrelator role of 'Creator' or 'Author'" do
120
115
  smods_rec.from_str(mods_start + personal_author_text + corp_creator_text + mods_end)
121
- expect(smods_rec.main_author_w_date).to eq('personal_author_text')
116
+ expect(smods_rec.sw_main_author).to eq('personal_author_text')
122
117
  smods_rec.from_str(mods_start + corp_creator_text + personal_creator_code + mods_end)
123
- expect(smods_rec.main_author_w_date).to eq('corp_creator_text')
118
+ expect(smods_rec.sw_main_author).to eq('corp_creator_text')
124
119
  end
125
120
 
126
121
  it "takes the first name without a role if there are no instances of marcrelator role 'Creator' or 'Actor'" do
127
122
  smods_rec.from_str(mods_start + plain_author_non_mr + personal_other_role + personal_no_role + plain_no_role + mods_end)
128
- expect(smods_rec.main_author_w_date).to eq('personal_no_role')
123
+ expect(smods_rec.sw_main_author).to eq('personal_no_role')
129
124
  end
130
125
 
131
126
  it "nil if there is no name with marcrelator role of 'Creator' or 'Author' and no name without a role" do
132
127
  smods_rec.from_str(mods_start + plain_author_non_mr + personal_other_role + mods_end)
133
- expect(smods_rec.main_author_w_date).to be_nil
128
+ expect(smods_rec.sw_main_author).to be_nil
134
129
  end
135
130
 
136
131
  it "uses the display name if it is present" do
@@ -148,7 +143,7 @@ describe "name/author concepts" do
148
143
  </name>
149
144
  </mods>"
150
145
  smods_rec.from_str(m)
151
- expect(smods_rec.main_author_w_date).to eq('q')
146
+ expect(smods_rec.sw_main_author).to eq('q')
152
147
  end
153
148
  it "includes dates, when available" do
154
149
  m = "<mods xmlns=\"#{Mods::MODS_NS}\">
@@ -158,7 +153,7 @@ describe "name/author concepts" do
158
153
  </name>
159
154
  </mods>"
160
155
  smods_rec.from_str(m)
161
- expect(smods_rec.main_author_w_date).to eq('personal, 1984-')
156
+ expect(smods_rec.sw_main_author).to eq('personal, 1984-')
162
157
  m = "<mods xmlns=\"#{Mods::MODS_NS}\">
163
158
  <name>
164
159
  <namePart>plain</namePart>
@@ -166,7 +161,7 @@ describe "name/author concepts" do
166
161
  </name>
167
162
  </mods>"
168
163
  smods_rec.from_str(m)
169
- expect(smods_rec.main_author_w_date).to eq('plain, 1954-')
164
+ expect(smods_rec.sw_main_author).to eq('plain, 1954-')
170
165
  m = "<mods xmlns=\"#{Mods::MODS_NS}\">
171
166
  <name type='corporate'>
172
167
  <namePart>corporate</namePart>
@@ -174,9 +169,9 @@ describe "name/author concepts" do
174
169
  </name>
175
170
  </mods>"
176
171
  smods_rec.from_str(m)
177
- expect(smods_rec.main_author_w_date).to eq('corporate, 1990-')
172
+ expect(smods_rec.sw_main_author).to eq('corporate, 1990-')
178
173
  end
179
- end # main_author_w_date
174
+ end
180
175
 
181
176
  context "additional_authors_w_dates" do
182
177
  let(:addl_authors) do
@@ -209,14 +204,14 @@ describe "name/author concepts" do
209
204
  </name>
210
205
  </mods>"
211
206
  smods_rec.from_str(m)
212
- smods_rec.additional_authors_w_dates
207
+ smods_rec.sw_addl_authors
213
208
  end
214
209
  it "is an Array of Strings" do
215
210
  expect(addl_authors).to be_an_instance_of(Array)
216
211
  expect(addl_authors.first).to be_an_instance_of(String)
217
212
  end
218
213
  it "does not include main author" do
219
- expect(addl_authors).not_to include(smods_rec.main_author_w_date)
214
+ expect(addl_authors).not_to include(smods_rec.sw_main_author)
220
215
  end
221
216
  it "includes personal authors that are not main author" do
222
217
  expect(addl_authors).to include('Crusty The Clown, 1990-')
@@ -240,203 +235,4 @@ describe "name/author concepts" do
240
235
  expect(addl_authors.find { |a| a =~ Regexp.new('lithographer') }).to be_nil
241
236
  end
242
237
  end # additional_authors_w_dates
243
-
244
- context '#non_collector_person_authors' do
245
- let(:name) { 'Hermione Grainger' }
246
- let(:name2) { 'Ron Weasley' }
247
- context 'has personal names that are not collectors' do
248
- it 'only non-collector persons' do
249
- name_snippet =
250
- <<-EOF
251
- <name type="personal">
252
- <namePart>#{name}</namePart>
253
- <role>
254
- <roleTerm type="code" authority="marcrelator">cre</roleTerm>
255
- </role>
256
- </name>
257
- <name type="personal">
258
- <namePart>#{name2}</namePart>
259
- <role>
260
- <roleTerm type="code" authority="marcrelator">con</roleTerm>
261
- </role>
262
- </name>
263
- EOF
264
- smods_rec.from_str(mods_start + name_snippet + mods_end)
265
- expect(smods_rec.non_collector_person_authors).to include(name, name2)
266
- end
267
- it 'some collectors, some non-collectors' do
268
- name_snippet =
269
- <<-EOF
270
- <name type="personal">
271
- <namePart>#{name}</namePart>
272
- <role>
273
- <roleTerm type="code" authority="marcrelator">cre</roleTerm>
274
- </role>
275
- </name>
276
- <name type="personal">
277
- <namePart>#{name2}</namePart>
278
- <role>
279
- <roleTerm type="code" authority="marcrelator">col</roleTerm>
280
- </role>
281
- </name>
282
- EOF
283
- smods_rec.from_str(mods_start + name_snippet + mods_end)
284
- expect(smods_rec.non_collector_person_authors).to eq [name]
285
- end
286
- end
287
-
288
- it 'nil if only collectors' do
289
- name_snippet =
290
- <<-EOF
291
- <name type="personal">
292
- <namePart>#{name}</namePart>
293
- <role>
294
- <roleTerm type="code" authority="marcrelator">col</roleTerm>
295
- </role>
296
- </name>
297
- <name type="personal">
298
- <namePart>Ron Weasley</namePart>
299
- <role>
300
- <roleTerm type="code" authority="marcrelator">col</roleTerm>
301
- </role>
302
- </name>
303
- EOF
304
- smods_rec.from_str(mods_start + name_snippet + mods_end)
305
- expect(smods_rec.non_collector_person_authors).to eq nil
306
- end
307
- it 'no role present' do
308
- name_snippet =
309
- <<-EOF
310
- <name type="personal" usage="primary">
311
- <namePart>#{name}</namePart>
312
- </name>
313
- EOF
314
- smods_rec.from_str(mods_start + name_snippet + mods_end)
315
- expect(smods_rec.non_collector_person_authors).to eq nil
316
- end
317
- end
318
-
319
- context '#collectors_w_dates' do
320
- let(:collector_name) { 'Dr. Seuss' }
321
- context 'valueURI for roleTerm' do
322
- it 'roleTerm has value' do
323
- name_snippet =
324
- <<-EOF
325
- <name type="personal">
326
- <namePart>#{collector_name}</namePart>
327
- <role>
328
- <roleTerm type="text" authority="marcrelator" authorityURI="http://id.loc.gov/vocabulary/relators" valueURI="http://id.loc.gov/vocabulary/relators/col">Collector</roleTerm>
329
- </role>
330
- </name>
331
- EOF
332
- smods_rec.from_str(mods_start + name_snippet + mods_end)
333
- expect(smods_rec.collectors_w_dates).to eq [collector_name]
334
- end
335
- it 'empty roleTerm' do
336
- name_snippet =
337
- <<-EOF
338
- <name type="personal">
339
- <namePart>#{collector_name}</namePart>
340
- <role>
341
- <roleTerm authority="marcrelator" authorityURI="http://id.loc.gov/vocabulary/relators" valueURI="http://id.loc.gov/vocabulary/relators/col" />
342
- </role>
343
- </name>
344
- EOF
345
- smods_rec.from_str(mods_start + name_snippet + mods_end)
346
- expect(smods_rec.collectors_w_dates).to eq [collector_name]
347
- end
348
- end
349
-
350
- context 'no valueURI for roleTerm' do
351
- it 'collector marc relator code' do
352
- name_snippet =
353
- <<-EOF
354
- <name type="personal">
355
- <namePart>#{collector_name}</namePart>
356
- <role>
357
- <roleTerm type="code" authority="marcrelator">col</roleTerm>
358
- </role>
359
- </name>
360
- EOF
361
- smods_rec.from_str(mods_start + name_snippet + mods_end)
362
- expect(smods_rec.collectors_w_dates).to eq [collector_name]
363
- end
364
- it 'collector marc relator text' do
365
- name_snippet =
366
- <<-EOF
367
- <name type="personal">
368
- <namePart>#{collector_name}</namePart>
369
- <role>
370
- <roleTerm type="text" authority="marcrelator">Collector</roleTerm>
371
- </role>
372
- </name>
373
- EOF
374
- smods_rec.from_str(mods_start + name_snippet + mods_end)
375
- expect(smods_rec.collectors_w_dates).to eq [collector_name]
376
- end
377
- end
378
-
379
- it 'does not include non-collectors' do
380
- name_snippet =
381
- <<-EOF
382
- <name type="personal">
383
- <namePart>#{collector_name}</namePart>
384
- <role>
385
- <roleTerm type="text" authority="marcrelator">Collector</roleTerm>
386
- </role>
387
- </name>
388
- <name type="personal">
389
- <namePart>Freddy</namePart>
390
- <role>
391
- <roleTerm type='code' authority='marcrelator'>cre</roleTerm>
392
- </role>
393
- </name>
394
- EOF
395
- smods_rec.from_str(mods_start + name_snippet + mods_end)
396
- expect(smods_rec.collectors_w_dates).to eq [collector_name]
397
- end
398
- it 'multiple collectors' do
399
- addl_name = 'Feigenbaum, Edward A.'
400
- name_snippet =
401
- <<-EOF
402
- <name type="personal">
403
- <namePart>#{collector_name}</namePart>
404
- <role>
405
- <roleTerm type="text" authority="marcrelator">Collector</roleTerm>
406
- </role>
407
- </name>
408
- <name type="personal">
409
- <namePart>#{addl_name}</namePart>
410
- <role>
411
- <roleTerm type='code' authority='marcrelator'>col</roleTerm>
412
- </role>
413
- </name>
414
- EOF
415
- smods_rec.from_str(mods_start + name_snippet + mods_end)
416
- expect(smods_rec.collectors_w_dates).to include(collector_name, addl_name)
417
- end
418
- it 'nil if no collectors' do
419
- name_snippet =
420
- <<-EOF
421
- <name type="personal">
422
- <namePart>Freddy</namePart>
423
- <role>
424
- <roleTerm type='code' authority='marcrelator'>cre</roleTerm>
425
- </role>
426
- </name>
427
- EOF
428
- smods_rec.from_str(mods_start + name_snippet + mods_end)
429
- expect(smods_rec.collectors_w_dates).to eq nil
430
- end
431
- it 'no role present' do
432
- name_snippet =
433
- <<-EOF
434
- <name type="personal" usage="primary">
435
- <namePart>Nobody</namePart>
436
- </name>
437
- EOF
438
- smods_rec.from_str(mods_start + name_snippet + mods_end)
439
- expect(smods_rec.collectors_w_dates).to eq nil
440
- end
441
- end
442
238
  end