stanford-mods 1.3.3 → 1.3.4
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/.rspec +1 -0
- data/.rubocop.yml +4 -0
- data/Gemfile +1 -0
- data/lib/stanford-mods.rb +5 -5
- data/lib/stanford-mods/date_parsing.rb +245 -0
- data/lib/stanford-mods/origin_info.rb +411 -0
- data/lib/stanford-mods/searchworks.rb +23 -474
- data/lib/stanford-mods/searchworks_subjects.rb +208 -0
- data/lib/stanford-mods/version.rb +1 -1
- data/spec/date_parsing_spec.rb +746 -0
- data/spec/fixtures/spotlight_pub_date_data.rb +316 -0
- data/spec/origin_info_spec.rb +449 -0
- data/spec/searchworks_pub_dates_spec.rb +166 -163
- data/spec/spec_helper.rb +16 -5
- data/stanford-mods.gemspec +2 -0
- metadata +25 -2
@@ -0,0 +1,316 @@
|
|
1
|
+
mods_origin_info_start_str = "<mods xmlns=\"#{Mods::MODS_NS}\"><originInfo>"
|
2
|
+
mods_origin_info_end_str = '</originInfo></mods>'
|
3
|
+
|
4
|
+
SPOTLIGHT_PUB_DATE_DATA = {
|
5
|
+
'batchelor' =>
|
6
|
+
{ # key is mods_xml; values = [pub date sortable facet value, pub date single string facet value]
|
7
|
+
# ct961sj2730 coll rec: no originInfo dates)
|
8
|
+
# dr330jt7122
|
9
|
+
mods_origin_info_start_str +
|
10
|
+
'<dateIssued>1843</dateIssued>' +
|
11
|
+
mods_origin_info_end_str => ['1843', '1843'],
|
12
|
+
# ds825sq5748
|
13
|
+
mods_origin_info_start_str +
|
14
|
+
'<dateIssued>s.a. [1712]</dateIssued>' +
|
15
|
+
'<dateIssued encoding="marc">1712</dateIssued>' +
|
16
|
+
mods_origin_info_end_str => ['1712', '1712'],
|
17
|
+
# fk998cd4214
|
18
|
+
mods_origin_info_start_str +
|
19
|
+
'<dateIssued>1806]</dateIssued>' +
|
20
|
+
'<dateIssued encoding="marc">1806</dateIssued>' +
|
21
|
+
mods_origin_info_end_str => ['1806', '1806'],
|
22
|
+
# gy889yj2171
|
23
|
+
mods_origin_info_start_str +
|
24
|
+
'<dateIssued>1758]</dateIssued>' +
|
25
|
+
'<dateIssued encoding="marc" point="start" qualifier="questionable">1758</dateIssued>' +
|
26
|
+
'<dateIssued encoding="marc" point="end" qualifier="questionable">uuuu</dateIssued>' +
|
27
|
+
mods_origin_info_end_str => ['1758', '1758'],
|
28
|
+
# gw369sx8109
|
29
|
+
mods_origin_info_start_str +
|
30
|
+
'<dateIssued>179-?]</dateIssued>' +
|
31
|
+
'<dateIssued encoding="marc" point="start" qualifier="questionable">1790</dateIssued>' +
|
32
|
+
'<dateIssued encoding="marc" point="end" qualifier="questionable">1799</dateIssued>' +
|
33
|
+
mods_origin_info_end_str => ['1790', '1790'],
|
34
|
+
# ty320hx2831
|
35
|
+
mods_origin_info_start_str +
|
36
|
+
'<dateIssued>[1860-1869?]</dateIssued>' +
|
37
|
+
'<dateIssued encoding="marc" point="start" qualifier="questionable">1860</dateIssued>' +
|
38
|
+
'<dateIssued encoding="marc" point="end" qualifier="questionable">1890</dateIssued>' +
|
39
|
+
mods_origin_info_end_str => ['1860', '1860']
|
40
|
+
},
|
41
|
+
'feigenbaum' =>
|
42
|
+
{ # key is mods_xml; values = [pub date sortable facet value, pub date single string facet value]
|
43
|
+
# coll rec
|
44
|
+
mods_origin_info_start_str +
|
45
|
+
'<dateIssued encoding="marc" point="start">1950</dateIssued>' +
|
46
|
+
'<dateIssued encoding="marc" point="end">2007</dateIssued>' +
|
47
|
+
mods_origin_info_end_str => ['1950', '1950'],
|
48
|
+
# py696hw1646, jc364jw8333
|
49
|
+
mods_origin_info_start_str +
|
50
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes">2001-11-19</dateCreated>' +
|
51
|
+
mods_origin_info_end_str => ['2001', '2001'],
|
52
|
+
# yt809jk3834, qb375hy6817
|
53
|
+
mods_origin_info_start_str +
|
54
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes">3/25/1998</dateCreated>' +
|
55
|
+
mods_origin_info_end_str => ['1998', '1998'],
|
56
|
+
# mg505sz9327, mx006md9511, sy619vt7106
|
57
|
+
mods_origin_info_start_str +
|
58
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes" point="start" qualifier="approximate">1950</dateCreated>' +
|
59
|
+
'<dateCreated encoding="w3cdtf" point="end" qualifier="approximate">2007</dateCreated>' +
|
60
|
+
mods_origin_info_end_str => ['1950', '1950'],
|
61
|
+
# wb033rz4421, rg190zp1039
|
62
|
+
mods_origin_info_start_str +
|
63
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes">1960</dateCreated>' +
|
64
|
+
mods_origin_info_end_str => ['1960', '1960']
|
65
|
+
},
|
66
|
+
'fitch' =>
|
67
|
+
{ # key is mods_xml; values = [pub date sortable facet value, pub date single string facet value]
|
68
|
+
# tv206kh7995
|
69
|
+
mods_origin_info_start_str +
|
70
|
+
'<dateIssued encoding="w3cdtf" keyDate="yes">2003</dateIssued>' +
|
71
|
+
'</originInfo>' +
|
72
|
+
'<originInfo displayLabel="Date Created">
|
73
|
+
<dateCreated encoding="w3cdtf" keyDate="yes">2002</dateCreated>' +
|
74
|
+
mods_origin_info_end_str => ['2003', '2003'],
|
75
|
+
# jg756mq6272
|
76
|
+
mods_origin_info_start_str +
|
77
|
+
'<dateCreated keyDate="yes" encoding="w3cdtf" point="start" qualifier="approximate">1968</dateCreated>' +
|
78
|
+
'<dateCreated encoding="w3cdtf" point="end" qualifier="approximate">1975</dateCreated>' +
|
79
|
+
mods_origin_info_end_str => ['1968', '1968'],
|
80
|
+
# jc865hw9993
|
81
|
+
mods_origin_info_start_str +
|
82
|
+
'<dateCreated keyDate="yes" encoding="w3cdtf">1970</dateCreated>' +
|
83
|
+
mods_origin_info_end_str => ['1970', '1970']
|
84
|
+
},
|
85
|
+
'hanna_house' =>
|
86
|
+
{ # key is mods_xml; values = [pub date sortable facet value, pub date single string facet value]
|
87
|
+
# gb597yd7556 coll rec
|
88
|
+
mods_origin_info_start_str +
|
89
|
+
'<dateIssued encoding="marc" point="start">1935</dateIssued>' +
|
90
|
+
'<dateIssued encoding="marc" point="end">1995</dateIssued>' +
|
91
|
+
mods_origin_info_end_str => ['1935', '1935'],
|
92
|
+
# gb597yd7556
|
93
|
+
mods_origin_info_start_str +
|
94
|
+
'<dateIssued encoding="marc" point="start">1935</dateIssued>' +
|
95
|
+
'<dateIssued encoding="marc" point="end">1995</dateIssued>' +
|
96
|
+
mods_origin_info_end_str => ['1935', '1935'],
|
97
|
+
# zr891kq4418
|
98
|
+
mods_origin_info_start_str +
|
99
|
+
'<dateCreated point="start" keyDate="yes" encoding="w3cdtf">1914</dateCreated>' +
|
100
|
+
'<dateCreated point="end" encoding="w3cdtf">1985</dateCreated>' +
|
101
|
+
mods_origin_info_end_str => ['1914', '1914'],
|
102
|
+
# dx393nr2700
|
103
|
+
mods_origin_info_start_str +
|
104
|
+
'<dateCreated point="start" keyDate="yes" encoding="w3cdtf">1937</dateCreated>' +
|
105
|
+
'<dateCreated point="end" qualifier="approximate" encoding="w3cdtf">1986</dateCreated>' +
|
106
|
+
mods_origin_info_end_str => ['1937', '1937']
|
107
|
+
},
|
108
|
+
'harrison' =>
|
109
|
+
{ # key is mods_xml; values = [pub date sortable facet value, pub date single string facet value]
|
110
|
+
# yb643gf8754
|
111
|
+
mods_origin_info_start_str +
|
112
|
+
'<dateCreated keyDate="yes" encoding="w3cdtf" point="start">2004</dateCreated>' +
|
113
|
+
'<dateCreated encoding="w3cdtf" point="end">2005</dateCreated>' +
|
114
|
+
mods_origin_info_end_str => ['2004', '2004'],
|
115
|
+
# qj294cd5539
|
116
|
+
mods_origin_info_start_str +
|
117
|
+
'<dateCreated keyDate="yes" encoding="w3cdtf" point="start" qualifier="approximate">1982</dateCreated>' +
|
118
|
+
'<dateCreated encoding="w3cdtf" point="end" qualifier="approximate">1983</dateCreated>' +
|
119
|
+
mods_origin_info_end_str => ['1982', '1982']
|
120
|
+
},
|
121
|
+
'heckrotte' =>
|
122
|
+
{ # key is mods_xml; values = [pub date sortable facet value, pub date single string facet value]
|
123
|
+
# rx637sx4870
|
124
|
+
mods_origin_info_start_str +
|
125
|
+
'<dateIssued encoding="marc">1914</dateIssued>' +
|
126
|
+
mods_origin_info_end_str => ['1914', '1914'],
|
127
|
+
# ds207gt5399
|
128
|
+
mods_origin_info_start_str +
|
129
|
+
'<dateIssued encoding="marc">9999</dateIssued>' +
|
130
|
+
mods_origin_info_end_str => [nil, nil]
|
131
|
+
},
|
132
|
+
'matter' =>
|
133
|
+
{ # key is mods_xml; values = [pub date sortable facet value, pub date single string facet value]
|
134
|
+
# pj169kw1971 coll rec
|
135
|
+
mods_origin_info_start_str +
|
136
|
+
'<dateIssued encoding="marc" point="start">1937</dateIssued>' +
|
137
|
+
'<dateIssued encoding="marc" point="end">1984</dateIssued>' +
|
138
|
+
mods_origin_info_end_str => ['1937', '1937'],
|
139
|
+
# vx584zf3939
|
140
|
+
mods_origin_info_start_str +
|
141
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes" qualifier="questionable">1954</dateCreated>' +
|
142
|
+
mods_origin_info_end_str => ['1954', '1954'],
|
143
|
+
# cp851bp7190
|
144
|
+
mods_origin_info_start_str +
|
145
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes" qualifier="approximate" point="start">1937</dateCreated>' +
|
146
|
+
'<dateCreated encoding="w3cdtf" qualifier="approximate" point="end">1984</dateCreated>' +
|
147
|
+
mods_origin_info_end_str => ['1937', '1937'],
|
148
|
+
# hr768nf5908
|
149
|
+
mods_origin_info_start_str +
|
150
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes">1948-02-05</dateCreated>' +
|
151
|
+
mods_origin_info_end_str => ['1948', '1948']
|
152
|
+
},
|
153
|
+
'mss' =>
|
154
|
+
{ # key is mods_xml; values = [pub date sortable facet value, pub date single string facet value]
|
155
|
+
# dt056jp2574 coll rec
|
156
|
+
mods_origin_info_start_str +
|
157
|
+
'<dateIssued encoding="marc" point="start" keyDate="yes">0850</dateIssued>' +
|
158
|
+
'<dateIssued encoding="marc" point="end">1499</dateIssued>' +
|
159
|
+
mods_origin_info_end_str => ['0850', '850'],
|
160
|
+
# nc881qb8504
|
161
|
+
mods_origin_info_start_str +
|
162
|
+
'<dateCreated point="start" qualifier="approximate" keyDate="yes">1000</dateCreated>' +
|
163
|
+
'<dateCreated point="end" qualifier="approximate">1599</dateCreated>' +
|
164
|
+
mods_origin_info_end_str => ['1000', '1000'],
|
165
|
+
# gq464qc3817
|
166
|
+
mods_origin_info_start_str +
|
167
|
+
'<dateCreated keydate="yes">1371</dateCreated>' +
|
168
|
+
mods_origin_info_end_str => ['1371', '1371'],
|
169
|
+
# pn981gz2244 (a coll rec)
|
170
|
+
mods_origin_info_start_str +
|
171
|
+
'<dateIssued encoding="marc" point="start">1310</dateIssued>' +
|
172
|
+
'<dateIssued encoding="marc" point="end">1500</dateIssued>' +
|
173
|
+
mods_origin_info_end_str => ['1310', '1310'],
|
174
|
+
# zv022sd1415 (a coll rec)
|
175
|
+
mods_origin_info_start_str +
|
176
|
+
'<dateIssued encoding="marc" keyDate="yes" point="start" qualifier="questionable">1100</dateIssued>' +
|
177
|
+
'<dateIssued encoding="marc" point="end" qualifier="questionable">1499</dateIssued>' +
|
178
|
+
mods_origin_info_end_str => ['1100', '1100']
|
179
|
+
},
|
180
|
+
'muybridge_date_issued' =>
|
181
|
+
{ # key is mods_xml; values = [pub date sortable facet value, pub date single string facet value]
|
182
|
+
# rs028yq2265
|
183
|
+
mods_origin_info_start_str +
|
184
|
+
'<dateIssued>1876</dateIssued>' +
|
185
|
+
'<dateIssued encoding="marc" keyDate="yes">1876</dateIssued>' +
|
186
|
+
mods_origin_info_end_str => ['1876', '1876'],
|
187
|
+
# mb109mb4776
|
188
|
+
mods_origin_info_start_str +
|
189
|
+
'<dateIssued>1878]</dateIssued>' +
|
190
|
+
'<dateIssued encoding="marc" keyDate="yes">1878</dateIssued>' +
|
191
|
+
mods_origin_info_end_str => ['1878', '1878'],
|
192
|
+
# ff991hz8300
|
193
|
+
mods_origin_info_start_str +
|
194
|
+
'<dateIssued encoding="marc" point="start" keyDate="yes">1868</dateIssued>' +
|
195
|
+
'<dateIssued encoding="marc" point="end">1929</dateIssued>' +
|
196
|
+
mods_origin_info_end_str => ['1868', '1868']
|
197
|
+
},
|
198
|
+
'norwich' =>
|
199
|
+
{ # key is mods_xml; values = [pub date sortable facet value, pub date single string facet value]
|
200
|
+
# qb438pg7646 - coll record
|
201
|
+
mods_origin_info_start_str +
|
202
|
+
'<dateIssued encoding="marc" point="start" qualifier="questionable">1486</dateIssued>' +
|
203
|
+
'<dateIssued encoding="marc" point="end" qualifier="questionable">1865</dateIssued>' +
|
204
|
+
mods_origin_info_end_str => ['1486', '1486'],
|
205
|
+
# zv656kg5843 - dateIssued item record
|
206
|
+
mods_origin_info_start_str +
|
207
|
+
'<dateIssued qualifier="questionable" point="start" keyDate="yes">1486</dateIssued>' +
|
208
|
+
'<dateIssued qualifier="questionable" point="end">1865</dateIssued>' +
|
209
|
+
mods_origin_info_end_str => ['1486', '1486'],
|
210
|
+
# vv001qm0627
|
211
|
+
mods_origin_info_start_str +
|
212
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes" qualifier="">1792</dateCreated>' +
|
213
|
+
mods_origin_info_end_str => ['1792', '1792'],
|
214
|
+
# fw686gh2768
|
215
|
+
mods_origin_info_start_str +
|
216
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes" qualifier="inferred">1700</dateCreated>' +
|
217
|
+
mods_origin_info_end_str => ['1700', '1700'],
|
218
|
+
# xp797gj2926, bd251fw4676
|
219
|
+
mods_origin_info_start_str +
|
220
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes" qualifier="approximate" point="start">1646</dateCreated>' +
|
221
|
+
'<dateCreated encoding="w3cdtf" keyDate="no" qualifier="approximate" point="end">1647</dateCreated>' +
|
222
|
+
mods_origin_info_end_str => ['1646', '1646'],
|
223
|
+
# rw174jv7999
|
224
|
+
mods_origin_info_start_str +
|
225
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes" qualifier="approximate" point="start">1836</dateCreated>' +
|
226
|
+
'<dateCreated encoding="w3cdtf" keyDate="no" qualifier="approximate" point="end">1839</dateCreated>' +
|
227
|
+
mods_origin_info_end_str => ['1836', '1836'],
|
228
|
+
# kw395pq8862
|
229
|
+
mods_origin_info_start_str +
|
230
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes" qualifier="questionable">1737</dateCreated>' +
|
231
|
+
mods_origin_info_end_str => ['1737', '1737']
|
232
|
+
},
|
233
|
+
'papyri' =>
|
234
|
+
{ # key is mods_xml; values = [pub date sortable facet value, pub date single string facet value]
|
235
|
+
# hd778hw9236
|
236
|
+
mods_origin_info_start_str +
|
237
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes" point="start" qualifier="approximate">200 B.C.</dateCreated>' +
|
238
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes" point="end" qualifier="approximate">180 B.C.</dateCreated>' +
|
239
|
+
mods_origin_info_end_str => ['-800', '200 B.C.'],
|
240
|
+
# ww728rz0477
|
241
|
+
mods_origin_info_start_str +
|
242
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes" point="start" qualifier="approximate">211 B.C.</dateCreated>' +
|
243
|
+
'<dateCreated encoding="w3cdtf" keyDate="yes" point="end" qualifier="approximate">150 B.C.</dateCreated>' +
|
244
|
+
mods_origin_info_end_str => ['-789', '211 B.C.']
|
245
|
+
},
|
246
|
+
'renaissance' =>
|
247
|
+
{ # key is mods_xml; values = [pub date sortable facet value, pub date single string facet value]
|
248
|
+
# qm115qm4767
|
249
|
+
mods_origin_info_start_str +
|
250
|
+
'<dateIssued>1621</dateIssued>' +
|
251
|
+
mods_origin_info_end_str => ['1621', '1621'],
|
252
|
+
# ph263cq3186
|
253
|
+
mods_origin_info_start_str +
|
254
|
+
'<dateIssued encoding="marc">16uu</dateIssued>' +
|
255
|
+
'</originInfo>
|
256
|
+
<originInfo>
|
257
|
+
<dateIssued>approximately 1600-1700.</dateIssued>' +
|
258
|
+
mods_origin_info_end_str => ['1600', '1600'],
|
259
|
+
# vm330vk8699
|
260
|
+
mods_origin_info_start_str +
|
261
|
+
'<dateIssued encoding="marc" point="start">1552</dateIssued>' +
|
262
|
+
'<dateIssued encoding="marc" point="end">1575</dateIssued>' +
|
263
|
+
'</originInfo>
|
264
|
+
<originInfo>
|
265
|
+
<dateIssued>1544-1628]</dateIssued>' +
|
266
|
+
mods_origin_info_end_str => ['1544', '1544'],
|
267
|
+
# fs844yc9264
|
268
|
+
mods_origin_info_start_str +
|
269
|
+
'<dateIssued>1486]</dateIssued>' +
|
270
|
+
'<dateIssued encoding="marc">1486</dateIssued>' +
|
271
|
+
mods_origin_info_end_str => ['1486', '1486'],
|
272
|
+
# yx539ps2472
|
273
|
+
mods_origin_info_start_str +
|
274
|
+
'<dateIssued>January 6th, 1801</dateIssued>' +
|
275
|
+
'<dateIssued encoding="marc">1801</dateIssued>' +
|
276
|
+
mods_origin_info_end_str => ['1801', '1801'],
|
277
|
+
# tf692ty4668
|
278
|
+
mods_origin_info_start_str +
|
279
|
+
'<dateIssued>anno j65i [1651]</dateIssued>' +
|
280
|
+
'<dateIssued encoding="marc">1651</dateIssued>' +
|
281
|
+
mods_origin_info_end_str => ['1651', '1651'],
|
282
|
+
# wd342hc6856
|
283
|
+
mods_origin_info_start_str +
|
284
|
+
'<dateIssued>[1657?]</dateIssued>' +
|
285
|
+
'<dateIssued encoding="marc">1657</dateIssued>' +
|
286
|
+
mods_origin_info_end_str => ['1657', '1657'],
|
287
|
+
# tg585cq2576
|
288
|
+
mods_origin_info_start_str +
|
289
|
+
'<dateIssued encoding="marc">1681</dateIssued>' +
|
290
|
+
'</originInfo>
|
291
|
+
<originInfo>
|
292
|
+
<dateIssued>im jahr 1681</dateIssued>' +
|
293
|
+
mods_origin_info_end_str => ['1681', '1681'],
|
294
|
+
# bf004gy8502
|
295
|
+
mods_origin_info_start_str +
|
296
|
+
'<dateIssued encoding="marc">1683</dateIssued>' +
|
297
|
+
'</originInfo>
|
298
|
+
<originInfo displayLabel="publisher">
|
299
|
+
<dateIssued>anno Christi MDCLXXXIII [1683]</dateIssued>' +
|
300
|
+
mods_origin_info_end_str => ['1683', '1683'],
|
301
|
+
# vq586cs8631
|
302
|
+
mods_origin_info_start_str +
|
303
|
+
'<dateIssued encoding="marc">1686</dateIssued>' +
|
304
|
+
mods_origin_info_end_str => ['1686', '1686'],
|
305
|
+
# gx634bc5110
|
306
|
+
mods_origin_info_start_str +
|
307
|
+
'<dateIssued>[1692-1694]</dateIssued>' +
|
308
|
+
'<dateIssued encoding="marc">1692</dateIssued>' +
|
309
|
+
mods_origin_info_end_str => ['1692', '1692'],
|
310
|
+
# mc166br4447
|
311
|
+
mods_origin_info_start_str +
|
312
|
+
'<dateIssued>approximately 1786]</dateIssued>' +
|
313
|
+
'<dateIssued encoding="marc">1786</dateIssued>' +
|
314
|
+
mods_origin_info_end_str => ['1786', '1786']
|
315
|
+
}
|
316
|
+
}
|
@@ -0,0 +1,449 @@
|
|
1
|
+
describe "computations from /originInfo field" do
|
2
|
+
|
3
|
+
let(:smods_rec) { Stanford::Mods::Record.new }
|
4
|
+
|
5
|
+
# used for single examples
|
6
|
+
let(:mods_origin_info_start_str) { "<mods xmlns=\"#{Mods::MODS_NS}\"><originInfo>" }
|
7
|
+
let(:mods_origin_info_end_str) { '</originInfo></mods>' }
|
8
|
+
|
9
|
+
# used for hashes/arrays of examples
|
10
|
+
let(:mods_origin_info) do
|
11
|
+
<<-EOF
|
12
|
+
#{mods_origin_info_start_str}
|
13
|
+
#{example}
|
14
|
+
#{mods_origin_info_end_str}
|
15
|
+
EOF
|
16
|
+
end
|
17
|
+
|
18
|
+
RSpec.shared_examples "single pub date value" do |method_sym, exp_val_position|
|
19
|
+
it 'prefers dateIssued to dateCreated' do
|
20
|
+
mods_str = mods_origin_info_start_str +
|
21
|
+
'<dateIssued>2005</dateIssued>' +
|
22
|
+
'</originInfo>' +
|
23
|
+
'<originInfo>
|
24
|
+
<dateCreated>1999</dateCreated>' +
|
25
|
+
mods_origin_info_end_str
|
26
|
+
smods_rec.from_str(mods_str)
|
27
|
+
expect(smods_rec.send(method_sym)).to eq '2005'
|
28
|
+
end
|
29
|
+
it 'respects ignore_approximate param' do
|
30
|
+
mods_str = mods_origin_info_start_str +
|
31
|
+
'<dateCreated point="start" qualifier="approximate">1000</dateCreated>' +
|
32
|
+
'<dateCreated point="end">1599</dateCreated>' +
|
33
|
+
mods_origin_info_end_str
|
34
|
+
smods_rec.from_str(mods_str)
|
35
|
+
expect(smods_rec.send(method_sym, true)).to eq '1599'
|
36
|
+
expect(smods_rec.send(method_sym, false)).to eq '1000'
|
37
|
+
end
|
38
|
+
it 'nil if ignore_approximate and all dates are approximate' do
|
39
|
+
mods_str = mods_origin_info_start_str +
|
40
|
+
'<dateCreated point="start" qualifier="approximate">1000</dateCreated>' +
|
41
|
+
'<dateCreated point="end" qualifier="questionable">1599</dateCreated>' +
|
42
|
+
mods_origin_info_end_str
|
43
|
+
smods_rec.from_str(mods_str)
|
44
|
+
expect(smods_rec.send(method_sym, true)).to eq nil
|
45
|
+
expect(smods_rec.send(method_sym, false)).to eq '1000'
|
46
|
+
end
|
47
|
+
it 'respects ignore_approximate even for keyDate' do
|
48
|
+
mods_str = mods_origin_info_start_str +
|
49
|
+
'<dateCreated point="start" qualifier="approximate" keyDate="yes">1000</dateCreated>' +
|
50
|
+
'<dateCreated point="end">1599</dateCreated>' +
|
51
|
+
mods_origin_info_end_str
|
52
|
+
smods_rec.from_str(mods_str)
|
53
|
+
expect(smods_rec.send(method_sym, true)).to eq '1599'
|
54
|
+
expect(smods_rec.send(method_sym, false)).to eq '1000'
|
55
|
+
end
|
56
|
+
it 'uses dateCaptured if no dateIssued or dateCreated' do
|
57
|
+
# for web archive seed files
|
58
|
+
mods_str = mods_origin_info_start_str +
|
59
|
+
'<dateCaptured encoding="w3cdtf" point="start" keyDate="yes">20151215121212</dateCaptured>' +
|
60
|
+
'<dateCaptured encoding="w3cdtf" point="end">20151218111111</dateCaptured>' +
|
61
|
+
mods_origin_info_end_str
|
62
|
+
smods_rec.from_str(mods_str)
|
63
|
+
expect(smods_rec.send(method_sym)).to eq '2015'
|
64
|
+
end
|
65
|
+
context 'spotlight actual data' do
|
66
|
+
require 'fixtures/spotlight_pub_date_data'
|
67
|
+
SPOTLIGHT_PUB_DATE_DATA.each_pair.each do |coll_name, coll_data|
|
68
|
+
coll_data.each_pair do |mods_str, exp_vals|
|
69
|
+
expected = exp_vals[exp_val_position]
|
70
|
+
it "#{expected} for rec in #{coll_name}" do
|
71
|
+
smods_rec.from_str(mods_str)
|
72
|
+
expect(smods_rec.send(method_sym)).to eq expected
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context '#pub_date_facet_single_value' do
|
80
|
+
it_behaves_like "single pub date value", :pub_date_facet_single_value, 1
|
81
|
+
end
|
82
|
+
|
83
|
+
context '#pub_date_sortable_string' do
|
84
|
+
it_behaves_like "single pub date value", :pub_date_sortable_string, 0
|
85
|
+
end
|
86
|
+
|
87
|
+
context '*earliest_date' do
|
88
|
+
it 'selects earliest (valid) parseable date from multiple options' do
|
89
|
+
mods_str = mods_origin_info_start_str +
|
90
|
+
'<dateIssued point="start" qualifier="questionable">1758</dateIssued>' +
|
91
|
+
'<dateIssued point="end" qualifier="questionable">uuuu</dateIssued>' +
|
92
|
+
'<dateIssued>1753]</dateIssued>' +
|
93
|
+
mods_origin_info_end_str
|
94
|
+
smods_rec.from_str(mods_str)
|
95
|
+
expect(Stanford::Mods::Record.earliest_date(smods_rec.date_issued_elements)).to eq ['1753', '1753]']
|
96
|
+
end
|
97
|
+
it 'ignores encoding' do
|
98
|
+
# encoding matters for choosing display, not for parsing year
|
99
|
+
mods_str = mods_origin_info_start_str +
|
100
|
+
'<dateIssued>1100</dateIssued>' +
|
101
|
+
'<dateIssued encoding="marc">1200</dateIssued>' +
|
102
|
+
'<dateIssued encoding="w3cdtf">1300</dateIssued>' +
|
103
|
+
mods_origin_info_end_str
|
104
|
+
smods_rec.from_str(mods_str)
|
105
|
+
expect(Stanford::Mods::Record.earliest_date(smods_rec.date_issued_elements)).to eq ['1100', '1100']
|
106
|
+
mods_str = mods_origin_info_start_str +
|
107
|
+
'<dateIssued>1200</dateIssued>' +
|
108
|
+
'<dateIssued encoding="marc">1300</dateIssued>' +
|
109
|
+
'<dateIssued encoding="w3cdtf">1100</dateIssued>' +
|
110
|
+
mods_origin_info_end_str
|
111
|
+
smods_rec.from_str(mods_str)
|
112
|
+
expect(Stanford::Mods::Record.earliest_date(smods_rec.date_issued_elements)).to eq ['1100', '1100']
|
113
|
+
mods_str = mods_origin_info_start_str +
|
114
|
+
'<dateIssued>1300</dateIssued>' +
|
115
|
+
'<dateIssued encoding="marc">1100</dateIssued>' +
|
116
|
+
'<dateIssued encoding="w3cdtf">1200</dateIssued>' +
|
117
|
+
mods_origin_info_end_str
|
118
|
+
smods_rec.from_str(mods_str)
|
119
|
+
expect(Stanford::Mods::Record.earliest_date(smods_rec.date_issued_elements)).to eq ['1100', '1100']
|
120
|
+
end
|
121
|
+
it 'calls DateParsing.sortable_year_string_from_date_str for each element value' do
|
122
|
+
mods_str = mods_origin_info_start_str +
|
123
|
+
'<dateIssued>1100</dateIssued>' +
|
124
|
+
'<dateIssued encoding="marc">1200</dateIssued>' +
|
125
|
+
'<dateIssued encoding="w3cdtf">1300</dateIssued>' +
|
126
|
+
mods_origin_info_end_str
|
127
|
+
smods_rec.from_str(mods_str)
|
128
|
+
expect(Stanford::Mods::DateParsing).to receive(:sortable_year_string_from_date_str).exactly(3).times
|
129
|
+
Stanford::Mods::Record.earliest_date(smods_rec.date_issued_elements)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
RSpec.shared_examples "pub date best single value" do |method_sym|
|
134
|
+
it 'uses keyDate value if specified' do
|
135
|
+
mods_str = mods_origin_info_start_str +
|
136
|
+
'<dateIssued>1666</dateIssued>' +
|
137
|
+
'<dateIssued keyDate="yes">2014</dateIssued>' +
|
138
|
+
mods_origin_info_end_str
|
139
|
+
smods_rec.from_str(mods_str)
|
140
|
+
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq '2014'
|
141
|
+
end
|
142
|
+
it 'ignores invalid keyDate value' do
|
143
|
+
mods_str = mods_origin_info_start_str +
|
144
|
+
'<dateIssued keyDate="6th">1500</dateIssued>' +
|
145
|
+
'<dateIssued>1499</dateIssued>' +
|
146
|
+
mods_origin_info_end_str
|
147
|
+
smods_rec.from_str(mods_str)
|
148
|
+
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq '1499'
|
149
|
+
end
|
150
|
+
it 'calls earliest_date if multiple keyDates present' do
|
151
|
+
mods_str = mods_origin_info_start_str +
|
152
|
+
'<dateCreated keyDate="yes">2003</dateCreated>' +
|
153
|
+
'<dateCreated keyDate="yes">2001</dateCreated>' +
|
154
|
+
mods_origin_info_end_str
|
155
|
+
smods_rec.from_str(mods_str)
|
156
|
+
expect(Stanford::Mods::Record).to receive(:earliest_date).with(smods_rec.date_created_elements)
|
157
|
+
expect(smods_rec.send(method_sym, smods_rec.date_created_elements))
|
158
|
+
end
|
159
|
+
it 'calls earliest_date if no keyDate' do
|
160
|
+
mods_str = mods_origin_info_start_str +
|
161
|
+
'<dateIssued>1753]</dateIssued>' +
|
162
|
+
'<dateIssued point="start" qualifier="questionable">1758</dateIssued>' +
|
163
|
+
'<dateIssued point="end" qualifier="questionable">uuuu</dateIssued>' +
|
164
|
+
mods_origin_info_end_str
|
165
|
+
smods_rec.from_str(mods_str)
|
166
|
+
expect(Stanford::Mods::Record).to receive(:earliest_date).with(smods_rec.date_issued_elements)
|
167
|
+
smods_rec.send(method_sym, smods_rec.date_issued_elements)
|
168
|
+
end
|
169
|
+
it 'ignores encoding' do
|
170
|
+
# encoding matters for choosing display, not for parsing year
|
171
|
+
mods_str = mods_origin_info_start_str +
|
172
|
+
'<dateIssued keyDate="yes">1100</dateIssued>' +
|
173
|
+
'<dateIssued encoding="marc">1200</dateIssued>' +
|
174
|
+
'<dateIssued encoding="w3cdtf">1300</dateIssued>' +
|
175
|
+
mods_origin_info_end_str
|
176
|
+
smods_rec.from_str(mods_str)
|
177
|
+
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq '1100'
|
178
|
+
mods_str = mods_origin_info_start_str +
|
179
|
+
'<dateIssued>1200</dateIssued>' +
|
180
|
+
'<dateIssued encoding="marc">1300</dateIssued>' +
|
181
|
+
'<dateIssued encoding="w3cdtf" keyDate="yes">1100</dateIssued>' +
|
182
|
+
mods_origin_info_end_str
|
183
|
+
smods_rec.from_str(mods_str)
|
184
|
+
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq '1100'
|
185
|
+
mods_str = mods_origin_info_start_str +
|
186
|
+
'<dateIssued>1300</dateIssued>' +
|
187
|
+
'<dateIssued encoding="marc" keyDate="yes">1100</dateIssued>' +
|
188
|
+
'<dateIssued encoding="w3cdtf">1200</dateIssued>' +
|
189
|
+
mods_origin_info_end_str
|
190
|
+
smods_rec.from_str(mods_str)
|
191
|
+
expect(smods_rec.send(method_sym, smods_rec.date_issued_elements)).to eq '1100'
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
context '#pub_date_best_single_facet_value' do
|
196
|
+
it_behaves_like "pub date best single value", :pub_date_best_single_facet_value
|
197
|
+
it 'uses facet value, not sorting value' do
|
198
|
+
mods_str = mods_origin_info_start_str +
|
199
|
+
'<dateCreated keyDate="yes">180 B.C.</dateCreated>' +
|
200
|
+
mods_origin_info_end_str
|
201
|
+
smods_rec.from_str(mods_str)
|
202
|
+
expect(smods_rec.send(:pub_date_best_single_facet_value, smods_rec.date_created_elements)).to eq '180 B.C.'
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
context '#pub_date_best_sort_str_value' do
|
207
|
+
it_behaves_like "pub date best single value", :pub_date_best_sort_str_value
|
208
|
+
it 'uses string sorting value, not facet value' do
|
209
|
+
mods_str = mods_origin_info_start_str +
|
210
|
+
'<dateCreated keyDate="yes">180 B.C.</dateCreated>' +
|
211
|
+
mods_origin_info_end_str
|
212
|
+
smods_rec.from_str(mods_str)
|
213
|
+
expect(smods_rec.send(:pub_date_best_sort_str_value, smods_rec.date_created_elements)).to eq '-820'
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
context '#date_issued_elements' do
|
218
|
+
# example string as key, expected num of Elements as value
|
219
|
+
{
|
220
|
+
'<dateIssued>[1717]</dateIssued><dateIssued encoding="marc">1717</dateIssued>' => 2,
|
221
|
+
'<dateIssued encoding="marc" point="start">1552</dateIssued>
|
222
|
+
<dateIssued encoding="marc" point="end">1575</dateIssued>
|
223
|
+
</originInfo>
|
224
|
+
<originInfo>
|
225
|
+
<dateIssued>1544-1628]</dateIssued>' => 3,
|
226
|
+
'' => 0
|
227
|
+
}.each do |example, expected|
|
228
|
+
describe "for example: #{example}" do
|
229
|
+
let(:example) { example }
|
230
|
+
it 'returns Array of Nokogiri Elements matching /originInfo/dateIssued' do
|
231
|
+
smods_rec.from_str(mods_origin_info)
|
232
|
+
result = smods_rec.date_issued_elements
|
233
|
+
expect(result).to be_instance_of(Array)
|
234
|
+
expect(result.size).to eq expected
|
235
|
+
expect(result).to all(be_an(Nokogiri::XML::Element))
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
context 'ignore_approximate=true' do
|
241
|
+
let(:qual_date_val) { '1666' }
|
242
|
+
let(:mods_rec) do
|
243
|
+
<<-EOF
|
244
|
+
#{mods_origin_info_start_str}
|
245
|
+
<dateIssued>2015</dateIssued>
|
246
|
+
<dateIssued qualifier="#{qual_attr_val}">#{qual_date_val}</dateIssued>
|
247
|
+
#{mods_origin_info_end_str}
|
248
|
+
EOF
|
249
|
+
end
|
250
|
+
|
251
|
+
context "removes element when attribute qualifer=" do
|
252
|
+
['approximate', 'questionable'].each do |attr_val|
|
253
|
+
let(:qual_attr_val) { attr_val }
|
254
|
+
it attr_val do
|
255
|
+
smods_rec.from_str mods_rec
|
256
|
+
result = smods_rec.date_issued_elements(true)
|
257
|
+
expect(result).to be_instance_of(Array)
|
258
|
+
expect(result.size).to eq 1
|
259
|
+
expect(result[0].content).to eq '2015'
|
260
|
+
end
|
261
|
+
end
|
262
|
+
end
|
263
|
+
context "retains element when attribute qualifer=" do
|
264
|
+
['inferred', 'invalid_attr_val'].each do |attr_val|
|
265
|
+
let(:qual_attr_val) { attr_val }
|
266
|
+
it attr_val do
|
267
|
+
smods_rec.from_str mods_rec
|
268
|
+
result = smods_rec.date_issued_elements(true)
|
269
|
+
expect(result).to be_instance_of(Array)
|
270
|
+
expect(result.size).to eq 2
|
271
|
+
expect(result[0].content).to eq '2015'
|
272
|
+
expect(result[1].content).to eq '1666'
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
let(:start_str) {"#{mods_origin_info_start_str}<dateIssued>2015</dateIssued>"}
|
278
|
+
it 'retains element without qualifier attribute"' do
|
279
|
+
m = start_str + '<dateIssued>1666</dateIssued>' + mods_origin_info_end_str
|
280
|
+
smods_rec.from_str m
|
281
|
+
result = smods_rec.date_issued_elements(true)
|
282
|
+
expect(result).to be_instance_of(Array)
|
283
|
+
expect(result.size).to eq 2
|
284
|
+
expect(result[0].content).to eq '2015'
|
285
|
+
expect(result[1].content).to eq '1666'
|
286
|
+
end
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
context '#date_created_elements' do
|
291
|
+
# example string as key, expected num of Elements as value
|
292
|
+
{
|
293
|
+
'<dateCreated encoding="edtf" keydate="yes" point="start">-0012</dateCreated>
|
294
|
+
<dateCreated encoding="edtf" point="end">-0044</dateCreated>' => 2,
|
295
|
+
'' => 0
|
296
|
+
}.each do |example, expected|
|
297
|
+
describe "for example: '#{example}'" do
|
298
|
+
let(:example) { example }
|
299
|
+
it 'returns Array of Nokogiri Elements matching /originInfo/dateCreated' do
|
300
|
+
smods_rec.from_str(mods_origin_info)
|
301
|
+
result = smods_rec.date_created_elements
|
302
|
+
expect(result).to be_instance_of(Array)
|
303
|
+
expect(result.size).to eq expected
|
304
|
+
expect(result).to all(be_an(Nokogiri::XML::Element))
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
context 'ignore_approximate=true' do
|
310
|
+
let(:qual_date_val) { '1666' }
|
311
|
+
let(:mods_rec) do
|
312
|
+
<<-EOF
|
313
|
+
#{mods_origin_info_start_str}
|
314
|
+
<dateCreated>2015</dateCreated>
|
315
|
+
<dateCreated qualifier="#{qual_attr_val}">#{qual_date_val}</dateCreated>
|
316
|
+
#{mods_origin_info_end_str}
|
317
|
+
EOF
|
318
|
+
end
|
319
|
+
|
320
|
+
context "removes element when attribute qualifer=" do
|
321
|
+
['approximate', 'questionable'].each do |attr_val|
|
322
|
+
let(:qual_attr_val) { attr_val }
|
323
|
+
it attr_val do
|
324
|
+
smods_rec.from_str mods_rec
|
325
|
+
result = smods_rec.date_created_elements(true)
|
326
|
+
expect(result).to be_instance_of(Array)
|
327
|
+
expect(result.size).to eq 1
|
328
|
+
expect(result[0].content).to eq '2015'
|
329
|
+
end
|
330
|
+
end
|
331
|
+
end
|
332
|
+
context "retains element when attribute qualifer=" do
|
333
|
+
['inferred', 'invalid_attr_val'].each do |attr_val|
|
334
|
+
let(:qual_attr_val) { attr_val }
|
335
|
+
it attr_val do
|
336
|
+
smods_rec.from_str mods_rec
|
337
|
+
result = smods_rec.date_created_elements(true)
|
338
|
+
expect(result).to be_instance_of(Array)
|
339
|
+
expect(result.size).to eq 2
|
340
|
+
expect(result[0].content).to eq '2015'
|
341
|
+
expect(result[1].content).to eq '1666'
|
342
|
+
end
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
let(:start_str) {"#{mods_origin_info_start_str}<dateCreated>2015</dateCreated>"}
|
347
|
+
it 'retains element without qualifier attribute"' do
|
348
|
+
m = start_str + '<dateCreated>1666</dateCreated>' + mods_origin_info_end_str
|
349
|
+
smods_rec.from_str m
|
350
|
+
result = smods_rec.date_created_elements(true)
|
351
|
+
expect(result).to be_instance_of(Array)
|
352
|
+
expect(result.size).to eq 2
|
353
|
+
expect(result[0].content).to eq '2015'
|
354
|
+
expect(result[1].content).to eq '1666'
|
355
|
+
end
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
context '*keyDate' do
|
360
|
+
it 'returns nil if passed Array is empty' do
|
361
|
+
mods_str = "#{mods_origin_info_start_str}#{mods_origin_info_end_str}"
|
362
|
+
smods_rec.from_str(mods_str)
|
363
|
+
expect(Stanford::Mods::Record.keyDate(smods_rec.date_issued_elements)).to be_nil
|
364
|
+
end
|
365
|
+
it 'returns nil if passed Array has no element with keyDate attribute' do
|
366
|
+
mods_str = "#{mods_origin_info_start_str}<dateIssued>[1738]</dateIssued>#{mods_origin_info_end_str}"
|
367
|
+
smods_rec.from_str(mods_str)
|
368
|
+
expect(Stanford::Mods::Record.keyDate(smods_rec.date_issued_elements)).to be_nil
|
369
|
+
end
|
370
|
+
it 'returns nil if passed Array has multiple elements with keyDate attribute' do
|
371
|
+
mods_str = "#{mods_origin_info_start_str}
|
372
|
+
<dateIssued>[1968?-</dateIssued>
|
373
|
+
<dateIssued encoding='marc' point='start' keyDate='yes'>1968</dateIssued>
|
374
|
+
<dateIssued encoding='marc' point='end' keyDate='yes'>9999</dateIssued>
|
375
|
+
#{mods_origin_info_end_str}"
|
376
|
+
smods_rec.from_str(mods_str)
|
377
|
+
expect(Stanford::Mods::Record.keyDate(smods_rec.date_issued_elements)).to be_nil
|
378
|
+
end
|
379
|
+
it 'returns single Nokogiri::XML::Element if Arrays has single element with keyDate attribute' do
|
380
|
+
mods_str = "#{mods_origin_info_start_str}<dateIssued encoding='w3cdtf' keyDate='yes'>2011</dateIssued>#{mods_origin_info_end_str}"
|
381
|
+
smods_rec.from_str(mods_str)
|
382
|
+
expect(Stanford::Mods::Record.keyDate(smods_rec.date_issued_elements)).to be_instance_of(Nokogiri::XML::Element)
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
context '*remove_approximate' do
|
387
|
+
it 'removes elements when date_is_approximate? returns true' do
|
388
|
+
mods_str = "#{mods_origin_info_start_str}
|
389
|
+
<dateIssued>1900</dateIssued>
|
390
|
+
<dateIssued qualifier='inferred'>1910</dateIssued>
|
391
|
+
<dateIssued qualifier='questionable'>1930</dateIssued>
|
392
|
+
#{mods_origin_info_end_str}"
|
393
|
+
smods_rec.from_str(mods_str)
|
394
|
+
elements = smods_rec.date_issued_elements
|
395
|
+
expect(elements.size).to eq 3
|
396
|
+
result = Stanford::Mods::Record.remove_approximate(elements)
|
397
|
+
expect(result).to be_instance_of(Array)
|
398
|
+
expect(result.size).to eq 2
|
399
|
+
expect(result.select { |date_el| Stanford::Mods::Record.date_is_approximate?(date_el) }).to eq []
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
context '#date_is_approximate?' do
|
404
|
+
it 'false if bad param passed' do
|
405
|
+
expect(Stanford::Mods::Record.date_is_approximate?(true)).to eq false
|
406
|
+
end
|
407
|
+
it 'false if there is no qualifier attrib' do
|
408
|
+
mods_str = "#{mods_origin_info_start_str}<dateIssued>1968</dateIssued>#{mods_origin_info_end_str}"
|
409
|
+
smods_rec.from_str(mods_str)
|
410
|
+
date_el = smods_rec.date_issued_elements.first
|
411
|
+
expect(Stanford::Mods::Record.date_is_approximate?(date_el)).to eq false
|
412
|
+
end
|
413
|
+
# value of qualifier attribute as key, expected result as value
|
414
|
+
{
|
415
|
+
'approximate' => true,
|
416
|
+
'questionable' => true,
|
417
|
+
'inferred' => false,
|
418
|
+
'typo' => false
|
419
|
+
}.each do |attr_value, expected|
|
420
|
+
describe "for qualifier value: '#{attr_value}'" do
|
421
|
+
let(:mods_str) do
|
422
|
+
"#{mods_origin_info_start_str}
|
423
|
+
<dateIssued qualifier='#{attr_value}'>1968</dateIssued>
|
424
|
+
#{mods_origin_info_end_str}"
|
425
|
+
end
|
426
|
+
it "#{expected}" do
|
427
|
+
smods_rec.from_str(mods_str)
|
428
|
+
date_el = smods_rec.date_issued_elements.first
|
429
|
+
expect(Stanford::Mods::Record.date_is_approximate?(date_el)).to eq expected
|
430
|
+
end
|
431
|
+
end
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
context '#get_u_year' do
|
436
|
+
it "turns ending u to 0" do
|
437
|
+
expect(smods_rec.send(:get_u_year, ["201u"])).to eql "2010"
|
438
|
+
expect(smods_rec.send(:get_u_year, ["198u"])).to eql "1980"
|
439
|
+
expect(smods_rec.send(:get_u_year, ["185u"])).to eql "1850"
|
440
|
+
end
|
441
|
+
it "turns ending uu to --" do
|
442
|
+
expect(smods_rec.send(:get_u_year, ["19uu"])).to eql "19--"
|
443
|
+
expect(smods_rec.send(:get_u_year, ["17uu"])).to eql "17--"
|
444
|
+
end
|
445
|
+
it 'ignores 9999' do
|
446
|
+
expect(smods_rec.send(:get_u_year, ["9999"])).to be_nil
|
447
|
+
end
|
448
|
+
end
|
449
|
+
end
|