stanford-mods 2.2.0 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop_todo.yml +358 -3
- data/.travis.yml +1 -4
- data/Gemfile +3 -4
- data/Rakefile +3 -3
- data/lib/marc_countries.rb +381 -381
- data/lib/stanford-mods.rb +1 -0
- data/lib/stanford-mods/coordinate.rb +14 -36
- data/lib/stanford-mods/date_parsing.rb +7 -8
- data/lib/stanford-mods/geo_spatial.rb +32 -12
- data/lib/stanford-mods/geo_utils.rb +28 -0
- data/lib/stanford-mods/imprint.rb +1 -1
- data/lib/stanford-mods/name.rb +7 -15
- data/lib/stanford-mods/origin_info.rb +35 -37
- data/lib/stanford-mods/physical_location.rb +6 -4
- data/lib/stanford-mods/searchworks.rb +149 -182
- data/lib/stanford-mods/searchworks_languages.rb +3 -3
- data/lib/stanford-mods/searchworks_subjects.rb +16 -18
- data/lib/stanford-mods/version.rb +1 -1
- data/spec/date_parsing_spec.rb +17 -19
- data/spec/fixtures/searchworks_imprint_data.rb +1 -1
- data/spec/fixtures/searchworks_pub_date_data.rb +1 -1
- data/spec/fixtures/spotlight_pub_date_data.rb +1 -1
- data/spec/geo_spatial_spec.rb +51 -5
- data/spec/imprint_spec.rb +4 -6
- data/spec/lib/stanford-mods/coordinate_spec.rb +0 -2
- data/spec/name_spec.rb +0 -2
- data/spec/origin_info_spec.rb +26 -28
- data/spec/physical_location_spec.rb +0 -3
- data/spec/searchworks_basic_spec.rb +1 -2
- data/spec/searchworks_format_spec.rb +35 -39
- data/spec/searchworks_pub_dates_spec.rb +0 -5
- data/spec/searchworks_spec.rb +1 -7
- data/spec/searchworks_subject_raw_spec.rb +0 -5
- data/spec/searchworks_subject_spec.rb +2 -9
- data/spec/searchworks_title_spec.rb +0 -2
- data/spec/spec_helper.rb +2 -5
- data/spec/sw_publication_spec.rb +1 -2
- data/stanford-mods.gemspec +1 -2
- metadata +4 -4
@@ -484,7 +484,7 @@ SEARCHWORKS_LANGUAGES = {
|
|
484
484
|
'uig' => 'Uighur',
|
485
485
|
'ukr' => 'Ukrainian',
|
486
486
|
'umb' => 'Umbundu',
|
487
|
-
#'und' => 'Undetermined',
|
487
|
+
# 'und' => 'Undetermined',
|
488
488
|
'urd' => 'Urdu',
|
489
489
|
'uzb' => 'Uzbek',
|
490
490
|
'vai' => 'Vai',
|
@@ -514,6 +514,6 @@ SEARCHWORKS_LANGUAGES = {
|
|
514
514
|
'znd' => 'Zande',
|
515
515
|
'zul' => 'Zulu',
|
516
516
|
'zun' => 'Zuni',
|
517
|
-
#'zxx' => 'null',
|
517
|
+
# 'zxx' => 'null',
|
518
518
|
'zza' => 'Zaza'
|
519
|
-
}
|
519
|
+
}.freeze
|
@@ -6,7 +6,6 @@ require 'mods'
|
|
6
6
|
module Stanford
|
7
7
|
module Mods
|
8
8
|
class Record < ::Mods::Record
|
9
|
-
|
10
9
|
# Values are the contents of:
|
11
10
|
# subject/geographic
|
12
11
|
# subject/hierarchicalGeographic
|
@@ -28,7 +27,7 @@ module Stanford
|
|
28
27
|
trans_code_vals = @mods_ng_xml.subject.geographicCode.translated_value
|
29
28
|
if trans_code_vals
|
30
29
|
trans_code_vals.each { |val|
|
31
|
-
result << val
|
30
|
+
result << val unless result.include?(val)
|
32
31
|
}
|
33
32
|
end
|
34
33
|
|
@@ -68,7 +67,7 @@ module Stanford
|
|
68
67
|
# @return [Array<String>] values for the topic_search Solr field for this document or nil if none
|
69
68
|
def topic_search
|
70
69
|
@topic_search ||= begin
|
71
|
-
vals =
|
70
|
+
vals = term_values(:genre) || []
|
72
71
|
vals.concat(subject_topics) if subject_topics
|
73
72
|
vals.empty? ? nil : vals
|
74
73
|
end
|
@@ -96,13 +95,13 @@ module Stanford
|
|
96
95
|
# geographic_search values with trailing comma, semicolon, and backslash (and any preceding spaces) removed
|
97
96
|
# @return [Array<String>] values for the geographic_facet Solr field for this document or nil if none
|
98
97
|
def geographic_facet
|
99
|
-
geographic_search.map { |val| val.sub(/[\\,;]$/, '').strip }
|
98
|
+
geographic_search.map { |val| val.sub(/[\\,;]$/, '').strip } if geographic_search
|
100
99
|
end
|
101
100
|
|
102
101
|
# subject/temporal values with trailing comma, semicolon, and backslash (and any preceding spaces) removed
|
103
102
|
# @return [Array<String>] values for the era_facet Solr field for this document or nil if none
|
104
103
|
def era_facet
|
105
|
-
subject_temporal.map { |val| val.sub(/[\\,;]$/, '').strip }
|
104
|
+
subject_temporal.map { |val| val.sub(/[\\,;]$/, '').strip } if subject_temporal
|
106
105
|
end
|
107
106
|
|
108
107
|
# Values are the contents of:
|
@@ -112,14 +111,14 @@ module Stanford
|
|
112
111
|
# @return [Array<String>] values for the geographic_search Solr field for this document or nil if none
|
113
112
|
def geographic_search
|
114
113
|
@geographic_search ||= begin
|
115
|
-
result =
|
114
|
+
result = sw_geographic_search
|
116
115
|
|
117
116
|
# TODO: this should go into stanford-mods ... but then we have to set that gem up with a Logger
|
118
117
|
# print a message for any unrecognized encodings
|
119
|
-
xvals =
|
120
|
-
codes =
|
118
|
+
xvals = subject.geographicCode.translated_value
|
119
|
+
codes = term_values([:subject, :geographicCode])
|
121
120
|
if codes && codes.size > xvals.size
|
122
|
-
|
121
|
+
subject.geographicCode.each { |n|
|
123
122
|
if n.authority != 'marcgac' && n.authority != 'marccountry'
|
124
123
|
sw_logger.info("#{druid} has subject geographicCode element with untranslated encoding (#{n.authority}): #{n.to_xml}")
|
125
124
|
end
|
@@ -153,12 +152,12 @@ module Stanford
|
|
153
152
|
def subject_other_subvy_search
|
154
153
|
@subject_other_subvy_search ||= begin
|
155
154
|
vals = subject_temporal ? Array.new(subject_temporal) : []
|
156
|
-
gvals =
|
155
|
+
gvals = term_values([:subject, :genre])
|
157
156
|
vals.concat(gvals) if gvals
|
158
157
|
|
159
158
|
# print a message for any temporal encodings
|
160
|
-
|
161
|
-
sw_logger.info("#{druid} has subject temporal element with untranslated encoding: #{n.to_xml}")
|
159
|
+
subject.temporal.each { |n|
|
160
|
+
sw_logger.info("#{druid} has subject temporal element with untranslated encoding: #{n.to_xml}") unless n.encoding.empty?
|
162
161
|
}
|
163
162
|
|
164
163
|
vals.empty? ? nil : vals
|
@@ -180,29 +179,28 @@ module Stanford
|
|
180
179
|
|
181
180
|
# convenience method for subject/name/namePart values (to avoid parsing the mods for the same thing multiple times)
|
182
181
|
def subject_names
|
183
|
-
@subject_names ||=
|
182
|
+
@subject_names ||= sw_subject_names
|
184
183
|
end
|
185
184
|
|
186
185
|
# convenience method for subject/occupation values (to avoid parsing the mods for the same thing multiple times)
|
187
186
|
def subject_occupations
|
188
|
-
@subject_occupations ||=
|
187
|
+
@subject_occupations ||= term_values([:subject, :occupation])
|
189
188
|
end
|
190
189
|
|
191
190
|
# convenience method for subject/temporal values (to avoid parsing the mods for the same thing multiple times)
|
192
191
|
def subject_temporal
|
193
|
-
@subject_temporal ||=
|
192
|
+
@subject_temporal ||= term_values([:subject, :temporal])
|
194
193
|
end
|
195
194
|
|
196
195
|
# convenience method for subject/titleInfo values (to avoid parsing the mods for the same thing multiple times)
|
197
196
|
def subject_titles
|
198
|
-
@subject_titles ||=
|
197
|
+
@subject_titles ||= sw_subject_titles
|
199
198
|
end
|
200
199
|
|
201
200
|
# convenience method for subject/topic values (to avoid parsing the mods for the same thing multiple times)
|
202
201
|
def subject_topics
|
203
|
-
@subject_topics ||=
|
202
|
+
@subject_topics ||= term_values([:subject, :topic])
|
204
203
|
end
|
205
|
-
|
206
204
|
end
|
207
205
|
end
|
208
206
|
end
|
data/spec/date_parsing_spec.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
describe "date parsing methods" do
|
3
|
-
|
4
3
|
unparseable = [ # here to remind us of what they might look like in our data
|
5
4
|
nil,
|
6
5
|
'',
|
@@ -106,11 +105,11 @@ describe "date parsing methods" do
|
|
106
105
|
'No. 15 1792' => '1792',
|
107
106
|
's.a. [1712]' => '1712',
|
108
107
|
'publié le 24 floréal [1796]' => '1796',
|
109
|
-
"Fructidor l'an 3.e [i.e. 1795]" => '1795'
|
108
|
+
"Fructidor l'an 3.e [i.e. 1795]" => '1795'
|
110
109
|
}
|
111
110
|
# example string as key, expected parsed value as value
|
112
111
|
specific_month = {
|
113
|
-
'1975-05' => '1975',
|
112
|
+
'1975-05' => '1975', # vs 1918-27
|
114
113
|
'1996 Jun' => '1996',
|
115
114
|
'February 1798' => '1798',
|
116
115
|
'March, 1794' => '1794',
|
@@ -262,7 +261,7 @@ describe "date parsing methods" do
|
|
262
261
|
'March 22 d. 1794' => '1794',
|
263
262
|
'N. 7 1796' => '1796',
|
264
263
|
'N[ovember] 21st 1786' => '1786',
|
265
|
-
'Oct. the 2.d 1793' => '1793'
|
264
|
+
'Oct. the 2.d 1793' => '1793'
|
266
265
|
}
|
267
266
|
# example string as key, expected parsed value as value
|
268
267
|
specific_day_2_digit_year = {
|
@@ -285,12 +284,12 @@ describe "date parsing methods" do
|
|
285
284
|
'1901, c1900' => ['1901', '1900'], # pub date is one without the c,
|
286
285
|
'1627 [i.e. 1646]' => ['1627', '1646'],
|
287
286
|
'1698/1715' => ['1698', '1715'],
|
288
|
-
'1965,1968' => ['1965', '1968'],
|
287
|
+
'1965,1968' => ['1965', '1968'], # revs
|
289
288
|
'1965|1968' => ['1965', '1968'], # revs
|
290
289
|
'1789 ou 1790]' => ['1789', '1790'],
|
291
290
|
'1689 [i.e. 1688-89]' => ['1689', '1688'],
|
292
291
|
'1598 or 1599' => ['1598', '1599'],
|
293
|
-
'1890 [c1884]' => ['1890', '1884'],
|
292
|
+
'1890 [c1884]' => ['1890', '1884'], # pub date is one without the c
|
294
293
|
'1873,c1868' => ['1873', '1868'], # # pub date is one without the c
|
295
294
|
'1872-1877 [t.5, 1874]' => ['1872', '1873', '1874', '1875', '1876', '1877'],
|
296
295
|
'1809 [ca. 1810]' => ['1809', '1810'],
|
@@ -324,7 +323,7 @@ describe "date parsing methods" do
|
|
324
323
|
}
|
325
324
|
# example string as key, expected parsed value as value
|
326
325
|
multiple_years_4_digits_once = {
|
327
|
-
'1918-20' => ['1918', '1919', '1920'],
|
326
|
+
'1918-20' => ['1918', '1919', '1920'], # vs. 1961-04
|
328
327
|
'1965-8' => ['1965', '1966', '1967', '1968'], # revs
|
329
328
|
'[1846-51]' => ['1846', '1847', '1848', '1849', '1850', '1851']
|
330
329
|
}
|
@@ -416,8 +415,8 @@ describe "date parsing methods" do
|
|
416
415
|
.merge(century_only)
|
417
416
|
.merge(brackets_in_middle_of_year)
|
418
417
|
.merge(invalid_but_can_get_year).each do |example, expected|
|
419
|
-
expected = expected.to_i.to_s if expected
|
420
|
-
expected = "#{expected} A.D." if expected
|
418
|
+
expected = expected.to_i.to_s if expected =~ /^\d+$/
|
419
|
+
expected = "#{expected} A.D." if expected =~ /^\d{1,3}$/
|
421
420
|
it "#{expected} for single value #{example}" do
|
422
421
|
expect(Stanford::Mods::DateParsing.new(example).date_str_for_display).to eq expected
|
423
422
|
end
|
@@ -425,7 +424,7 @@ describe "date parsing methods" do
|
|
425
424
|
|
426
425
|
decade_only
|
427
426
|
.merge(decade_only_4_digits).each do |example, expected|
|
428
|
-
expected = "#{expected.first.to_i}s" if expected.first
|
427
|
+
expected = "#{expected.first.to_i}s" if expected.first =~ /^\d+$/
|
429
428
|
it "#{expected} for decade #{example}" do
|
430
429
|
expect(Stanford::Mods::DateParsing.new(example).date_str_for_display).to eq expected
|
431
430
|
end
|
@@ -445,7 +444,7 @@ describe "date parsing methods" do
|
|
445
444
|
expect(Stanford::Mods::DateParsing.new(example).date_str_for_display).to eq exp
|
446
445
|
end
|
447
446
|
else
|
448
|
-
expected = "#{expected.to_i} A.D." if expected
|
447
|
+
expected = "#{expected.to_i} A.D." if expected =~ /^\d+$/
|
449
448
|
it "#{expected} for #{example}" do
|
450
449
|
expect(Stanford::Mods::DateParsing.new(example).date_str_for_display).to eq expected
|
451
450
|
end
|
@@ -601,9 +600,9 @@ describe "date parsing methods" do
|
|
601
600
|
'random text' => false,
|
602
601
|
nil => false
|
603
602
|
}.each do |example, expected|
|
604
|
-
|
605
|
-
|
606
|
-
|
603
|
+
it "#{expected} for #{example}" do
|
604
|
+
expect(Stanford::Mods::DateParsing.year_str_valid?(example)).to eq expected
|
605
|
+
end
|
607
606
|
end
|
608
607
|
end
|
609
608
|
|
@@ -625,9 +624,9 @@ describe "date parsing methods" do
|
|
625
624
|
'random text' => false,
|
626
625
|
nil => false
|
627
626
|
}.each do |example, expected|
|
628
|
-
|
629
|
-
|
630
|
-
|
627
|
+
it "#{expected} for #{example}" do
|
628
|
+
expect(Stanford::Mods::DateParsing.year_int_valid?(example)).to eq expected
|
629
|
+
end
|
631
630
|
end
|
632
631
|
it 'true for 0000' do
|
633
632
|
expect(Stanford::Mods::DateParsing.year_int_valid?(0000)).to eq true
|
@@ -796,7 +795,7 @@ describe "date parsing methods" do
|
|
796
795
|
|
797
796
|
context '#display_str_for_early_numeric' do
|
798
797
|
early_numeric_dates.each do |example, expected|
|
799
|
-
expected = expected.to_i.to_s if expected
|
798
|
+
expected = expected.to_i.to_s if expected =~ /^\d+$/
|
800
799
|
if example.start_with?('-') || example == '0'
|
801
800
|
exp = "#{example[1..-1].to_i + 1} B.C."
|
802
801
|
it "#{exp} for #{example}" do
|
@@ -897,5 +896,4 @@ describe "date parsing methods" do
|
|
897
896
|
end
|
898
897
|
end
|
899
898
|
end
|
900
|
-
|
901
899
|
end
|
data/spec/geo_spatial_spec.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
2
|
describe "Cartographic coordinates" do
|
5
|
-
|
6
3
|
let(:smods_rec) { Stanford::Mods::Record.new }
|
7
4
|
let(:no_coord) do
|
8
5
|
<<-EOF
|
@@ -16,7 +13,7 @@ describe "Cartographic coordinates" do
|
|
16
13
|
</mods>
|
17
14
|
EOF
|
18
15
|
end
|
19
|
-
let(:with_coords)
|
16
|
+
let(:with_coords) do
|
20
17
|
<<-EOF
|
21
18
|
<mods xmlns="#{Mods::MODS_NS}">
|
22
19
|
<subject>
|
@@ -28,7 +25,6 @@ describe "Cartographic coordinates" do
|
|
28
25
|
</mods>
|
29
26
|
EOF
|
30
27
|
end
|
31
|
-
|
32
28
|
let(:with_bad_data) do
|
33
29
|
<<-EOF
|
34
30
|
<mods xmlns="#{Mods::MODS_NS}">
|
@@ -42,6 +38,10 @@ describe "Cartographic coordinates" do
|
|
42
38
|
EOF
|
43
39
|
end
|
44
40
|
|
41
|
+
it 'has access to logger' do
|
42
|
+
expect(smods_rec.logger).to be_a Logger
|
43
|
+
end
|
44
|
+
|
45
45
|
context "coordinates" do
|
46
46
|
it "returns empty array if no coordinates in the mods" do
|
47
47
|
smods_rec.from_str(no_coord)
|
@@ -83,3 +83,49 @@ describe "Cartographic coordinates" do
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end # describe Cartographic coordinates
|
86
|
+
|
87
|
+
describe '#geo_extension_as_envelope' do
|
88
|
+
let(:modsbody) { '' }
|
89
|
+
let(:mods) do
|
90
|
+
rec = Stanford::Mods::Record.new
|
91
|
+
rec.from_str %(<mods xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
92
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.loc.gov/mods/v3" version="3.5"
|
93
|
+
xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-5.xsd">#{modsbody}</mods>)
|
94
|
+
rec
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'without data, returns emtpy array' do
|
98
|
+
expect(mods.geo_extensions_as_envelope).to eq []
|
99
|
+
end
|
100
|
+
|
101
|
+
describe 'with data' do
|
102
|
+
let(:modsbody) do
|
103
|
+
<<-EOF
|
104
|
+
<extension displayLabel="geo">
|
105
|
+
<rdf:RDF xmlns:gml="http://www.opengis.net/gml/3.2/" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
106
|
+
<rdf:Description rdf:about="http://purl.stanford.edu/cw222pt0426">
|
107
|
+
<dc:format>image/jpeg</dc:format>
|
108
|
+
<dc:type>Image</dc:type>
|
109
|
+
<gml:boundedBy>
|
110
|
+
<gml:Envelope>
|
111
|
+
<gml:lowerCorner>-122.191292 37.4063388</gml:lowerCorner>
|
112
|
+
<gml:upperCorner>-122.149475 37.4435369</gml:upperCorner>
|
113
|
+
</gml:Envelope>
|
114
|
+
</gml:boundedBy>
|
115
|
+
</rdf:Description>
|
116
|
+
</rdf:RDF>
|
117
|
+
</extension>
|
118
|
+
EOF
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'logs error and returns emtpy array' do
|
122
|
+
allow(mods.mods_ng_xml).to receive(:extension).and_raise(RuntimeError)
|
123
|
+
expect(mods.logger).to receive(:warn).with(/failure parsing.*RuntimeError/)
|
124
|
+
expect(mods.geo_extensions_as_envelope).to eq []
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'extract envelope strings' do
|
128
|
+
expect(mods.geo_extensions_as_envelope).to eq ["ENVELOPE(-122.191292, -122.149475, 37.4435369, 37.4063388)"]
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
data/spec/imprint_spec.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
def stanford_mods_imprint(smods_rec)
|
4
2
|
Stanford::Mods::Imprint.new(smods_rec.origin_info)
|
5
3
|
end
|
@@ -59,7 +57,7 @@ describe Stanford::Mods::Imprint do
|
|
59
57
|
end
|
60
58
|
|
61
59
|
context 'date_is_decade?' do
|
62
|
-
[
|
60
|
+
['156u',
|
63
61
|
'167-?]',
|
64
62
|
'[171-?]',
|
65
63
|
'[189-]',
|
@@ -78,7 +76,7 @@ describe Stanford::Mods::Imprint do
|
|
78
76
|
expect(imp.send(:date_is_decade?, element)).to be_truthy
|
79
77
|
end
|
80
78
|
end
|
81
|
-
[
|
79
|
+
['1950s',
|
82
80
|
"1950's",
|
83
81
|
'before 1950s after'
|
84
82
|
].each do |example|
|
@@ -136,7 +134,7 @@ describe Stanford::Mods::Imprint do
|
|
136
134
|
end
|
137
135
|
|
138
136
|
context 'date_is_century?' do
|
139
|
-
[
|
137
|
+
['17uu',
|
140
138
|
'17--?',
|
141
139
|
'before [16--] after'
|
142
140
|
].each do |example|
|
@@ -149,7 +147,7 @@ describe Stanford::Mods::Imprint do
|
|
149
147
|
expect(imp.send(:date_is_century?, element)).to be_truthy
|
150
148
|
end
|
151
149
|
end
|
152
|
-
[
|
150
|
+
['18th century CE',
|
153
151
|
"before 5th century after"
|
154
152
|
].each do |example|
|
155
153
|
it 'false when no century string to change' do
|
data/spec/name_spec.rb
CHANGED
data/spec/origin_info_spec.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
describe "computations from /originInfo field" do
|
2
|
-
|
3
2
|
let(:smods_rec) { Stanford::Mods::Record.new }
|
4
3
|
|
5
4
|
# used for single examples
|
@@ -24,7 +23,7 @@ describe "computations from /originInfo field" do
|
|
24
23
|
<dateCreated>1999</dateCreated>' +
|
25
24
|
mods_origin_info_end_str
|
26
25
|
smods_rec.from_str(mods_str)
|
27
|
-
expect(smods_rec.send(method_sym)).to eq method_sym.to_s
|
26
|
+
expect(smods_rec.send(method_sym)).to eq method_sym.to_s =~ /int/ ? 2005 : '2005'
|
28
27
|
end
|
29
28
|
it 'respects ignore_approximate param' do
|
30
29
|
mods_str = mods_origin_info_start_str +
|
@@ -32,8 +31,8 @@ describe "computations from /originInfo field" do
|
|
32
31
|
'<dateCreated point="end">1599</dateCreated>' +
|
33
32
|
mods_origin_info_end_str
|
34
33
|
smods_rec.from_str(mods_str)
|
35
|
-
expect(smods_rec.send(method_sym, true)).to eq method_sym.to_s
|
36
|
-
expect(smods_rec.send(method_sym, false)).to eq method_sym.to_s
|
34
|
+
expect(smods_rec.send(method_sym, true)).to eq method_sym.to_s =~ /int/ ? 1599 : '1599'
|
35
|
+
expect(smods_rec.send(method_sym, false)).to eq method_sym.to_s =~ /int/ ? 1000 : '1000'
|
37
36
|
end
|
38
37
|
it 'nil if ignore_approximate and all dates are approximate' do
|
39
38
|
mods_str = mods_origin_info_start_str +
|
@@ -42,7 +41,7 @@ describe "computations from /originInfo field" do
|
|
42
41
|
mods_origin_info_end_str
|
43
42
|
smods_rec.from_str(mods_str)
|
44
43
|
expect(smods_rec.send(method_sym, true)).to eq nil
|
45
|
-
expect(smods_rec.send(method_sym, false)).to eq method_sym.to_s
|
44
|
+
expect(smods_rec.send(method_sym, false)).to eq method_sym.to_s =~ /int/ ? 1000 : '1000'
|
46
45
|
end
|
47
46
|
it 'respects ignore_approximate even for keyDate' do
|
48
47
|
mods_str = mods_origin_info_start_str +
|
@@ -50,8 +49,8 @@ describe "computations from /originInfo field" do
|
|
50
49
|
'<dateCreated point="end">1599</dateCreated>' +
|
51
50
|
mods_origin_info_end_str
|
52
51
|
smods_rec.from_str(mods_str)
|
53
|
-
expect(smods_rec.send(method_sym, true)).to eq method_sym.to_s
|
54
|
-
expect(smods_rec.send(method_sym, false)).to eq method_sym.to_s
|
52
|
+
expect(smods_rec.send(method_sym, true)).to eq method_sym.to_s =~ /int/ ? 1599 : '1599'
|
53
|
+
expect(smods_rec.send(method_sym, false)).to eq method_sym.to_s =~ /int/ ? 1000 : '1000'
|
55
54
|
end
|
56
55
|
it 'uses dateCaptured if no dateIssued or dateCreated' do
|
57
56
|
# for web archive seed files
|
@@ -60,19 +59,18 @@ describe "computations from /originInfo field" do
|
|
60
59
|
'<dateCaptured encoding="w3cdtf" point="end">20151218111111</dateCaptured>' +
|
61
60
|
mods_origin_info_end_str
|
62
61
|
smods_rec.from_str(mods_str)
|
63
|
-
expect(smods_rec.send(method_sym)).to eq method_sym.to_s
|
62
|
+
expect(smods_rec.send(method_sym)).to eq method_sym.to_s =~ /int/ ? 2015 : '2015'
|
64
63
|
end
|
65
64
|
context 'spotlight actual data' do
|
66
65
|
require 'fixtures/spotlight_pub_date_data'
|
67
66
|
SPOTLIGHT_PUB_DATE_DATA.each_pair.each do |coll_name, coll_data|
|
68
67
|
# papyri - the only Spotlight data with BC dates
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
end
|
68
|
+
next if coll_name == 'papyri' && method_sym == :pub_year_int
|
69
|
+
coll_data.each_pair do |mods_str, exp_vals|
|
70
|
+
expected = exp_vals[exp_val_position]
|
71
|
+
it "#{expected} for rec in #{coll_name}" do
|
72
|
+
smods_rec.from_str(mods_str)
|
73
|
+
expect(smods_rec.send(method_sym)).to eq((method_sym.to_s =~ /int/ ? expected.to_i : expected)) if expected
|
76
74
|
end
|
77
75
|
end
|
78
76
|
end
|
@@ -163,7 +161,7 @@ describe "computations from /originInfo field" do
|
|
163
161
|
'<dateIssued keyDate="yes">2014</dateIssued>' +
|
164
162
|
mods_origin_info_end_str
|
165
163
|
smods_rec.from_str(mods_str)
|
166
|
-
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq method_sym.to_s
|
164
|
+
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq method_sym.to_s =~ /int/ ? 2014 : '2014'
|
167
165
|
end
|
168
166
|
it 'ignores invalid keyDate value' do
|
169
167
|
mods_str = mods_origin_info_start_str +
|
@@ -171,7 +169,7 @@ describe "computations from /originInfo field" do
|
|
171
169
|
'<dateIssued>1499</dateIssued>' +
|
172
170
|
mods_origin_info_end_str
|
173
171
|
smods_rec.from_str(mods_str)
|
174
|
-
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq method_sym.to_s
|
172
|
+
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq method_sym.to_s =~ /int/ ? 1499 : '1499'
|
175
173
|
end
|
176
174
|
it 'calls earliest_year_str if multiple keyDates present' do
|
177
175
|
mods_str = mods_origin_info_start_str +
|
@@ -179,7 +177,7 @@ describe "computations from /originInfo field" do
|
|
179
177
|
'<dateCreated keyDate="yes">2001</dateCreated>' +
|
180
178
|
mods_origin_info_end_str
|
181
179
|
smods_rec.from_str(mods_str)
|
182
|
-
if method_sym.to_s
|
180
|
+
if method_sym.to_s =~ /int/
|
183
181
|
expect(Stanford::Mods::Record).to receive(:earliest_year_int).with(smods_rec.date_created_elements)
|
184
182
|
else
|
185
183
|
expect(Stanford::Mods::Record).to receive(:earliest_year_str).with(smods_rec.date_created_elements)
|
@@ -193,7 +191,7 @@ describe "computations from /originInfo field" do
|
|
193
191
|
'<dateIssued point="end" qualifier="questionable">uuuu</dateIssued>' +
|
194
192
|
mods_origin_info_end_str
|
195
193
|
smods_rec.from_str(mods_str)
|
196
|
-
if method_sym.to_s
|
194
|
+
if method_sym.to_s =~ /int/
|
197
195
|
expect(Stanford::Mods::Record).to receive(:earliest_year_int).with(smods_rec.date_issued_elements)
|
198
196
|
else
|
199
197
|
expect(Stanford::Mods::Record).to receive(:earliest_year_str).with(smods_rec.date_issued_elements)
|
@@ -208,21 +206,21 @@ describe "computations from /originInfo field" do
|
|
208
206
|
'<dateIssued encoding="w3cdtf">1300</dateIssued>' +
|
209
207
|
mods_origin_info_end_str
|
210
208
|
smods_rec.from_str(mods_str)
|
211
|
-
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq method_sym.to_s
|
209
|
+
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq method_sym.to_s =~ /int/ ? 1100 : '1100'
|
212
210
|
mods_str = mods_origin_info_start_str +
|
213
211
|
'<dateIssued>1200</dateIssued>' +
|
214
212
|
'<dateIssued encoding="marc">1300</dateIssued>' +
|
215
213
|
'<dateIssued encoding="w3cdtf" keyDate="yes">1100</dateIssued>' +
|
216
214
|
mods_origin_info_end_str
|
217
215
|
smods_rec.from_str(mods_str)
|
218
|
-
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq method_sym.to_s
|
216
|
+
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq method_sym.to_s =~ /int/ ? 1100 : '1100'
|
219
217
|
mods_str = mods_origin_info_start_str +
|
220
218
|
'<dateIssued>1300</dateIssued>' +
|
221
219
|
'<dateIssued encoding="marc" keyDate="yes">1100</dateIssued>' +
|
222
220
|
'<dateIssued encoding="w3cdtf">1200</dateIssued>' +
|
223
221
|
mods_origin_info_end_str
|
224
222
|
smods_rec.from_str(mods_str)
|
225
|
-
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq method_sym.to_s
|
223
|
+
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq method_sym.to_s =~ /int/ ? 1100 : '1100'
|
226
224
|
end
|
227
225
|
end
|
228
226
|
|
@@ -307,7 +305,7 @@ describe "computations from /originInfo field" do
|
|
307
305
|
end
|
308
306
|
context "retains element when attribute qualifer=" do
|
309
307
|
['inferred', 'invalid_attr_val'].each do |attr_val|
|
310
|
-
|
308
|
+
let(:qual_attr_val) { attr_val }
|
311
309
|
it attr_val do
|
312
310
|
smods_rec.from_str mods_rec
|
313
311
|
result = smods_rec.date_issued_elements(true)
|
@@ -319,7 +317,7 @@ describe "computations from /originInfo field" do
|
|
319
317
|
end
|
320
318
|
end
|
321
319
|
|
322
|
-
let(:start_str) {"#{mods_origin_info_start_str}<dateIssued>2015</dateIssued>"}
|
320
|
+
let(:start_str) { "#{mods_origin_info_start_str}<dateIssued>2015</dateIssued>" }
|
323
321
|
it 'retains element without qualifier attribute"' do
|
324
322
|
m = start_str + '<dateIssued>1666</dateIssued>' + mods_origin_info_end_str
|
325
323
|
smods_rec.from_str m
|
@@ -376,7 +374,7 @@ describe "computations from /originInfo field" do
|
|
376
374
|
end
|
377
375
|
context "retains element when attribute qualifer=" do
|
378
376
|
['inferred', 'invalid_attr_val'].each do |attr_val|
|
379
|
-
|
377
|
+
let(:qual_attr_val) { attr_val }
|
380
378
|
it attr_val do
|
381
379
|
smods_rec.from_str mods_rec
|
382
380
|
result = smods_rec.date_created_elements(true)
|
@@ -388,7 +386,7 @@ describe "computations from /originInfo field" do
|
|
388
386
|
end
|
389
387
|
end
|
390
388
|
|
391
|
-
let(:start_str) {"#{mods_origin_info_start_str}<dateCreated>2015</dateCreated>"}
|
389
|
+
let(:start_str) { "#{mods_origin_info_start_str}<dateCreated>2015</dateCreated>" }
|
392
390
|
it 'retains element without qualifier attribute"' do
|
393
391
|
m = start_str + '<dateCreated>1666</dateCreated>' + mods_origin_info_end_str
|
394
392
|
smods_rec.from_str m
|
@@ -468,7 +466,7 @@ describe "computations from /originInfo field" do
|
|
468
466
|
<dateIssued qualifier='#{attr_value}'>1968</dateIssued>
|
469
467
|
#{mods_origin_info_end_str}"
|
470
468
|
end
|
471
|
-
it
|
469
|
+
it expected.to_s do
|
472
470
|
smods_rec.from_str(mods_str)
|
473
471
|
date_el = smods_rec.date_issued_elements.first
|
474
472
|
expect(Stanford::Mods::Record.date_is_approximate?(date_el)).to eq expected
|
@@ -491,4 +489,4 @@ describe "computations from /originInfo field" do
|
|
491
489
|
expect(smods_rec.send(:get_u_year, ["9999"])).to be_nil
|
492
490
|
end
|
493
491
|
end
|
494
|
-
end
|
492
|
+
end
|