stanford-mods 1.5.2 → 1.5.3
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 +48 -30
- data/lib/stanford-mods/origin_info.rb +45 -17
- data/lib/stanford-mods/searchworks.rb +4 -0
- data/lib/stanford-mods/version.rb +1 -1
- data/spec/date_parsing_spec.rb +64 -28
- data/spec/fixtures/searchworks_pub_date_data.rb +932 -0
- data/spec/fixtures/spotlight_pub_date_data.rb +1 -1
- data/spec/origin_info_spec.rb +5 -5
- data/spec/searchworks_format_spec.rb +5 -0
- data/spec/sw_publication_spec.rb +29 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80b7166744ed54bca31cdcbfa1f400d5e05e3e24
|
4
|
+
data.tar.gz: 41439aae07f4ab0d35913284f6c5d3ca3db85f1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6640e0395f1a500507ea4be9daccb561c85a6f0f02eff01a0e32260efe424cc4bb97a6ece0968a55d0bfbfdad8b45bac0e6ea6362edc6df6d242f32ee2829db2
|
7
|
+
data.tar.gz: bf70600680517f261d291d5e377838b6d5b2aad36288bdc238e2b87e9bfbc2d2cf1c70b0c7aa3727f9655d0513cdf30d8290ece7f7e546de43955737777bc7f3
|
@@ -7,16 +7,13 @@ module Stanford
|
|
7
7
|
# - we could add methods like my_date.bc?
|
8
8
|
class DateParsing
|
9
9
|
|
10
|
-
# get
|
11
|
-
#
|
12
|
-
|
13
|
-
|
14
|
-
def self.facet_string_from_date_str(date_str)
|
15
|
-
DateParsing.new(date_str).facet_string_from_date_str
|
10
|
+
# get display value for year, generally an explicit year or "17th century" or "5 B.C." or "1950s" or '845 A.D.'
|
11
|
+
# @return [String, nil] display value for year if we could parse one, nil otherwise
|
12
|
+
def self.date_str_for_display(date_str)
|
13
|
+
DateParsing.new(date_str).date_str_for_display
|
16
14
|
end
|
17
15
|
|
18
16
|
# get year as Integer if we can parse date_str to get a year.
|
19
|
-
# @param [String] date_str String containing a date (we hope)
|
20
17
|
# @return [Integer, nil] Integer year if we could parse one, nil otherwise
|
21
18
|
def self.year_int_from_date_str(date_str)
|
22
19
|
DateParsing.new(date_str).year_int_from_date_str
|
@@ -25,7 +22,6 @@ module Stanford
|
|
25
22
|
# get String sortable value year if we can parse date_str to get a year.
|
26
23
|
# SearchWorks currently uses a string field for pub date sorting; thus so does Spotlight.
|
27
24
|
# The values returned must *lexically* sort in chronological order, so the B.C. dates are tricky
|
28
|
-
# @param [String] date_str String containing a date (we hope)
|
29
25
|
# @return [String, nil] String sortable year if we could parse one, nil otherwise
|
30
26
|
# note that these values must *lexically* sort to create a chronological sort.
|
31
27
|
def self.sortable_year_string_from_date_str(date_str)
|
@@ -56,25 +52,27 @@ module Stanford
|
|
56
52
|
|
57
53
|
BRACKETS_BETWEEN_DIGITS_REXEXP = Regexp.new('\d[' + Regexp.escape('[]') + ']\d')
|
58
54
|
|
59
|
-
# get
|
60
|
-
# @return [String, nil] String
|
61
|
-
def
|
55
|
+
# get display value for year, generally an explicit year or "17th century" or "5 B.C." or "1950s" or '845 A.D.'
|
56
|
+
# @return [String, nil] String value for year if we could parse one, nil otherwise
|
57
|
+
def date_str_for_display
|
62
58
|
return if orig_date_str == '0000-00-00' # shpc collection has these useless dates
|
63
59
|
# B.C. first in case there are 4 digits, e.g. 1600 B.C.
|
64
|
-
return
|
65
|
-
|
60
|
+
return display_str_for_bc if orig_date_str.match(BC_REGEX)
|
61
|
+
# decade next in case there are 4 digits, e.g. 1950s
|
62
|
+
return display_str_for_decade if orig_date_str.match(DECADE_4CHAR_REGEXP) || orig_date_str.match(DECADE_S_REGEXP)
|
63
|
+
result = sortable_year_for_yyyy_or_yy
|
66
64
|
unless result
|
67
65
|
# try removing brackets between digits in case we have 169[5] or [18]91
|
68
66
|
no_brackets = remove_brackets
|
69
|
-
return DateParsing.new(no_brackets).
|
67
|
+
return DateParsing.new(no_brackets).date_str_for_display if no_brackets
|
70
68
|
end
|
71
69
|
# parsing below this line gives string inapprop for year_str_valid?
|
72
70
|
unless self.class.year_str_valid?(result)
|
73
|
-
result =
|
74
|
-
result ||=
|
71
|
+
result = display_str_for_century
|
72
|
+
result ||= display_str_for_early_numeric
|
75
73
|
end
|
76
74
|
# remove leading 0s from early dates
|
77
|
-
result = result.to_i.
|
75
|
+
result = "#{result.to_i} A.D." if result && result.match(/^0\d+$/)
|
78
76
|
result
|
79
77
|
end
|
80
78
|
|
@@ -84,7 +82,8 @@ module Stanford
|
|
84
82
|
return if orig_date_str == '0000-00-00' # shpc collection has these useless dates
|
85
83
|
# B.C. first in case there are 4 digits, e.g. 1600 B.C.
|
86
84
|
return sortable_year_int_for_bc if orig_date_str.match(BC_REGEX)
|
87
|
-
result =
|
85
|
+
result = sortable_year_for_yyyy_or_yy
|
86
|
+
result ||= sortable_year_for_decade # 19xx or 20xx
|
88
87
|
result ||= sortable_year_for_century
|
89
88
|
result ||= sortable_year_int_for_early_numeric
|
90
89
|
unless result
|
@@ -104,7 +103,8 @@ module Stanford
|
|
104
103
|
return if orig_date_str == '0000-00-00' # shpc collection has these useless dates
|
105
104
|
# B.C. first in case there are 4 digits, e.g. 1600 B.C.
|
106
105
|
return sortable_year_str_for_bc if orig_date_str.match(BC_REGEX)
|
107
|
-
result =
|
106
|
+
result = sortable_year_for_yyyy_or_yy
|
107
|
+
result ||= sortable_year_for_decade # 19xx or 20xx
|
108
108
|
result ||= sortable_year_for_century
|
109
109
|
result ||= sortable_year_str_for_early_numeric
|
110
110
|
unless result
|
@@ -118,11 +118,10 @@ module Stanford
|
|
118
118
|
# get String sortable value year if we can parse date_str to get a year.
|
119
119
|
# @return [String, nil] String sortable year if we could parse one, nil otherwise
|
120
120
|
# note that these values must *lexically* sort to create a chronological sort.
|
121
|
-
def
|
121
|
+
def sortable_year_for_yyyy_or_yy
|
122
122
|
# most date strings have a four digit year
|
123
123
|
result = sortable_year_for_yyyy
|
124
124
|
result ||= sortable_year_for_yy # 19xx or 20xx
|
125
|
-
result ||= sortable_year_for_decade # 19xx or 20xx
|
126
125
|
result
|
127
126
|
end
|
128
127
|
|
@@ -161,15 +160,34 @@ module Stanford
|
|
161
160
|
nil # explicitly want nil if date won't parse
|
162
161
|
end
|
163
162
|
|
163
|
+
DECADE_4CHAR_REGEXP = Regexp.new('(^|\D)\d{3}[u\-?x]')
|
164
|
+
|
164
165
|
# get first year of decade (as String) if we have: yyyu, yyy-, yyy? or yyyx pattern
|
165
166
|
# note that these are the only decade patterns found in our actual date strings in MODS records
|
166
167
|
# @return [String, nil] 4 digit year (e.g. 1860, 1950) if orig_date_str matches pattern, nil otherwise
|
167
168
|
def sortable_year_for_decade
|
168
|
-
decade_matches = orig_date_str.match(
|
169
|
+
decade_matches = orig_date_str.match(DECADE_4CHAR_REGEXP) if orig_date_str
|
169
170
|
changed_to_zero = decade_matches.to_s.tr('u\-?x', '0') if decade_matches
|
170
171
|
DateParsing.new(changed_to_zero).sortable_year_for_yyyy if changed_to_zero
|
171
172
|
end
|
172
173
|
|
174
|
+
DECADE_S_REGEXP = Regexp.new('\d{3}0\'?s')
|
175
|
+
|
176
|
+
# get, e.g. 1950s, if we have: yyyu, yyy-, yyy? or yyyx pattern or yyy0s or yyy0's
|
177
|
+
# note that these are the only decade patterns found in our actual date strings in MODS records
|
178
|
+
# @return [String, nil] 4 digit year with s (e.g. 1860s, 1950s) if orig_date_str matches pattern, nil otherwise
|
179
|
+
def display_str_for_decade
|
180
|
+
decade_matches = orig_date_str.match(DECADE_4CHAR_REGEXP) if orig_date_str
|
181
|
+
if decade_matches
|
182
|
+
changed_to_zero = decade_matches.to_s.tr('u\-?x', '0') if decade_matches
|
183
|
+
zeroth_year = DateParsing.new(changed_to_zero).sortable_year_for_yyyy if changed_to_zero
|
184
|
+
return "#{zeroth_year}s" if zeroth_year
|
185
|
+
else
|
186
|
+
decade_matches = orig_date_str.match(DECADE_S_REGEXP) if orig_date_str
|
187
|
+
return decade_matches.to_s.tr("'", '') if decade_matches
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
173
191
|
CENTURY_WORD_REGEXP = Regexp.new('(\d{1,2}).*century')
|
174
192
|
CENTURY_4CHAR_REGEXP = Regexp.new('(\d{1,2})[u\-]{2}')
|
175
193
|
|
@@ -192,10 +210,10 @@ module Stanford
|
|
192
210
|
end
|
193
211
|
end
|
194
212
|
|
195
|
-
# get
|
213
|
+
# get display value for century (17th century) if we have: yyuu, yy--, yy--? or xxth century pattern
|
196
214
|
# note that these are the only century patterns found in our actual date strings in MODS records
|
197
215
|
# @return [String, nil] yy(th) Century if orig_date_str matches pattern, nil otherwise; also nil if B.C. in pattern
|
198
|
-
def
|
216
|
+
def display_str_for_century
|
199
217
|
return unless orig_date_str
|
200
218
|
return if orig_date_str.match(/B\.C\./)
|
201
219
|
century_str_matches = orig_date_str.match(CENTURY_WORD_REGEXP)
|
@@ -228,9 +246,9 @@ module Stanford
|
|
228
246
|
"-#{$1}".to_i if bc_matches
|
229
247
|
end
|
230
248
|
|
231
|
-
# get
|
249
|
+
# get display value for B.C. if we have B.C. pattern
|
232
250
|
# @return [String, nil] ddd B.C. if ddd B.C. in pattern; nil otherwise
|
233
|
-
def
|
251
|
+
def display_str_for_bc
|
234
252
|
bc_matches = orig_date_str.match(BC_REGEX) if orig_date_str
|
235
253
|
bc_matches.to_s if bc_matches
|
236
254
|
end
|
@@ -261,14 +279,14 @@ module Stanford
|
|
261
279
|
orig_date_str.to_i if orig_date_str.match(/^-\d{4}$/)
|
262
280
|
end
|
263
281
|
|
264
|
-
# get
|
282
|
+
# get display value for date String containing yyy, yy, y, -y, -yy, -yyy
|
265
283
|
# negative number strings will be changed to B.C. strings
|
266
|
-
def
|
284
|
+
def display_str_for_early_numeric
|
267
285
|
return unless orig_date_str.match(EARLY_NUMERIC)
|
268
286
|
# negative number becomes B.C.
|
269
|
-
return
|
287
|
+
return "#{orig_date_str[1..-1]} B.C." if orig_date_str.match(/^\-/)
|
270
288
|
# remove leading 0s from early dates
|
271
|
-
orig_date_str.to_i.
|
289
|
+
"#{orig_date_str.to_i} A.D."
|
272
290
|
end
|
273
291
|
|
274
292
|
# NOTE: while Date.parse() works for many dates, the *sortable_year_for_yyyy
|
@@ -4,7 +4,7 @@ require 'mods'
|
|
4
4
|
# Parsing MODS /originInfo for Publication/Imprint data:
|
5
5
|
# * pub year for date slider facet
|
6
6
|
# * pub year for sorting
|
7
|
-
# * pub year for single
|
7
|
+
# * pub year for single display value
|
8
8
|
# * imprint info for display
|
9
9
|
# *
|
10
10
|
# These methods may be used by searchworks.rb file or by downstream apps
|
@@ -12,16 +12,6 @@ module Stanford
|
|
12
12
|
module Mods
|
13
13
|
class Record < ::Mods::Record
|
14
14
|
|
15
|
-
# return a single string intended for facet use for pub date
|
16
|
-
# prefer dateIssued (any) before dateCreated (any) before dateCaptured (any)
|
17
|
-
# look for a keyDate and use it if there is one; otherwise pick earliest date
|
18
|
-
# @param [Boolean] ignore_approximate true if approximate dates (per qualifier attribute)
|
19
|
-
# should be ignored; false if approximate dates should be included
|
20
|
-
# @return [String] single String containing publication year for facet use
|
21
|
-
def pub_date_facet_single_value(ignore_approximate = false)
|
22
|
-
single_pub_year(ignore_approximate, :year_facet_str)
|
23
|
-
end
|
24
|
-
|
25
15
|
# return pub year as an Integer
|
26
16
|
# prefer dateIssued (any) before dateCreated (any) before dateCaptured (any)
|
27
17
|
# look for a keyDate and use it if there is one; otherwise pick earliest date
|
@@ -45,15 +35,53 @@ module Stanford
|
|
45
35
|
single_pub_year(ignore_approximate, :year_sort_str)
|
46
36
|
end
|
47
37
|
|
38
|
+
# return a single string intended for display of pub year
|
39
|
+
# 0 < year < 1000: add A.D. suffix
|
40
|
+
# year < 0: add B.C. suffix. ('-5' => '5 B.C.', '700 B.C.' => '700 B.C.')
|
41
|
+
# 195u => 195x
|
42
|
+
# 19uu => 19xx
|
43
|
+
# '-5' => '5 B.C.'
|
44
|
+
# '700 B.C.' => '700 B.C.'
|
45
|
+
# '7th century' => '7th century'
|
46
|
+
# date ranges?
|
47
|
+
# prefer dateIssued (any) before dateCreated (any) before dateCaptured (any)
|
48
|
+
# look for a keyDate and use it if there is one; otherwise pick earliest date
|
49
|
+
# @param [Boolean] ignore_approximate true if approximate dates (per qualifier attribute)
|
50
|
+
# should be ignored; false if approximate dates should be included
|
51
|
+
def pub_year_display_str(ignore_approximate = false)
|
52
|
+
single_pub_year(ignore_approximate, :year_display_str)
|
53
|
+
|
54
|
+
# TODO: want range displayed when start and end points
|
55
|
+
# TODO: also want best year in year_isi fields
|
56
|
+
# get_main_title_date
|
57
|
+
# https://github.com/sul-dlss/SearchWorks/blob/7d4d870a9d450fed8b081c38dc3dbd590f0b706e/app/helpers/results_document_helper.rb#L8-L46
|
58
|
+
|
59
|
+
#"publication_year_isi" => "Publication date", <-- do it already
|
60
|
+
#"beginning_year_isi" => "Beginning date",
|
61
|
+
#"earliest_year_isi" => "Earliest date",
|
62
|
+
#"earliest_poss_year_isi" => "Earliest possible date",
|
63
|
+
#"ending_year_isi" => "Ending date",
|
64
|
+
#"latest_year_isi" => "Latest date",
|
65
|
+
#"latest_poss_year_isi" => "Latest possible date",
|
66
|
+
#"production_year_isi" => "Production date",
|
67
|
+
#"original_year_isi" => "Original date",
|
68
|
+
#"copyright_year_isi" => "Copyright date"} %>
|
69
|
+
|
70
|
+
#"creation_year_isi" => "Creation date", <-- do it already
|
71
|
+
#{}"release_year_isi" => "Release date",
|
72
|
+
#{}"reprint_year_isi" => "Reprint/reissue date",
|
73
|
+
#{}"other_year_isi" => "Date",
|
74
|
+
end
|
75
|
+
|
48
76
|
# given the passed date elements, look for a single keyDate and use it if there is one;
|
49
77
|
# otherwise pick earliest parseable date
|
50
78
|
# @param [Array<Nokogiri::XML::Element>] date_el_array the elements from which to select a pub date
|
51
|
-
# @return [String] single String containing publication year for
|
52
|
-
def
|
53
|
-
result = date_parsing_result(date_el_array, :
|
79
|
+
# @return [String] single String containing publication year for display
|
80
|
+
def year_display_str(date_el_array)
|
81
|
+
result = date_parsing_result(date_el_array, :date_str_for_display)
|
54
82
|
return result if result
|
55
83
|
_ignore, orig_str_to_parse = self.class.earliest_year_str(date_el_array)
|
56
|
-
DateParsing.
|
84
|
+
DateParsing.date_str_for_display(orig_str_to_parse) if orig_str_to_parse
|
57
85
|
end
|
58
86
|
|
59
87
|
# given the passed date elements, look for a single keyDate and use it if there is one;
|
@@ -205,8 +233,8 @@ module Stanford
|
|
205
233
|
# Spotlight: pub_date field should be replaced by pub_year_w_approx_isi and pub_year_no_approx_isi
|
206
234
|
# SearchWorks: pub_date field used for display in search results and show view; for sorting nearby-on-shelf
|
207
235
|
# these could be done with more approp fields/methods (pub_year_int for sorting; new pub year methods to populate field)
|
208
|
-
# TODO: prob should
|
209
|
-
# need head-to-head testing with
|
236
|
+
# TODO: prob should deprecate this in favor of pub_year_display_str;
|
237
|
+
# need head-to-head testing with pub_year_display_str
|
210
238
|
# @return <Array[String]> with values for the pub date facet
|
211
239
|
def pub_date_facet
|
212
240
|
if pub_date
|
@@ -366,6 +366,10 @@ module Stanford
|
|
366
366
|
end
|
367
367
|
end
|
368
368
|
end
|
369
|
+
# Archived website is in the MODS genre tag but it is considered a
|
370
|
+
# Resource type for Searchworks, so it needs to be removed from the
|
371
|
+
# applicable genre values
|
372
|
+
val.delete 'Archived website'
|
369
373
|
val.uniq
|
370
374
|
end
|
371
375
|
|
data/spec/date_parsing_spec.rb
CHANGED
@@ -388,10 +388,10 @@ describe "date parsing methods" do
|
|
388
388
|
'8 B.C.' => -8
|
389
389
|
}
|
390
390
|
|
391
|
-
context '*
|
392
|
-
it 'calls instance method
|
393
|
-
expect_any_instance_of(Stanford::Mods::DateParsing).to receive(:
|
394
|
-
Stanford::Mods::DateParsing.
|
391
|
+
context '*date_str_for_display' do
|
392
|
+
it 'calls instance method date_str_for_display' do
|
393
|
+
expect_any_instance_of(Stanford::Mods::DateParsing).to receive(:date_str_for_display)
|
394
|
+
Stanford::Mods::DateParsing.date_str_for_display('1666')
|
395
395
|
end
|
396
396
|
end
|
397
397
|
context '*sortable_year_string_from_date_str' do
|
@@ -407,7 +407,7 @@ describe "date parsing methods" do
|
|
407
407
|
end
|
408
408
|
end
|
409
409
|
|
410
|
-
context '#
|
410
|
+
context '#date_str_for_display' do
|
411
411
|
single_year
|
412
412
|
.merge(specific_month)
|
413
413
|
.merge(specific_day)
|
@@ -417,41 +417,48 @@ describe "date parsing methods" do
|
|
417
417
|
.merge(brackets_in_middle_of_year)
|
418
418
|
.merge(invalid_but_can_get_year).each do |example, expected|
|
419
419
|
expected = expected.to_i.to_s if expected.match(/^\d+$/)
|
420
|
+
expected = "#{expected} A.D." if expected.match(/^\d{1,3}$/)
|
420
421
|
it "#{expected} for single value #{example}" do
|
421
|
-
expect(Stanford::Mods::DateParsing.new(example).
|
422
|
+
expect(Stanford::Mods::DateParsing.new(example).date_str_for_display).to eq expected
|
422
423
|
end
|
423
424
|
end
|
424
425
|
|
425
|
-
|
426
|
-
.merge(multiple_years_4_digits_once)
|
427
|
-
.merge(decade_only)
|
426
|
+
decade_only
|
428
427
|
.merge(decade_only_4_digits).each do |example, expected|
|
428
|
+
expected = "#{expected.first.to_i}s" if expected.first.match(/^\d+$/)
|
429
|
+
it "#{expected} for decade #{example}" do
|
430
|
+
expect(Stanford::Mods::DateParsing.new(example).date_str_for_display).to eq expected
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
434
|
+
multiple_years
|
435
|
+
.merge(multiple_years_4_digits_once).each do |example, expected|
|
429
436
|
it "#{expected.first} for multi-value #{example}" do
|
430
|
-
expect(Stanford::Mods::DateParsing.new(example).
|
437
|
+
expect(Stanford::Mods::DateParsing.new(example).date_str_for_display).to eq expected.first
|
431
438
|
end
|
432
439
|
end
|
433
440
|
|
434
441
|
early_numeric_dates.each do |example, expected|
|
435
442
|
if example.start_with?('-')
|
436
|
-
exp = example[1..-1]
|
443
|
+
exp = "#{example[1..-1]} B.C."
|
437
444
|
it "#{exp} for #{example}" do
|
438
|
-
expect(Stanford::Mods::DateParsing.new(example).
|
445
|
+
expect(Stanford::Mods::DateParsing.new(example).date_str_for_display).to eq exp
|
439
446
|
end
|
440
447
|
else
|
441
|
-
expected = expected.to_i.
|
448
|
+
expected = "#{expected.to_i} A.D." if expected.match(/^\d+$/)
|
442
449
|
it "#{expected} for #{example}" do
|
443
|
-
expect(Stanford::Mods::DateParsing.new(example).
|
450
|
+
expect(Stanford::Mods::DateParsing.new(example).date_str_for_display).to eq expected
|
444
451
|
end
|
445
452
|
end
|
446
453
|
end
|
447
454
|
|
448
455
|
bc_dates.keys.each do |example|
|
449
456
|
it "#{example} for #{example}" do
|
450
|
-
expect(Stanford::Mods::DateParsing.new(example).
|
457
|
+
expect(Stanford::Mods::DateParsing.new(example).date_str_for_display).to eq example
|
451
458
|
end
|
452
459
|
end
|
453
460
|
it '1600 B.C. for 1600 B.C.' do
|
454
|
-
expect(Stanford::Mods::DateParsing.new('1600 B.C.').
|
461
|
+
expect(Stanford::Mods::DateParsing.new('1600 B.C.').date_str_for_display).to eq '1600 B.C.'
|
455
462
|
end
|
456
463
|
|
457
464
|
[ # bad dates
|
@@ -461,7 +468,7 @@ describe "date parsing methods" do
|
|
461
468
|
'uuuu'
|
462
469
|
].each do |example|
|
463
470
|
it "nil for #{example}" do
|
464
|
-
expect(Stanford::Mods::DateParsing.new(example).
|
471
|
+
expect(Stanford::Mods::DateParsing.new(example).date_str_for_display).to eq nil
|
465
472
|
end
|
466
473
|
end
|
467
474
|
end
|
@@ -701,6 +708,34 @@ describe "date parsing methods" do
|
|
701
708
|
end
|
702
709
|
end
|
703
710
|
|
711
|
+
context '#display_str_for_decade' do
|
712
|
+
decade_only.each do |example, expected|
|
713
|
+
it "#{expected.first} for #{example}" do
|
714
|
+
expect(Stanford::Mods::DateParsing.new(example).display_str_for_decade).to eq "#{expected.first}s"
|
715
|
+
end
|
716
|
+
end
|
717
|
+
{ # example string as key, expected result as value
|
718
|
+
'199u' => '1990s',
|
719
|
+
'200-' => '2000s',
|
720
|
+
'201?' => '2010s',
|
721
|
+
'202x' => '2020s',
|
722
|
+
'early 1890s' => '1890s',
|
723
|
+
'1950s' => '1950s',
|
724
|
+
"1950's" => '1950s'
|
725
|
+
}.each do |example, expected|
|
726
|
+
it "#{expected} for #{example}" do
|
727
|
+
expect(Stanford::Mods::DateParsing.new(example).display_str_for_decade).to eq expected
|
728
|
+
end
|
729
|
+
end
|
730
|
+
|
731
|
+
# some of the strings this method cannot handle (so must be parsed with other instance methods)
|
732
|
+
specific_day_2_digit_year.keys.each do |example|
|
733
|
+
it "nil for #{example}" do
|
734
|
+
expect(Stanford::Mods::DateParsing.new(example).display_str_for_decade).to eq nil
|
735
|
+
end
|
736
|
+
end
|
737
|
+
end
|
738
|
+
|
704
739
|
context '#sortable_year_for_century' do
|
705
740
|
century_only.keys.each do |example|
|
706
741
|
it "1700 from #{example}" do
|
@@ -715,10 +750,10 @@ describe "date parsing methods" do
|
|
715
750
|
end
|
716
751
|
end
|
717
752
|
|
718
|
-
context '#
|
753
|
+
context '#display_str_for_century' do
|
719
754
|
century_only.each do |example, expected|
|
720
755
|
it "#{expected} for #{example}" do
|
721
|
-
expect(Stanford::Mods::DateParsing.new(example).
|
756
|
+
expect(Stanford::Mods::DateParsing.new(example).display_str_for_century).to eq expected
|
722
757
|
end
|
723
758
|
end
|
724
759
|
{ # example string as key, expected result as value
|
@@ -730,12 +765,12 @@ describe "date parsing methods" do
|
|
730
765
|
'2--' => '3rd century'
|
731
766
|
}.each do |example, expected|
|
732
767
|
it "#{expected} for #{example}" do
|
733
|
-
expect(Stanford::Mods::DateParsing.new(example).
|
768
|
+
expect(Stanford::Mods::DateParsing.new(example).display_str_for_century).to eq expected
|
734
769
|
end
|
735
770
|
end
|
736
771
|
|
737
772
|
it 'nil for 7th century B.C. (to be handled in different method)' do
|
738
|
-
expect(Stanford::Mods::DateParsing.new('7th century B.C.').
|
773
|
+
expect(Stanford::Mods::DateParsing.new('7th century B.C.').display_str_for_century).to eq nil
|
739
774
|
end
|
740
775
|
end
|
741
776
|
|
@@ -755,17 +790,18 @@ describe "date parsing methods" do
|
|
755
790
|
end
|
756
791
|
end
|
757
792
|
|
758
|
-
context '#
|
793
|
+
context '#display_str_for_early_numeric' do
|
759
794
|
early_numeric_dates.each do |example, expected|
|
760
795
|
expected = expected.to_i.to_s if expected.match(/^\d+$/)
|
761
796
|
if example.start_with?('-')
|
762
|
-
exp = example[1..-1]
|
797
|
+
exp = "#{example[1..-1]} B.C."
|
763
798
|
it "#{exp} for #{example}" do
|
764
|
-
expect(Stanford::Mods::DateParsing.new(example).
|
799
|
+
expect(Stanford::Mods::DateParsing.new(example).display_str_for_early_numeric).to eq exp
|
765
800
|
end
|
766
801
|
else
|
802
|
+
exp = "#{expected} A.D."
|
767
803
|
it "#{expected} for #{example}" do
|
768
|
-
expect(Stanford::Mods::DateParsing.new(example).
|
804
|
+
expect(Stanford::Mods::DateParsing.new(example).display_str_for_early_numeric).to eq exp
|
769
805
|
end
|
770
806
|
end
|
771
807
|
end
|
@@ -787,14 +823,14 @@ describe "date parsing methods" do
|
|
787
823
|
end
|
788
824
|
end
|
789
825
|
|
790
|
-
context '#
|
826
|
+
context '#display_str_for_bc' do
|
791
827
|
bc_dates.keys.each do |example|
|
792
828
|
it "#{example} for #{example}" do
|
793
|
-
expect(Stanford::Mods::DateParsing.new(example).
|
829
|
+
expect(Stanford::Mods::DateParsing.new(example).display_str_for_bc).to eq example
|
794
830
|
end
|
795
831
|
end
|
796
832
|
it '1600 B.C. for 1600 B.C.' do
|
797
|
-
expect(Stanford::Mods::DateParsing.new('1600 B.C.').
|
833
|
+
expect(Stanford::Mods::DateParsing.new('1600 B.C.').display_str_for_bc).to eq '1600 B.C.'
|
798
834
|
end
|
799
835
|
end
|
800
836
|
|