stanford-mods 1.3.4 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/stanford-mods/date_parsing.rb +80 -34
- data/lib/stanford-mods/origin_info.rb +143 -88
- data/lib/stanford-mods/searchworks.rb +1 -0
- data/lib/stanford-mods/version.rb +1 -1
- data/spec/date_parsing_spec.rb +121 -6
- data/spec/origin_info_spec.rb +80 -35
- data/spec/searchworks_format_spec.rb +1 -0
- data/spec/searchworks_pub_dates_spec.rb +154 -137
- metadata +2 -2
@@ -4,211 +4,228 @@ require 'spec_helper'
|
|
4
4
|
describe "Date methods (searchworks.rb)" do
|
5
5
|
|
6
6
|
let(:ns_decl) { "xmlns='#{Mods::MODS_NS}'" }
|
7
|
+
let(:smods_rec) { Stanford::Mods::Record.new }
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
# NOTE: walters dates are now:
|
10
|
+
# dateIssued: 1500 CE
|
11
|
+
# dateIssued: 15th century CE
|
12
|
+
# dateIssued: Ca. 1580 CE
|
13
|
+
# or
|
14
|
+
# dateCreated: 4 digit year
|
15
|
+
# and they should go in spec/fixtures searchworks_pub_date_data.rb
|
16
|
+
|
17
|
+
|
18
|
+
# @deprecated: need to switch to pub_year_int, or pub_date_sortable_string if you must have a string (why?)
|
19
|
+
context '#pub_date_sort (deprecated)' do
|
20
|
+
it 'four digits' do
|
21
|
+
allow(smods_rec).to receive(:pub_date).and_return('1945')
|
22
|
+
expect(smods_rec.pub_date_sort).to eq('1945')
|
23
|
+
end
|
24
|
+
it '3 digits' do
|
25
|
+
allow(smods_rec).to receive(:pub_date).and_return('945')
|
26
|
+
expect(smods_rec.pub_date_sort).to eq('0945')
|
27
|
+
end
|
28
|
+
it '16--' do
|
29
|
+
allow(smods_rec).to receive(:pub_date).and_return('16--')
|
30
|
+
expect(smods_rec.pub_date_sort).to eq('1600')
|
31
|
+
end
|
32
|
+
it '9--' do
|
33
|
+
allow(smods_rec).to receive(:pub_date).and_return('9--')
|
34
|
+
expect(smods_rec.pub_date_sort).to eq('0900')
|
35
|
+
end
|
36
|
+
it '1980 for 198u' do
|
37
|
+
m = "<mods #{ns_decl}>
|
38
|
+
<originInfo>
|
39
|
+
<dateIssued>198u</dateIssued>
|
40
|
+
</originInfo></mods>"
|
41
|
+
smods_rec.from_str(m)
|
42
|
+
expect(smods_rec.pub_date_sort).to eq('1980')
|
43
|
+
end
|
44
|
+
it '1900 for 19uu' do
|
45
|
+
m = "<mods #{ns_decl}>
|
46
|
+
<originInfo>
|
47
|
+
<dateIssued>19uu</dateIssued>
|
48
|
+
</originInfo></mods>"
|
49
|
+
smods_rec.from_str(m)
|
50
|
+
expect(smods_rec.pub_date_sort).to eq('1900')
|
51
|
+
end
|
52
|
+
it '-700 for 300 B.C.' do
|
10
53
|
m = "<mods #{ns_decl}><originInfo>
|
11
|
-
<dateCreated>
|
12
|
-
<dateCreated>1904</dateCreated>
|
13
|
-
<dateIssued>1906</dateIssued>
|
54
|
+
<dateCreated>300 B.C.</dateCreated>
|
14
55
|
</originInfo></mods>"
|
15
|
-
smods_rec = Stanford::Mods::Record.new
|
16
56
|
smods_rec.from_str(m)
|
17
|
-
expect(smods_rec.
|
57
|
+
expect(smods_rec.pub_date_sort).to eq('-700')
|
18
58
|
end
|
19
|
-
|
20
|
-
|
21
|
-
context "pub_date" do
|
22
|
-
let(:smods_rec) { Stanford::Mods::Record.new }
|
23
|
-
|
24
|
-
it "uses dateCreated if no dateIssued" do
|
59
|
+
it '0966 for 966' do
|
25
60
|
m = "<mods #{ns_decl}><originInfo>
|
26
|
-
<
|
61
|
+
<dateIssued>966</dateIssued>
|
27
62
|
</originInfo></mods>"
|
28
63
|
smods_rec.from_str(m)
|
29
|
-
expect(smods_rec.
|
64
|
+
expect(smods_rec.pub_date_sort).to eq('0966')
|
30
65
|
end
|
31
|
-
it
|
66
|
+
it '0800 for 9th century' do
|
32
67
|
m = "<mods #{ns_decl}><originInfo>
|
33
|
-
<
|
68
|
+
<dateIssued>9th century</dateIssued>
|
34
69
|
</originInfo></mods>"
|
35
70
|
smods_rec.from_str(m)
|
36
|
-
expect(smods_rec.
|
71
|
+
expect(smods_rec.pub_date_sort).to eq('0800')
|
37
72
|
end
|
38
|
-
|
73
|
+
end
|
74
|
+
|
75
|
+
context '#pub_date_facet' do
|
76
|
+
it '1980 for 198u' do
|
77
|
+
m = "<mods #{ns_decl}>
|
78
|
+
<originInfo>
|
79
|
+
<dateIssued>198u</dateIssued>
|
80
|
+
</originInfo></mods>"
|
81
|
+
smods_rec.from_str(m)
|
82
|
+
expect(smods_rec.pub_date_facet).to eq('1980')
|
83
|
+
end
|
84
|
+
it '20th century for 19uu' do
|
85
|
+
m = "<mods #{ns_decl}>
|
86
|
+
<originInfo>
|
87
|
+
<dateIssued>19uu</dateIssued>
|
88
|
+
</originInfo></mods>"
|
89
|
+
smods_rec.from_str(m)
|
90
|
+
expect(smods_rec.pub_date_facet).to eq('20th century')
|
91
|
+
end
|
92
|
+
it '3000 B.C. for 300 B.C.' do
|
39
93
|
m = "<mods #{ns_decl}><originInfo>
|
40
|
-
<dateCreated>
|
94
|
+
<dateCreated>300 B.C.</dateCreated>
|
41
95
|
</originInfo></mods>"
|
42
96
|
smods_rec.from_str(m)
|
43
|
-
expect(smods_rec.
|
97
|
+
expect(smods_rec.pub_date_facet).to eq('300 B.C.')
|
44
98
|
end
|
45
|
-
it '
|
99
|
+
it '966 for 966' do
|
46
100
|
m = "<mods #{ns_decl}><originInfo>
|
47
|
-
<
|
101
|
+
<dateIssued>966</dateIssued>
|
48
102
|
</originInfo></mods>"
|
49
103
|
smods_rec.from_str(m)
|
50
|
-
expect(smods_rec.
|
104
|
+
expect(smods_rec.pub_date_facet).to eq('966')
|
51
105
|
end
|
52
|
-
it '
|
106
|
+
it '9th century for 9th century' do
|
53
107
|
m = "<mods #{ns_decl}><originInfo>
|
54
|
-
<dateIssued>
|
108
|
+
<dateIssued>9th century</dateIssued>
|
55
109
|
</originInfo></mods>"
|
56
110
|
smods_rec.from_str(m)
|
57
|
-
expect(smods_rec.
|
111
|
+
expect(smods_rec.pub_date_facet).to eq('9th century')
|
58
112
|
end
|
59
|
-
|
113
|
+
end
|
114
|
+
|
115
|
+
context 'uses dateIssued with marc encoding for sorting and faceting' do
|
116
|
+
it '1860' do
|
60
117
|
m = "<mods #{ns_decl}><originInfo>
|
61
|
-
<dateIssued>
|
118
|
+
<dateIssued>1844</dateIssued>
|
119
|
+
<dateIssued encoding=\"marc\">1860</dateIssued>
|
62
120
|
</originInfo></mods>"
|
63
121
|
smods_rec.from_str(m)
|
64
|
-
expect(smods_rec.
|
122
|
+
expect(smods_rec.pub_date_sort).to eq('1860') # @deprecated: need to switch to pub_year_int, or pub_date_sortable_string if you must have a string (why?)
|
123
|
+
expect(smods_rec.pub_date_facet).to eq('1860')
|
65
124
|
end
|
66
|
-
it '
|
125
|
+
it '186?' do
|
67
126
|
m = "<mods #{ns_decl}><originInfo>
|
68
|
-
<
|
127
|
+
<dateIssued>1844</dateIssued>
|
128
|
+
<dateIssued encoding=\"marc\">186?</dateIssued>
|
69
129
|
</originInfo></mods>"
|
70
130
|
smods_rec.from_str(m)
|
71
|
-
expect(smods_rec.
|
131
|
+
expect(smods_rec.pub_date_sort).to eq('1860') # @deprecated: need to switch to pub_year_int, or pub_date_sortable_string if you must have a string (why?)
|
132
|
+
expect(smods_rec.pub_date_facet).to eq('1860')
|
72
133
|
end
|
73
|
-
|
134
|
+
end
|
135
|
+
|
136
|
+
context '#pub_year (protected)' do
|
137
|
+
it '-700 for 300 B.C.' do
|
74
138
|
m = "<mods #{ns_decl}><originInfo>
|
75
139
|
<dateCreated>300 B.C.</dateCreated>
|
76
140
|
</originInfo></mods>"
|
77
141
|
smods_rec.from_str(m)
|
78
|
-
expect(smods_rec.pub_year).to eq('-700')
|
79
|
-
expect(smods_rec.pub_date).to eq('-700')
|
80
|
-
expect(smods_rec.pub_date_sort).to eq('-700')
|
81
|
-
expect(smods_rec.pub_date_facet).to eq('300 B.C.')
|
142
|
+
expect(smods_rec.send(:pub_year)).to eq('-700')
|
82
143
|
end
|
83
|
-
|
144
|
+
end
|
145
|
+
|
146
|
+
context "#pub_date (protected)" do
|
147
|
+
it "uses dateCreated if no dateIssued" do
|
84
148
|
m = "<mods #{ns_decl}><originInfo>
|
85
|
-
<
|
149
|
+
<dateCreated>1904</dateCreated>
|
86
150
|
</originInfo></mods>"
|
87
151
|
smods_rec.from_str(m)
|
88
|
-
expect(smods_rec.
|
89
|
-
expect(smods_rec.pub_date_sort).to eq('1800')
|
90
|
-
expect(smods_rec.pub_date).to eq('18--')
|
152
|
+
expect(smods_rec.send(:pub_date)).to eq('1904')
|
91
153
|
end
|
92
|
-
it
|
154
|
+
it "gets year from text date" do
|
93
155
|
m = "<mods #{ns_decl}><originInfo>
|
94
|
-
<
|
156
|
+
<dateCreated>Aug. 3rd, 1886</dateCreated>
|
95
157
|
</originInfo></mods>"
|
96
158
|
smods_rec.from_str(m)
|
97
|
-
expect(smods_rec.pub_date).to eq('
|
98
|
-
expect(smods_rec.pub_date_sort).to eq('1517')
|
99
|
-
expect(smods_rec.pub_date_facet).to eq('1517')
|
159
|
+
expect(smods_rec.send(:pub_date)).to eq('1886')
|
100
160
|
end
|
101
|
-
it
|
161
|
+
it "ignores question marks and square brackets" do
|
102
162
|
m = "<mods #{ns_decl}><originInfo>
|
103
|
-
<
|
163
|
+
<dateCreated>Aug. 3rd, [18]86?</dateCreated>
|
104
164
|
</originInfo></mods>"
|
105
165
|
smods_rec.from_str(m)
|
106
|
-
expect(smods_rec.pub_date).to eq('
|
107
|
-
expect(smods_rec.pub_date_sort).to eq('1400')
|
108
|
-
expect(smods_rec.pub_date_facet).to eq('15th century')
|
166
|
+
expect(smods_rec.send(:pub_date)).to eq('1886')
|
109
167
|
end
|
110
|
-
it '
|
168
|
+
it '1890 for 1890s' do
|
111
169
|
m = "<mods #{ns_decl}><originInfo>
|
112
|
-
<
|
170
|
+
<dateCreated>early 1890s</dateCreated>
|
113
171
|
</originInfo></mods>"
|
114
172
|
smods_rec.from_str(m)
|
115
|
-
expect(smods_rec.pub_date).to eq('
|
116
|
-
expect(smods_rec.pub_date_sort).to eq('0966')
|
117
|
-
expect(smods_rec.pub_date_facet).to eq('966')
|
173
|
+
expect(smods_rec.send(:pub_date)).to eq('1890')
|
118
174
|
end
|
119
|
-
it '
|
175
|
+
it 'takes first occurring 4 digit date in string' do
|
120
176
|
m = "<mods #{ns_decl}><originInfo>
|
121
|
-
<
|
177
|
+
<dateCreated>Text dated June 4, 1594; miniatures added by 1596</dateCreated>
|
122
178
|
</originInfo></mods>"
|
123
179
|
smods_rec.from_str(m)
|
124
|
-
expect(smods_rec.pub_date).to eq('
|
125
|
-
expect(smods_rec.pub_date_sort).to eq('0800')
|
126
|
-
expect(smods_rec.pub_date_facet).to eq('9th century')
|
180
|
+
expect(smods_rec.send(:pub_date)).to eq('1594')
|
127
181
|
end
|
128
|
-
it '
|
182
|
+
it '1980 for 198u' do
|
129
183
|
m = "<mods #{ns_decl}><originInfo>
|
130
|
-
<dateIssued
|
184
|
+
<dateIssued >198u</dateIssued>
|
131
185
|
</originInfo></mods>"
|
132
186
|
smods_rec.from_str(m)
|
133
|
-
expect(smods_rec.
|
134
|
-
|
135
|
-
|
136
|
-
|
187
|
+
expect(smods_rec.send(:pub_date)).to eq('1980')
|
188
|
+
end
|
189
|
+
it '19-- for 19uu' do
|
190
|
+
m = "<mods #{ns_decl}>
|
191
|
+
<originInfo>
|
192
|
+
<dateIssued>19uu</dateIssued>
|
193
|
+
</originInfo></mods>"
|
194
|
+
smods_rec.from_str(m)
|
195
|
+
expect(smods_rec.send(:pub_date)).to eq('19--')
|
137
196
|
end
|
138
|
-
it '
|
197
|
+
it '-700 for 300 B.C.' do
|
139
198
|
m = "<mods #{ns_decl}><originInfo>
|
140
|
-
<
|
199
|
+
<dateCreated>300 B.C.</dateCreated>
|
141
200
|
</originInfo></mods>"
|
142
201
|
smods_rec.from_str(m)
|
143
|
-
expect(smods_rec.
|
144
|
-
expect(smods_rec.pub_date).to eq('1860')
|
145
|
-
expect(smods_rec.pub_date_sort).to eq('1860')
|
146
|
-
expect(smods_rec.pub_date_facet).to eq('1860')
|
202
|
+
expect(smods_rec.send(:pub_date)).to eq('-700')
|
147
203
|
end
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
<originInfo>
|
155
|
-
<dateIssued encoding=\"marc\" point=\"start\" keyDate=\"yes\">198u</dateIssued>
|
156
|
-
<dateIssued encoding=\"marc\" point=\"end\">9999</dateIssued>
|
157
|
-
</originInfo></mods>"
|
158
|
-
smr = Stanford::Mods::Record.new
|
159
|
-
smr.from_str(m)
|
160
|
-
smr
|
161
|
-
end
|
162
|
-
it 'pub_date: 198u = 1980' do
|
163
|
-
expect(smods_rec.pub_date).to eq('1980')
|
164
|
-
end
|
165
|
-
it "pub_date_sort: 198u = 1980" do
|
166
|
-
expect(smods_rec.pub_date_sort).to eq('1980')
|
167
|
-
end
|
168
|
-
it "pub_date_facet: 198u = 1980" do
|
169
|
-
expect(smods_rec.pub_date_facet).to eq('1980')
|
170
|
-
end
|
171
|
-
end
|
172
|
-
context "double digit u notation (19uu)" do
|
173
|
-
let(:smods_rec) do
|
174
|
-
m = "<mods #{ns_decl}>
|
175
|
-
<originInfo>
|
176
|
-
<dateIssued encoding=\"marc\" point=\"start\" keyDate=\"yes\">19uu</dateIssued>
|
177
|
-
<dateIssued encoding=\"marc\" point=\"end\">9999</dateIssued>
|
178
|
-
</originInfo></mods>"
|
179
|
-
smr = Stanford::Mods::Record.new
|
180
|
-
smr.from_str(m)
|
181
|
-
smr
|
182
|
-
end
|
183
|
-
it 'pub_date: 19uu = 19--' do
|
184
|
-
expect(smods_rec.pub_date).to eq('19--')
|
185
|
-
end
|
186
|
-
it "pub_date_sort: 19uu = 1900" do
|
187
|
-
expect(smods_rec.pub_date_sort).to eq('1900')
|
188
|
-
end
|
189
|
-
it "pub_date_facet: 19uu = 20th century" do
|
190
|
-
expect(smods_rec.pub_date_facet).to eq('20th century')
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end # u notation
|
194
|
-
|
195
|
-
context 'pub_date_sort' do
|
196
|
-
let(:smods_rec) { Stanford::Mods::Record.new }
|
197
|
-
it 'four digits' do
|
198
|
-
allow(smods_rec).to receive(:pub_date).and_return('1945')
|
199
|
-
expect(smods_rec.pub_date_sort).to eq('1945')
|
200
|
-
end
|
201
|
-
it '3 digits' do
|
202
|
-
allow(smods_rec).to receive(:pub_date).and_return('945')
|
203
|
-
expect(smods_rec.pub_date_sort).to eq('0945')
|
204
|
+
it '966 for 966' do
|
205
|
+
m = "<mods #{ns_decl}><originInfo>
|
206
|
+
<dateIssued>966</dateIssued>
|
207
|
+
</originInfo></mods>"
|
208
|
+
smods_rec.from_str(m)
|
209
|
+
expect(smods_rec.send(:pub_date)).to eq('966')
|
204
210
|
end
|
205
|
-
it '
|
206
|
-
|
207
|
-
|
211
|
+
it '8-- for 9th century' do
|
212
|
+
m = "<mods #{ns_decl}><originInfo>
|
213
|
+
<dateIssued>9th century</dateIssued>
|
214
|
+
</originInfo></mods>"
|
215
|
+
smods_rec.from_str(m)
|
216
|
+
expect(smods_rec.send(:pub_date)).to eq('8--')
|
208
217
|
end
|
209
|
-
|
210
|
-
|
211
|
-
|
218
|
+
end # pub_date
|
219
|
+
context "pub_dates (protected)" do
|
220
|
+
it "puts dateIssued values before dateCreated values" do
|
221
|
+
m = "<mods #{ns_decl}><originInfo>
|
222
|
+
<dateCreated>1904</dateCreated>
|
223
|
+
<dateCreated>1904</dateCreated>
|
224
|
+
<dateIssued>1906</dateIssued>
|
225
|
+
</originInfo></mods>"
|
226
|
+
smods_rec = Stanford::Mods::Record.new
|
227
|
+
smods_rec.from_str(m)
|
228
|
+
expect(smods_rec.send(:pub_dates)).to eq(['1906', '1904', '1904'])
|
212
229
|
end
|
213
230
|
end
|
214
231
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stanford-mods
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naomi Dushay
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-01-
|
12
|
+
date: 2016-01-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mods
|