stanford-mods 1.3.3 → 1.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.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
|