stanford-mods 2.6.4 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +1 -1
- data/lib/stanford-mods/{geo_spatial.rb → concerns/geo_spatial.rb} +3 -5
- data/lib/stanford-mods/concerns/name.rb +57 -0
- data/lib/stanford-mods/concerns/origin_info.rb +113 -0
- data/lib/stanford-mods/{physical_location.rb → concerns/physical_location.rb} +2 -2
- data/lib/stanford-mods/concerns/searchworks.rb +125 -0
- data/lib/stanford-mods/concerns/searchworks_subjects.rb +126 -0
- data/lib/stanford-mods/concerns/title.rb +87 -0
- data/lib/stanford-mods/coordinate.rb +24 -3
- data/lib/stanford-mods/date_parsing.rb +32 -289
- data/lib/stanford-mods/imprint.rb +170 -322
- data/lib/stanford-mods/record.rb +20 -0
- data/lib/stanford-mods/version.rb +1 -1
- data/lib/stanford-mods/{searchworks_languages.rb → vocabularies/searchworks_languages.rb} +0 -0
- data/lib/stanford-mods.rb +12 -11
- data/spec/fixtures/searchworks_imprint_data.rb +38 -39
- data/spec/fixtures/searchworks_pub_date_data.rb +7 -7
- data/spec/fixtures/spotlight_pub_date_data.rb +7 -7
- data/spec/geo_spatial_spec.rb +1 -6
- data/spec/imprint_spec.rb +263 -207
- data/spec/lib/stanford-mods/coordinate_spec.rb +3 -5
- data/spec/name_spec.rb +26 -230
- data/spec/origin_info_spec.rb +34 -300
- data/spec/searchworks_basic_spec.rb +1 -3
- data/spec/searchworks_pub_dates_spec.rb +0 -215
- data/spec/searchworks_spec.rb +0 -21
- data/spec/searchworks_subject_raw_spec.rb +106 -105
- data/spec/searchworks_subject_spec.rb +19 -55
- data/spec/searchworks_title_spec.rb +5 -5
- data/stanford-mods.gemspec +1 -1
- metadata +19 -15
- data/lib/marc_countries.rb +0 -387
- data/lib/stanford-mods/geo_utils.rb +0 -28
- data/lib/stanford-mods/name.rb +0 -80
- data/lib/stanford-mods/origin_info.rb +0 -489
- data/lib/stanford-mods/searchworks.rb +0 -333
- data/lib/stanford-mods/searchworks_subjects.rb +0 -196
- data/spec/date_parsing_spec.rb +0 -905
data/spec/origin_info_spec.rb
CHANGED
@@ -31,8 +31,8 @@ describe "computations from /originInfo field" do
|
|
31
31
|
'<dateCreated point="end">1599</dateCreated>' +
|
32
32
|
mods_origin_info_end_str
|
33
33
|
smods_rec.from_str(mods_str)
|
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'
|
34
|
+
expect(smods_rec.send(method_sym, ignore_approximate: true)).to eq method_sym.to_s =~ /int/ ? 1599 : '1599'
|
35
|
+
expect(smods_rec.send(method_sym, ignore_approximate: false)).to eq method_sym.to_s =~ /int/ ? 1000 : '1000'
|
36
36
|
end
|
37
37
|
it 'nil if ignore_approximate and all dates are approximate' do
|
38
38
|
mods_str = mods_origin_info_start_str +
|
@@ -40,8 +40,8 @@ describe "computations from /originInfo field" do
|
|
40
40
|
'<dateCreated point="end" qualifier="questionable">1599</dateCreated>' +
|
41
41
|
mods_origin_info_end_str
|
42
42
|
smods_rec.from_str(mods_str)
|
43
|
-
expect(smods_rec.send(method_sym, true)).to eq nil
|
44
|
-
expect(smods_rec.send(method_sym, false)).to eq method_sym.to_s =~ /int/ ? 1000 : '1000'
|
43
|
+
expect(smods_rec.send(method_sym, ignore_approximate: true)).to eq nil
|
44
|
+
expect(smods_rec.send(method_sym, ignore_approximate: false)).to eq method_sym.to_s =~ /int/ ? 1000 : '1000'
|
45
45
|
end
|
46
46
|
it 'respects ignore_approximate even for keyDate' do
|
47
47
|
mods_str = mods_origin_info_start_str +
|
@@ -49,14 +49,14 @@ describe "computations from /originInfo field" do
|
|
49
49
|
'<dateCreated point="end">1599</dateCreated>' +
|
50
50
|
mods_origin_info_end_str
|
51
51
|
smods_rec.from_str(mods_str)
|
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'
|
52
|
+
expect(smods_rec.send(method_sym, ignore_approximate: true)).to eq method_sym.to_s =~ /int/ ? 1599 : '1599'
|
53
|
+
expect(smods_rec.send(method_sym, ignore_approximate: false)).to eq method_sym.to_s =~ /int/ ? 1000 : '1000'
|
54
54
|
end
|
55
55
|
it 'uses dateCaptured if no dateIssued or dateCreated' do
|
56
56
|
# for web archive seed files
|
57
57
|
mods_str = mods_origin_info_start_str +
|
58
|
-
'<dateCaptured encoding="
|
59
|
-
'<dateCaptured encoding="
|
58
|
+
'<dateCaptured encoding="iso8601" point="start" keyDate="yes">20151215121212</dateCaptured>' +
|
59
|
+
'<dateCaptured encoding="iso8601" point="end">20151218111111</dateCaptured>' +
|
60
60
|
mods_origin_info_end_str
|
61
61
|
smods_rec.from_str(mods_str)
|
62
62
|
expect(smods_rec.send(method_sym)).to eq method_sym.to_s =~ /int/ ? 2015 : '2015'
|
@@ -92,24 +92,24 @@ describe "computations from /originInfo field" do
|
|
92
92
|
it '-200 for 200 B.C.' do
|
93
93
|
# hd778hw9236
|
94
94
|
mods_str = mods_origin_info_start_str +
|
95
|
-
'<dateCreated
|
96
|
-
'<dateCreated
|
95
|
+
'<dateCreated keyDate="yes" point="start" qualifier="approximate">200 B.C.</dateCreated>' +
|
96
|
+
'<dateCreated keyDate="yes" point="end" qualifier="approximate">180 B.C.</dateCreated>' +
|
97
97
|
mods_origin_info_end_str
|
98
98
|
smods_rec.from_str(mods_str)
|
99
|
-
expect(smods_rec.pub_year_int).to eq(-
|
99
|
+
expect(smods_rec.pub_year_int).to eq(-199)
|
100
100
|
end
|
101
101
|
it '-211 for 211 B.C.' do
|
102
102
|
# ww728rz0477
|
103
103
|
mods_str = mods_origin_info_start_str +
|
104
|
-
'<dateCreated
|
105
|
-
'<dateCreated
|
104
|
+
'<dateCreated keyDate="yes" point="start" qualifier="approximate">211 B.C.</dateCreated>' +
|
105
|
+
'<dateCreated keyDate="yes" point="end" qualifier="approximate">150 B.C.</dateCreated>' +
|
106
106
|
mods_origin_info_end_str
|
107
107
|
smods_rec.from_str(mods_str)
|
108
|
-
expect(smods_rec.pub_year_int).to eq(-
|
108
|
+
expect(smods_rec.pub_year_int).to eq(-210)
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
112
|
-
context '*
|
112
|
+
context '*best_or_earliest_year' do
|
113
113
|
it 'selects earliest (valid) parseable date from multiple options' do
|
114
114
|
mods_str = mods_origin_info_start_str +
|
115
115
|
'<dateIssued point="start" qualifier="questionable">1758</dateIssued>' +
|
@@ -117,7 +117,7 @@ describe "computations from /originInfo field" do
|
|
117
117
|
'<dateIssued>1753]</dateIssued>' +
|
118
118
|
mods_origin_info_end_str
|
119
119
|
smods_rec.from_str(mods_str)
|
120
|
-
expect(Stanford::Mods::
|
120
|
+
expect(Stanford::Mods::OriginInfo.best_or_earliest_year(smods_rec.origin_info.dateIssued).xml.text).to eq '1753]'
|
121
121
|
end
|
122
122
|
it 'ignores encoding' do
|
123
123
|
# encoding matters for choosing display, not for parsing year
|
@@ -127,31 +127,21 @@ describe "computations from /originInfo field" do
|
|
127
127
|
'<dateIssued encoding="w3cdtf">1300</dateIssued>' +
|
128
128
|
mods_origin_info_end_str
|
129
129
|
smods_rec.from_str(mods_str)
|
130
|
-
expect(Stanford::Mods::
|
130
|
+
expect(Stanford::Mods::OriginInfo.best_or_earliest_year(smods_rec.origin_info.dateIssued).xml.text).to eq '1100'
|
131
131
|
mods_str = mods_origin_info_start_str +
|
132
132
|
'<dateIssued>1200</dateIssued>' +
|
133
133
|
'<dateIssued encoding="marc">1300</dateIssued>' +
|
134
134
|
'<dateIssued encoding="w3cdtf">1100</dateIssued>' +
|
135
135
|
mods_origin_info_end_str
|
136
136
|
smods_rec.from_str(mods_str)
|
137
|
-
expect(Stanford::Mods::
|
137
|
+
expect(Stanford::Mods::OriginInfo.best_or_earliest_year(smods_rec.origin_info.dateIssued).xml.text).to eq '1100'
|
138
138
|
mods_str = mods_origin_info_start_str +
|
139
139
|
'<dateIssued>1300</dateIssued>' +
|
140
140
|
'<dateIssued encoding="marc">1100</dateIssued>' +
|
141
141
|
'<dateIssued encoding="w3cdtf">1200</dateIssued>' +
|
142
142
|
mods_origin_info_end_str
|
143
143
|
smods_rec.from_str(mods_str)
|
144
|
-
expect(Stanford::Mods::
|
145
|
-
end
|
146
|
-
it 'calls DateParsing.sortable_year_string_from_date_str for each element value' do
|
147
|
-
mods_str = mods_origin_info_start_str +
|
148
|
-
'<dateIssued>1100</dateIssued>' +
|
149
|
-
'<dateIssued encoding="marc">1200</dateIssued>' +
|
150
|
-
'<dateIssued encoding="w3cdtf">1300</dateIssued>' +
|
151
|
-
mods_origin_info_end_str
|
152
|
-
smods_rec.from_str(mods_str)
|
153
|
-
expect(Stanford::Mods::DateParsing).to receive(:sortable_year_string_from_date_str).exactly(3).times
|
154
|
-
Stanford::Mods::Record.earliest_year_str(smods_rec.date_issued_elements)
|
144
|
+
expect(Stanford::Mods::OriginInfo.best_or_earliest_year(smods_rec.origin_info.dateIssued).xml.text).to eq '1100'
|
155
145
|
end
|
156
146
|
end
|
157
147
|
|
@@ -162,7 +152,7 @@ describe "computations from /originInfo field" do
|
|
162
152
|
'<dateIssued keyDate="yes">2014</dateIssued>' +
|
163
153
|
mods_origin_info_end_str
|
164
154
|
smods_rec.from_str(mods_str)
|
165
|
-
expect(smods_rec.send(method_sym, smods_rec.
|
155
|
+
expect(smods_rec.send(method_sym, smods_rec.origin_info.dateIssued)).to eq method_sym.to_s =~ /int/ ? 2014 : '2014'
|
166
156
|
end
|
167
157
|
it 'ignores invalid keyDate value' do
|
168
158
|
mods_str = mods_origin_info_start_str +
|
@@ -170,22 +160,18 @@ describe "computations from /originInfo field" do
|
|
170
160
|
'<dateIssued>1499</dateIssued>' +
|
171
161
|
mods_origin_info_end_str
|
172
162
|
smods_rec.from_str(mods_str)
|
173
|
-
expect(smods_rec.send(method_sym, smods_rec.
|
163
|
+
expect(smods_rec.send(method_sym, smods_rec.origin_info.dateIssued)).to eq method_sym.to_s =~ /int/ ? 1499 : '1499'
|
174
164
|
end
|
175
|
-
it 'calls
|
165
|
+
it 'calls earliest_year if multiple keyDates present' do
|
176
166
|
mods_str = mods_origin_info_start_str +
|
177
167
|
'<dateCreated keyDate="yes">2003</dateCreated>' +
|
178
168
|
'<dateCreated keyDate="yes">2001</dateCreated>' +
|
179
169
|
mods_origin_info_end_str
|
180
170
|
smods_rec.from_str(mods_str)
|
181
|
-
|
182
|
-
|
183
|
-
else
|
184
|
-
expect(Stanford::Mods::Record).to receive(:earliest_year_str).with(smods_rec.date_created_elements)
|
185
|
-
end
|
186
|
-
expect(smods_rec.send(method_sym, smods_rec.date_created_elements))
|
171
|
+
expect(Stanford::Mods::OriginInfo).to receive(:best_or_earliest_year).with(smods_rec.origin_info.dateCreated)
|
172
|
+
expect(smods_rec.send(method_sym, smods_rec.origin_info.dateCreated))
|
187
173
|
end
|
188
|
-
it 'calls
|
174
|
+
it 'calls earliest_year if no keyDate' do
|
189
175
|
mods_str = mods_origin_info_start_str +
|
190
176
|
'<dateIssued>1753]</dateIssued>' +
|
191
177
|
'<dateIssued point="start" qualifier="questionable">1758</dateIssued>' +
|
@@ -193,11 +179,11 @@ describe "computations from /originInfo field" do
|
|
193
179
|
mods_origin_info_end_str
|
194
180
|
smods_rec.from_str(mods_str)
|
195
181
|
if method_sym.to_s =~ /int/
|
196
|
-
expect(Stanford::Mods::
|
182
|
+
expect(Stanford::Mods::OriginInfo).to receive(:best_or_earliest_year).with(smods_rec.origin_info.dateIssued)
|
197
183
|
else
|
198
|
-
expect(Stanford::Mods::
|
184
|
+
expect(Stanford::Mods::OriginInfo).to receive(:best_or_earliest_year).with(smods_rec.origin_info.dateIssued)
|
199
185
|
end
|
200
|
-
smods_rec.send(method_sym, smods_rec.
|
186
|
+
smods_rec.send(method_sym, smods_rec.origin_info.dateIssued)
|
201
187
|
end
|
202
188
|
it 'ignores encoding' do
|
203
189
|
# encoding matters for choosing display, not for parsing year
|
@@ -207,229 +193,25 @@ describe "computations from /originInfo field" do
|
|
207
193
|
'<dateIssued encoding="w3cdtf">1300</dateIssued>' +
|
208
194
|
mods_origin_info_end_str
|
209
195
|
smods_rec.from_str(mods_str)
|
210
|
-
expect(smods_rec.send(method_sym, smods_rec.
|
196
|
+
expect(smods_rec.send(method_sym, smods_rec.origin_info.dateIssued)).to eq method_sym.to_s =~ /int/ ? 1100 : '1100'
|
211
197
|
mods_str = mods_origin_info_start_str +
|
212
198
|
'<dateIssued>1200</dateIssued>' +
|
213
199
|
'<dateIssued encoding="marc">1300</dateIssued>' +
|
214
200
|
'<dateIssued encoding="w3cdtf" keyDate="yes">1100</dateIssued>' +
|
215
201
|
mods_origin_info_end_str
|
216
202
|
smods_rec.from_str(mods_str)
|
217
|
-
expect(smods_rec.send(method_sym, smods_rec.
|
203
|
+
expect(smods_rec.send(method_sym, smods_rec.origin_info.dateIssued)).to eq method_sym.to_s =~ /int/ ? 1100 : '1100'
|
218
204
|
mods_str = mods_origin_info_start_str +
|
219
205
|
'<dateIssued>1300</dateIssued>' +
|
220
206
|
'<dateIssued encoding="marc" keyDate="yes">1100</dateIssued>' +
|
221
207
|
'<dateIssued encoding="w3cdtf">1200</dateIssued>' +
|
222
208
|
mods_origin_info_end_str
|
223
209
|
smods_rec.from_str(mods_str)
|
224
|
-
expect(smods_rec.send(method_sym, smods_rec.
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
context '#year_display_str' do
|
229
|
-
it_behaves_like "pub date best single value", :year_display_str
|
230
|
-
it 'uses facet value, not sorting value' do
|
231
|
-
mods_str = mods_origin_info_start_str +
|
232
|
-
'<dateCreated keyDate="yes">180 B.C.</dateCreated>' +
|
233
|
-
mods_origin_info_end_str
|
234
|
-
smods_rec.from_str(mods_str)
|
235
|
-
expect(smods_rec.year_display_str(smods_rec.date_created_elements)).to eq '180 B.C.'
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
context '#year_sort_str' do
|
240
|
-
it_behaves_like "pub date best single value", :year_sort_str
|
241
|
-
it 'uses string sorting value, not facet value' do
|
242
|
-
mods_str = mods_origin_info_start_str +
|
243
|
-
'<dateCreated keyDate="yes">180 B.C.</dateCreated>' +
|
244
|
-
mods_origin_info_end_str
|
245
|
-
smods_rec.from_str(mods_str)
|
246
|
-
expect(smods_rec.year_sort_str(smods_rec.date_created_elements)).to eq '-820'
|
247
|
-
end
|
248
|
-
end
|
249
|
-
|
250
|
-
context '#year_int' do
|
251
|
-
it_behaves_like "pub date best single value", :year_int
|
252
|
-
it 'uses integer sorting value, not string or facet value' do
|
253
|
-
mods_str = mods_origin_info_start_str +
|
254
|
-
'<dateCreated keyDate="yes">180 B.C.</dateCreated>' +
|
255
|
-
mods_origin_info_end_str
|
256
|
-
smods_rec.from_str(mods_str)
|
257
|
-
expect(smods_rec.year_int(smods_rec.date_created_elements)).to eq(-180)
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|
261
|
-
context '#date_issued_elements' do
|
262
|
-
# example string as key, expected num of Elements as value
|
263
|
-
{
|
264
|
-
'<dateIssued>[1717]</dateIssued><dateIssued encoding="marc">1717</dateIssued>' => 2,
|
265
|
-
'<dateIssued encoding="marc" point="start">1552</dateIssued>
|
266
|
-
<dateIssued encoding="marc" point="end">1575</dateIssued>
|
267
|
-
</originInfo>
|
268
|
-
<originInfo>
|
269
|
-
<dateIssued>1544-1628]</dateIssued>' => 3,
|
270
|
-
'' => 0
|
271
|
-
}.each do |example, expected|
|
272
|
-
describe "for example: #{example}" do
|
273
|
-
let(:example) { example }
|
274
|
-
it 'returns Array of Nokogiri Elements matching /originInfo/dateIssued' do
|
275
|
-
smods_rec.from_str(mods_origin_info)
|
276
|
-
result = smods_rec.date_issued_elements
|
277
|
-
expect(result).to be_instance_of(Array)
|
278
|
-
expect(result.size).to eq expected
|
279
|
-
expect(result).to all(be_an(Nokogiri::XML::Element))
|
280
|
-
end
|
281
|
-
end
|
282
|
-
end
|
283
|
-
|
284
|
-
context 'ignore_approximate=true' do
|
285
|
-
let(:qual_date_val) { '1666' }
|
286
|
-
let(:mods_rec) do
|
287
|
-
<<-EOF
|
288
|
-
#{mods_origin_info_start_str}
|
289
|
-
<dateIssued>2015</dateIssued>
|
290
|
-
<dateIssued qualifier="#{qual_attr_val}">#{qual_date_val}</dateIssued>
|
291
|
-
#{mods_origin_info_end_str}
|
292
|
-
EOF
|
293
|
-
end
|
294
|
-
|
295
|
-
context "removes element when attribute qualifer=" do
|
296
|
-
['approximate', 'questionable'].each do |attr_val|
|
297
|
-
let(:qual_attr_val) { attr_val }
|
298
|
-
it attr_val do
|
299
|
-
smods_rec.from_str mods_rec
|
300
|
-
result = smods_rec.date_issued_elements(true)
|
301
|
-
expect(result).to be_instance_of(Array)
|
302
|
-
expect(result.size).to eq 1
|
303
|
-
expect(result[0].content).to eq '2015'
|
304
|
-
end
|
305
|
-
end
|
306
|
-
end
|
307
|
-
|
308
|
-
context "retains element when attribute qualifer=" do
|
309
|
-
['inferred', 'invalid_attr_val'].each do |attr_val|
|
310
|
-
let(:qual_attr_val) { attr_val }
|
311
|
-
it attr_val do
|
312
|
-
smods_rec.from_str mods_rec
|
313
|
-
result = smods_rec.date_issued_elements(true)
|
314
|
-
expect(result).to be_instance_of(Array)
|
315
|
-
expect(result.size).to eq 2
|
316
|
-
expect(result[0].content).to eq '2015'
|
317
|
-
expect(result[1].content).to eq '1666'
|
318
|
-
end
|
319
|
-
end
|
320
|
-
end
|
321
|
-
|
322
|
-
let(:start_str) { "#{mods_origin_info_start_str}<dateIssued>2015</dateIssued>" }
|
323
|
-
it 'retains element without qualifier attribute"' do
|
324
|
-
m = start_str + '<dateIssued>1666</dateIssued>' + mods_origin_info_end_str
|
325
|
-
smods_rec.from_str m
|
326
|
-
result = smods_rec.date_issued_elements(true)
|
327
|
-
expect(result).to be_instance_of(Array)
|
328
|
-
expect(result.size).to eq 2
|
329
|
-
expect(result[0].content).to eq '2015'
|
330
|
-
expect(result[1].content).to eq '1666'
|
331
|
-
end
|
332
|
-
end
|
333
|
-
end
|
334
|
-
|
335
|
-
context '#date_created_elements' do
|
336
|
-
# example string as key, expected num of Elements as value
|
337
|
-
{
|
338
|
-
'<dateCreated encoding="edtf" keydate="yes" point="start">-0012</dateCreated>
|
339
|
-
<dateCreated encoding="edtf" point="end">-0044</dateCreated>' => 2,
|
340
|
-
'' => 0
|
341
|
-
}.each do |example, expected|
|
342
|
-
describe "for example: '#{example}'" do
|
343
|
-
let(:example) { example }
|
344
|
-
it 'returns Array of Nokogiri Elements matching /originInfo/dateCreated' do
|
345
|
-
smods_rec.from_str(mods_origin_info)
|
346
|
-
result = smods_rec.date_created_elements
|
347
|
-
expect(result).to be_instance_of(Array)
|
348
|
-
expect(result.size).to eq expected
|
349
|
-
expect(result).to all(be_an(Nokogiri::XML::Element))
|
350
|
-
end
|
351
|
-
end
|
352
|
-
end
|
353
|
-
|
354
|
-
context 'ignore_approximate=true' do
|
355
|
-
let(:qual_date_val) { '1666' }
|
356
|
-
let(:mods_rec) do
|
357
|
-
<<-EOF
|
358
|
-
#{mods_origin_info_start_str}
|
359
|
-
<dateCreated>2015</dateCreated>
|
360
|
-
<dateCreated qualifier="#{qual_attr_val}">#{qual_date_val}</dateCreated>
|
361
|
-
#{mods_origin_info_end_str}
|
362
|
-
EOF
|
363
|
-
end
|
364
|
-
|
365
|
-
context "removes element when attribute qualifer=" do
|
366
|
-
['approximate', 'questionable'].each do |attr_val|
|
367
|
-
let(:qual_attr_val) { attr_val }
|
368
|
-
it attr_val do
|
369
|
-
smods_rec.from_str mods_rec
|
370
|
-
result = smods_rec.date_created_elements(true)
|
371
|
-
expect(result).to be_instance_of(Array)
|
372
|
-
expect(result.size).to eq 1
|
373
|
-
expect(result[0].content).to eq '2015'
|
374
|
-
end
|
375
|
-
end
|
376
|
-
end
|
377
|
-
|
378
|
-
context "retains element when attribute qualifer=" do
|
379
|
-
['inferred', 'invalid_attr_val'].each do |attr_val|
|
380
|
-
let(:qual_attr_val) { attr_val }
|
381
|
-
it attr_val do
|
382
|
-
smods_rec.from_str mods_rec
|
383
|
-
result = smods_rec.date_created_elements(true)
|
384
|
-
expect(result).to be_instance_of(Array)
|
385
|
-
expect(result.size).to eq 2
|
386
|
-
expect(result[0].content).to eq '2015'
|
387
|
-
expect(result[1].content).to eq '1666'
|
388
|
-
end
|
389
|
-
end
|
390
|
-
end
|
391
|
-
|
392
|
-
let(:start_str) { "#{mods_origin_info_start_str}<dateCreated>2015</dateCreated>" }
|
393
|
-
it 'retains element without qualifier attribute"' do
|
394
|
-
m = start_str + '<dateCreated>1666</dateCreated>' + mods_origin_info_end_str
|
395
|
-
smods_rec.from_str m
|
396
|
-
result = smods_rec.date_created_elements(true)
|
397
|
-
expect(result).to be_instance_of(Array)
|
398
|
-
expect(result.size).to eq 2
|
399
|
-
expect(result[0].content).to eq '2015'
|
400
|
-
expect(result[1].content).to eq '1666'
|
401
|
-
end
|
402
|
-
end
|
403
|
-
end
|
404
|
-
|
405
|
-
context '*keyDate' do
|
406
|
-
it 'returns nil if passed Array is empty' do
|
407
|
-
mods_str = "#{mods_origin_info_start_str}#{mods_origin_info_end_str}"
|
408
|
-
smods_rec.from_str(mods_str)
|
409
|
-
expect(Stanford::Mods::Record.keyDate(smods_rec.date_issued_elements)).to be_nil
|
410
|
-
end
|
411
|
-
it 'returns nil if passed Array has no element with keyDate attribute' do
|
412
|
-
mods_str = "#{mods_origin_info_start_str}<dateIssued>[1738]</dateIssued>#{mods_origin_info_end_str}"
|
413
|
-
smods_rec.from_str(mods_str)
|
414
|
-
expect(Stanford::Mods::Record.keyDate(smods_rec.date_issued_elements)).to be_nil
|
415
|
-
end
|
416
|
-
it 'returns nil if passed Array has multiple elements with keyDate attribute' do
|
417
|
-
mods_str = "#{mods_origin_info_start_str}
|
418
|
-
<dateIssued>[1968?-</dateIssued>
|
419
|
-
<dateIssued encoding='marc' point='start' keyDate='yes'>1968</dateIssued>
|
420
|
-
<dateIssued encoding='marc' point='end' keyDate='yes'>9999</dateIssued>
|
421
|
-
#{mods_origin_info_end_str}"
|
422
|
-
smods_rec.from_str(mods_str)
|
423
|
-
expect(Stanford::Mods::Record.keyDate(smods_rec.date_issued_elements)).to be_nil
|
424
|
-
end
|
425
|
-
it 'returns single Nokogiri::XML::Element if Arrays has single element with keyDate attribute' do
|
426
|
-
mods_str = "#{mods_origin_info_start_str}<dateIssued encoding='w3cdtf' keyDate='yes'>2011</dateIssued>#{mods_origin_info_end_str}"
|
427
|
-
smods_rec.from_str(mods_str)
|
428
|
-
expect(Stanford::Mods::Record.keyDate(smods_rec.date_issued_elements)).to be_instance_of(Nokogiri::XML::Element)
|
210
|
+
expect(smods_rec.send(method_sym, smods_rec.origin_info.dateIssued)).to eq method_sym.to_s =~ /int/ ? 1100 : '1100'
|
429
211
|
end
|
430
212
|
end
|
431
213
|
|
432
|
-
context '*
|
214
|
+
context '*is_approximate' do
|
433
215
|
it 'removes elements when date_is_approximate? returns true' do
|
434
216
|
mods_str = "#{mods_origin_info_start_str}
|
435
217
|
<dateIssued>1900</dateIssued>
|
@@ -437,59 +219,11 @@ describe "computations from /originInfo field" do
|
|
437
219
|
<dateIssued qualifier='questionable'>1930</dateIssued>
|
438
220
|
#{mods_origin_info_end_str}"
|
439
221
|
smods_rec.from_str(mods_str)
|
440
|
-
elements = smods_rec.
|
222
|
+
elements = smods_rec.origin_info.dateIssued
|
441
223
|
expect(elements.size).to eq 3
|
442
|
-
result =
|
224
|
+
result = elements.reject { |n| smods_rec.is_approximate(n) }
|
443
225
|
expect(result).to be_instance_of(Array)
|
444
226
|
expect(result.size).to eq 2
|
445
|
-
expect(result.select { |date_el| Stanford::Mods::Record.date_is_approximate?(date_el) }).to eq []
|
446
|
-
end
|
447
|
-
end
|
448
|
-
|
449
|
-
context '#date_is_approximate?' do
|
450
|
-
it 'false if bad param passed' do
|
451
|
-
expect(Stanford::Mods::Record.date_is_approximate?(true)).to eq false
|
452
|
-
end
|
453
|
-
it 'false if there is no qualifier attrib' do
|
454
|
-
mods_str = "#{mods_origin_info_start_str}<dateIssued>1968</dateIssued>#{mods_origin_info_end_str}"
|
455
|
-
smods_rec.from_str(mods_str)
|
456
|
-
date_el = smods_rec.date_issued_elements.first
|
457
|
-
expect(Stanford::Mods::Record.date_is_approximate?(date_el)).to eq false
|
458
|
-
end
|
459
|
-
# value of qualifier attribute as key, expected result as value
|
460
|
-
{
|
461
|
-
'approximate' => true,
|
462
|
-
'questionable' => true,
|
463
|
-
'inferred' => false,
|
464
|
-
'typo' => false
|
465
|
-
}.each do |attr_value, expected|
|
466
|
-
describe "for qualifier value: '#{attr_value}'" do
|
467
|
-
let(:mods_str) do
|
468
|
-
"#{mods_origin_info_start_str}
|
469
|
-
<dateIssued qualifier='#{attr_value}'>1968</dateIssued>
|
470
|
-
#{mods_origin_info_end_str}"
|
471
|
-
end
|
472
|
-
it expected.to_s do
|
473
|
-
smods_rec.from_str(mods_str)
|
474
|
-
date_el = smods_rec.date_issued_elements.first
|
475
|
-
expect(Stanford::Mods::Record.date_is_approximate?(date_el)).to eq expected
|
476
|
-
end
|
477
|
-
end
|
478
|
-
end
|
479
|
-
end
|
480
|
-
|
481
|
-
context '#get_u_year' do
|
482
|
-
it "turns ending u to 0" do
|
483
|
-
expect(smods_rec.send(:get_u_year, ["201u"])).to eql "2010"
|
484
|
-
expect(smods_rec.send(:get_u_year, ["198u"])).to eql "1980"
|
485
|
-
expect(smods_rec.send(:get_u_year, ["185u"])).to eql "1850"
|
486
|
-
end
|
487
|
-
it "turns ending uu to --" do
|
488
|
-
expect(smods_rec.send(:get_u_year, ["19uu"])).to eql "19--"
|
489
|
-
expect(smods_rec.send(:get_u_year, ["17uu"])).to eql "17--"
|
490
|
-
end
|
491
|
-
it 'ignores 9999' do
|
492
|
-
expect(smods_rec.send(:get_u_year, ["9999"])).to be_nil
|
493
227
|
end
|
494
228
|
end
|
495
229
|
end
|