parse_date 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +2 -2
- data/README.md +15 -0
- data/lib/parse_date/int_from_string.rb +15 -7
- 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: c818fd11526f5dbddb22a29801089a6ff9946d0eb23a208af5316a34c2201836
|
4
|
+
data.tar.gz: bb5b1f93425fe42659b144554b8a21dc95615a7b7e35ac1a361d7696869367f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b8f75b733e86e4f6f6178279a7959a6693443ddd2bb0c1315957b3d197993c2bd19790516f5170b6458f0ae4209ce3bf8b9e83fdb9b30b373e0bf2896aed93d
|
7
|
+
data.tar.gz: a3adec7a2979f591386a9674f7d096f70dc9146af27ed3b734404f195fa35c820b5218a850365ac386a6d478cc71bf7b7f1d78ffcdf523d6d4547b3d52caeff3
|
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-28
|
3
|
+
# on 2019-10-28 20:35:55 -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
|
@@ -17,7 +17,7 @@ Metrics/CyclomaticComplexity:
|
|
17
17
|
# Offense count: 1
|
18
18
|
# Configuration parameters: CountComments.
|
19
19
|
Metrics/ModuleLength:
|
20
|
-
Max:
|
20
|
+
Max: 183
|
21
21
|
|
22
22
|
# Offense count: 4
|
23
23
|
Metrics/PerceivedComplexity:
|
data/README.md
CHANGED
@@ -52,13 +52,18 @@ ParseDate.parse_range('17--?-18--?') # (1700..1899).to_a
|
|
52
52
|
ParseDate.parse_range('1835 or 1836') # [1835, 1836]
|
53
53
|
ParseDate.parse_range('17-- or 18--?') # (1700..1899).to_a
|
54
54
|
ParseDate.parse_range('-2 or 1?') # (-2..1).to_a
|
55
|
+
ParseDate.parse_range('1500? to 1582') # (1500..1582).to_a
|
55
56
|
ParseDate.parse_range('17th or 18th century?') # (1600..1799).to_a
|
56
57
|
ParseDate.parse_range('ca. 5th–6th century A.D.') # (400..599).to_a
|
57
58
|
ParseDate.parse_range('ca. 9th–8th century B.C.') # (-999..-800).to_a
|
58
59
|
ParseDate.parse_range('ca. 13th–12th century B.C.') # (-1399..-1200).to_a
|
59
60
|
ParseDate.parse_range('5th century B.C.') # (-599..-500).to_a
|
60
61
|
ParseDate.parse_range('502-504') # [502, 503, 504]
|
62
|
+
ParseDate.parse_range('950-60') # (950..960).to_a
|
63
|
+
ParseDate.parse_range('-0150 - -0100') # (-150..-100).to_a
|
61
64
|
ParseDate.parse_range('-2100 - -2000') # (-2100..-2000).to_a
|
65
|
+
ParseDate.parse_range('1230—1239 CE') # (1230..1239).to_a (alternate hyphen char)
|
66
|
+
ParseDate.parse_range('996–1021 CE') # (996..1021).to_a (diff alternate hyphen char)
|
62
67
|
ParseDate.parse_range('1975 - 1905') # last year > first year, raises error
|
63
68
|
ParseDate.parse_range('-100 - -150') # last year > first year, raises error
|
64
69
|
ParseDate.parse_range('1975 or 1905') # last year > first year, raises error
|
@@ -82,7 +87,10 @@ ParseDate.earliest_year('17uu') # 1700
|
|
82
87
|
ParseDate.earliest_year('between 1694 and 1799') # 1694
|
83
88
|
ParseDate.earliest_year('between 1 and 5') # 1
|
84
89
|
ParseDate.earliest_year('between 300 and 150 B.C.') # -300
|
90
|
+
ParseDate.earliest_year('1500? to 1582') # 1500
|
85
91
|
ParseDate.earliest_year('1496-1499') # 1496
|
92
|
+
ParseDate.earliest_year('1230—1239 CE') # 1230 (alternate hyphen char)
|
93
|
+
ParseDate.earliest_year('996–1021 CE') # 996 (diff alternate hyphen char)
|
86
94
|
ParseDate.earliest_year('1750?-1867') # 1750
|
87
95
|
ParseDate.earliest_year('17--?-18--?') # 1700
|
88
96
|
ParseDate.earliest_year('1835 or 1836') # 1835
|
@@ -93,6 +101,8 @@ ParseDate.earliest_year('ca. 9th–8th century B.C.') # -999
|
|
93
101
|
ParseDate.earliest_year('ca. 13th–12th century B.C.') # -1399
|
94
102
|
ParseDate.earliest_year('5th century B.C.') # -599
|
95
103
|
ParseDate.earliest_year('502-504') # 502
|
104
|
+
ParseDate.earliest_year('950-60') # 950
|
105
|
+
ParseDate.earliest_year('-0150 - -0100') # -150
|
96
106
|
ParseDate.earliest_year('-2100 - -2000') # -2100
|
97
107
|
|
98
108
|
ParseDate.latest_year('20000222') # 2000
|
@@ -105,7 +115,10 @@ ParseDate.latest_year('17uu') # 1799
|
|
105
115
|
ParseDate.latest_year('between 1694 and 1799') # 1799
|
106
116
|
ParseDate.latest_year('between 1 and 5') # 5
|
107
117
|
ParseDate.latest_year('between 300 and 150 B.C.') # -150
|
118
|
+
ParseDate.latest_year('1500? to 1582') # 1582
|
108
119
|
ParseDate.latest_year('1496-1499') # 1499
|
120
|
+
ParseDate.latest_year('1230—1239 CE') # 1239 (alternate hyphen char)
|
121
|
+
ParseDate.latest_year('996–1021 CE') # 1021 (diff alternate hyphen char)
|
109
122
|
ParseDate.latest_year('1750?-1867') # 1867
|
110
123
|
ParseDate.latest_year('17--?-18--?') # 1899
|
111
124
|
ParseDate.latest_year('1757-58') # 1758
|
@@ -119,6 +132,8 @@ ParseDate.latest_year('ca. 13th–12th century B.C.') # -1200
|
|
119
132
|
ParseDate.latest_year('5th century B.C.') # -500
|
120
133
|
ParseDate.latest_year('-5 - 3') # 3
|
121
134
|
ParseDate.latest_year('502-504') # 504
|
135
|
+
ParseDate.latest_year('950-60') # 960
|
136
|
+
ParseDate.latest_year('-0150 - -0100') # -100
|
122
137
|
ParseDate.latest_year('-2100 - -2000') # -2000
|
123
138
|
|
124
139
|
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(:hyphen_4digit_earliest_year, date_str)
|
28
29
|
result ||= ParseDate.send(:negative_first_four_digits, date_str)
|
29
30
|
result ||= ParseDate.send(:first_four_digits, date_str)
|
30
31
|
result ||= ParseDate.send(:year_from_mm_dd_yy, date_str)
|
@@ -97,7 +98,13 @@ class ParseDate
|
|
97
98
|
date_str.delete('[]') if date_str.match(BRACKETS_BETWEEN_DIGITS_REGEX)
|
98
99
|
end
|
99
100
|
|
100
|
-
YYYY_HYPHEN_YYYY_REGEX = Regexp.new(/(?<first>\d{4})\??\s*
|
101
|
+
YYYY_HYPHEN_YYYY_REGEX = Regexp.new(/(?<first>\d{3,4})\??\s*(-|—|–|to)\s*(?<last>\d{4})\??/m)
|
102
|
+
|
103
|
+
# Integer value for latest year if we have "yyyy-yyyy" pattern
|
104
|
+
# @return [Integer, nil] yyyy if date_str matches pattern; nil otherwise
|
105
|
+
def hyphen_4digit_earliest_year(date_str)
|
106
|
+
Regexp.last_match(:first).to_i if date_str.match(YYYY_HYPHEN_YYYY_REGEX)
|
107
|
+
end
|
101
108
|
|
102
109
|
# Integer value for latest year if we have "yyyy-yyyy" pattern
|
103
110
|
# @return [Integer, nil] yyyy if date_str matches pattern; nil otherwise
|
@@ -105,7 +112,7 @@ class ParseDate
|
|
105
112
|
Regexp.last_match(:last).to_i if date_str.match(YYYY_HYPHEN_YYYY_REGEX)
|
106
113
|
end
|
107
114
|
|
108
|
-
YYYY_HYPHEN_YY_REGEX = Regexp.new(/(?<first>\d{4})\??\s*
|
115
|
+
YYYY_HYPHEN_YY_REGEX = Regexp.new(/(?<first>\d{3,4})\??\s*(-|—|–|to)\s*(?<last>\d{2})\??([^-0-9].*)?$/)
|
109
116
|
|
110
117
|
# Integer value for latest year if we have "yyyy-yy" pattern
|
111
118
|
# @return [Integer, nil] yyyy if date_str matches pattern; nil otherwise
|
@@ -114,14 +121,14 @@ class ParseDate
|
|
114
121
|
return unless matches
|
115
122
|
|
116
123
|
first = Regexp.last_match(:first)
|
117
|
-
century = first[0
|
124
|
+
century = first[0..-3] # whatever is before the last 2 digits
|
118
125
|
last = "#{century}#{Regexp.last_match(:last)}"
|
119
126
|
last.to_i if ParseDate.year_range_valid?(first.to_i, last.to_i)
|
120
127
|
end
|
121
128
|
|
122
129
|
YYUU = '\\d{1,2}[u\\-]{2}'
|
123
130
|
YYuu_HYPHEN_YYuu_REGEX =
|
124
|
-
Regexp.new("(?<first>#{YYUU})\\??\\s*
|
131
|
+
Regexp.new("(?<first>#{YYUU})\\??\\s*(-|—|–|to)\\s*(?<last>#{YYUU})\\??([^u\\-]|$)??", REGEX_OPTS)
|
125
132
|
|
126
133
|
# Integer value for latest year if we have "yyuu-yyuu" pattern
|
127
134
|
# @return [Integer, nil] yyyy if date_str matches pattern; nil otherwise
|
@@ -139,7 +146,8 @@ class ParseDate
|
|
139
146
|
end
|
140
147
|
|
141
148
|
# NOTE: some actual data seemed to have a diff hyphen char. (slightly longer)
|
142
|
-
YY_YY_CENTURY_REGEX =
|
149
|
+
YY_YY_CENTURY_REGEX =
|
150
|
+
Regexp.new(/(?<first>\d{1,2})[a-z]{2}?\s*(-|–|–|or|to)\s*(?<last>\d{1,2})[a-z]{2}?\s+centur.*/im)
|
143
151
|
|
144
152
|
# Integer value for latest year if we have nth-nth century pattern
|
145
153
|
# @return [Integer, nil] yy99 if date_str matches pattern; nil otherwise
|
@@ -182,7 +190,7 @@ class ParseDate
|
|
182
190
|
# looks for -yyyy after hyphen and returns if found
|
183
191
|
# @return [String, nil] negative 4 digit year (e.g. -1865) if date_str has -yyyy - -yyyy, nil otherwise
|
184
192
|
def negative_4digits_after_hyphen(date_str)
|
185
|
-
Regexp.last_match(1) if date_str.match(/\-\d{4}\s
|
193
|
+
Regexp.last_match(1) if date_str.match(/\-\d{4}\s*(?:-|–|–|or|to)\s*(\-\d{4})/)
|
186
194
|
end
|
187
195
|
|
188
196
|
# looks for 4 consecutive digits in date_str and returns first occurrence if found
|
@@ -304,7 +312,7 @@ class ParseDate
|
|
304
312
|
end
|
305
313
|
|
306
314
|
FIRST_LAST_EARLY_NUMERIC_REGEX =
|
307
|
-
Regexp.new(/^(?<first>\-?\d{1,3})\??\s*(
|
315
|
+
Regexp.new(/^(?<first>\-?\d{1,3})\??\s*(-|–|–|or|to)\s*(?<last>\-?\d{1,4})\??([^\du\-\[]|$)/im)
|
308
316
|
|
309
317
|
# Integer value for latest year if we have early numeric year range or single early numeric year
|
310
318
|
# @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.4
|
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-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: zeitwerk
|