parse_date 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.rubocop_todo.yml +3 -3
- data/README.md +7 -1
- data/lib/parse_date/int_from_string.rb +18 -4
- data/lib/parse_date/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b89915718c893cf65a79dfd4d589b9c1e7def99b00f56dcfee56829c5c0941e1
|
4
|
+
data.tar.gz: 96803f595b7a6d6e95f331661e48254eee0204a0d0d856bc83d46bbfe67f72a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df38bb2a88a9417f660a2e03fe642fafd3e82db85999a81d7897b8bb8577d1670a5810359bdadae0134c4edf128e4e44bcdbc59fc9bdcab94955bac2eed6afc0
|
7
|
+
data.tar.gz: a73425d3c6c2a1b8c75e4f577463ff2b321a8dc93d8f35be5318b3e58c83e2f0a3984be67397dd7a14b5380b429eb1d4e6d5edb7383c23f5b7fe94937d8379e4
|
data/.rubocop.yml
CHANGED
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2019-10-
|
3
|
+
# on 2019-10-24 13:45:33 -0700 using RuboCop version 0.74.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
# Offense count: 5
|
10
10
|
Metrics/AbcSize:
|
11
|
-
Max:
|
11
|
+
Max: 39
|
12
12
|
|
13
13
|
# Offense count: 4
|
14
14
|
Metrics/CyclomaticComplexity:
|
@@ -17,7 +17,7 @@ Metrics/CyclomaticComplexity:
|
|
17
17
|
# Offense count: 1
|
18
18
|
# Configuration parameters: CountComments.
|
19
19
|
Metrics/ModuleLength:
|
20
|
-
Max:
|
20
|
+
Max: 176
|
21
21
|
|
22
22
|
# Offense count: 4
|
23
23
|
Metrics/PerceivedComplexity:
|
data/README.md
CHANGED
@@ -57,6 +57,8 @@ ParseDate.parse_range('ca. 5th–6th century A.D.') # (400..599).to_a
|
|
57
57
|
ParseDate.parse_range('ca. 9th–8th century B.C.') # (-999..-800).to_a
|
58
58
|
ParseDate.parse_range('ca. 13th–12th century B.C.') # (-1399..-1200).to_a
|
59
59
|
ParseDate.parse_range('5th century B.C.') # (-599..-500).to_a
|
60
|
+
ParseDate.parse_range('502-504') # [502, 503, 504]
|
61
|
+
ParseDate.parse_range('-2100 - -2000') # (-2100..-2000).to_a
|
60
62
|
ParseDate.parse_range('1975 - 1905') # last year > first year, raises error
|
61
63
|
ParseDate.parse_range('-100 - -150') # last year > first year, raises error
|
62
64
|
ParseDate.parse_range('1975 or 1905') # last year > first year, raises error
|
@@ -90,6 +92,8 @@ ParseDate.earliest_year('ca. 5th–6th century A.D.') # 400
|
|
90
92
|
ParseDate.earliest_year('ca. 9th–8th century B.C.') # -999
|
91
93
|
ParseDate.earliest_year('ca. 13th–12th century B.C.') # -1399
|
92
94
|
ParseDate.earliest_year('5th century B.C.') # -599
|
95
|
+
ParseDate.earliest_year('502-504') # 502
|
96
|
+
ParseDate.earliest_year('-2100 - -2000') # -2100
|
93
97
|
|
94
98
|
ParseDate.latest_year('20000222') # 2000
|
95
99
|
ParseDate.latest_year('195-') # 1959
|
@@ -113,7 +117,9 @@ ParseDate.latest_year('ca. 5th–6th century A.D.') # 599
|
|
113
117
|
ParseDate.latest_year('ca. 9th–8th century B.C.') # -800
|
114
118
|
ParseDate.latest_year('ca. 13th–12th century B.C.') # -1200
|
115
119
|
ParseDate.latest_year('5th century B.C.') # -500
|
116
|
-
ParseDate.latest_year('-5 - 3') # 3
|
120
|
+
ParseDate.latest_year('-5 - 3') # 3
|
121
|
+
ParseDate.latest_year('502-504') # 504
|
122
|
+
ParseDate.latest_year('-2100 - -2000') # -2000
|
117
123
|
|
118
124
|
ParseDate.range_array('1993', '1995') # [1993, 1994, 1995]
|
119
125
|
ParseDate.range_array(1993, 1995) # [1993, 1994, 1995]
|
@@ -25,6 +25,7 @@ class ParseDate
|
|
25
25
|
return ParseDate.send(:year_int_for_bc, date_str) if date_str.match(YEAR_BC_REGEX)
|
26
26
|
|
27
27
|
result ||= ParseDate.send(:between_earliest_year, date_str)
|
28
|
+
result ||= ParseDate.send(:negative_first_four_digits, date_str)
|
28
29
|
result ||= ParseDate.send(:first_four_digits, date_str)
|
29
30
|
result ||= ParseDate.send(:year_from_mm_dd_yy, date_str)
|
30
31
|
result ||= ParseDate.send(:first_year_for_decade, date_str) # 198x or 201x
|
@@ -61,6 +62,7 @@ class ParseDate
|
|
61
62
|
result ||= ParseDate.send(:hyphen_2digit_latest_year, date_str)
|
62
63
|
result ||= ParseDate.send(:yyuu_after_hyphen, date_str)
|
63
64
|
result ||= ParseDate.send(:year_after_or, date_str)
|
65
|
+
result ||= ParseDate.send(:negative_4digits_after_hyphen, date_str)
|
64
66
|
result ||= ParseDate.send(:first_four_digits, date_str)
|
65
67
|
result ||= ParseDate.send(:year_from_mm_dd_yy, date_str)
|
66
68
|
result ||= ParseDate.send(:last_year_for_decade, date_str) # 198x or 201x
|
@@ -75,12 +77,12 @@ class ParseDate
|
|
75
77
|
result.to_i if result && year_int_valid?(result.to_i)
|
76
78
|
end
|
77
79
|
|
78
|
-
# true if the year is between -
|
80
|
+
# true if the year is between -9999 and (current year + 1), inclusive
|
79
81
|
# @return [Boolean] true if the year is between -999 and (current year + 1); false otherwise
|
80
82
|
def self.year_int_valid?(year)
|
81
83
|
return false unless year.is_a? Integer
|
82
84
|
|
83
|
-
(-
|
85
|
+
(-10000 < year.to_i) && (year < Date.today.year + 2)
|
84
86
|
end
|
85
87
|
|
86
88
|
protected
|
@@ -169,6 +171,18 @@ class ParseDate
|
|
169
171
|
nth * -100
|
170
172
|
end
|
171
173
|
|
174
|
+
# looks for -yyyy at beginning of date_str and returns if found
|
175
|
+
# @return [String, nil] negative 4 digit year (e.g. -1865) if date_str has -yyyy, nil otherwise
|
176
|
+
def negative_first_four_digits(date_str)
|
177
|
+
Regexp.last_match(1) if date_str.match(/^(\-\d{4})/)
|
178
|
+
end
|
179
|
+
|
180
|
+
# looks for -yyyy after hyphen and returns if found
|
181
|
+
# @return [String, nil] negative 4 digit year (e.g. -1865) if date_str has -yyyy - -yyyy, nil otherwise
|
182
|
+
def negative_4digits_after_hyphen(date_str)
|
183
|
+
Regexp.last_match(1) if date_str.match(/\-\d{4}\s*\-\s*(\-\d{4})/)
|
184
|
+
end
|
185
|
+
|
172
186
|
# looks for 4 consecutive digits in date_str and returns first occurrence if found
|
173
187
|
# @return [String, nil] 4 digit year (e.g. 1865, 0950) if date_str has yyyy, nil otherwise
|
174
188
|
def first_four_digits(date_str)
|
@@ -195,7 +209,7 @@ class ParseDate
|
|
195
209
|
nil # explicitly want nil if date won't parse
|
196
210
|
end
|
197
211
|
|
198
|
-
DECADE_4CHAR_REGEX = Regexp.new('(^|\D)\d{3}[u\-?x]', REGEX_OPTS)
|
212
|
+
DECADE_4CHAR_REGEX = Regexp.new('(^|\D)\d{3}[u\-?x]($|\D)', REGEX_OPTS)
|
199
213
|
|
200
214
|
# first year of decade (as String) if we have: yyyu, yyy-, yyy? or yyyx pattern
|
201
215
|
# note that these are the only decade patterns found in our actual date strings in MODS records
|
@@ -279,7 +293,7 @@ class ParseDate
|
|
279
293
|
"-#{Regexp.last_match(:last)}".to_i if date_str.match(BETWEEN_Yn_AND_Yn_BC_REGEX)
|
280
294
|
end
|
281
295
|
|
282
|
-
EARLY_NUMERIC_REGEX = Regexp.new('^\-?\d{1,3}([^\du
|
296
|
+
EARLY_NUMERIC_REGEX = Regexp.new('^\-?\d{1,3}([^\du\[]|$)', REGEX_OPTS)
|
283
297
|
|
284
298
|
# year if date_str contains yyy, yy, y, -y, -yy, -yyy, -yyyy
|
285
299
|
# @return [Integer, nil] year if date_str matches pattern; nil otherwise
|
data/lib/parse_date/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parse_date
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naomi Dushay
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: zeitwerk
|