flexyear 2.2.2 → 2.3.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/README.md +8 -0
- data/lib/flexyear.rb +19 -1
- data/lib/flexyear/version.rb +1 -1
- data/spec/flexyear_spec.rb +84 -5
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e9174d74ff69cacee7ce260b97f5d078df55504
|
4
|
+
data.tar.gz: 4b24e5c479bb602a2622f5460ec391cd0ef17390
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d18648d7172c4accb880dc63047fedfc590e7c5d76ca74f42a60279aad65e8e790a238612bccd69d8dadd2f15e7eabc0b04ec5ef100a8a8a88c71231e8e7ea1
|
7
|
+
data.tar.gz: 534ea4c77aaec2aa1ef32661c92472ced07f5817a44773b1da7c7867be5971e61037a777aa5319b8f1797f6e64dd499193a21687a200b6a3f53f1f071980806e
|
data/README.md
CHANGED
@@ -7,15 +7,23 @@ Examples:
|
|
7
7
|
```ruby
|
8
8
|
FlexYear.new("1980s").year_low == 1980
|
9
9
|
FlexYear.new("1980s").year_high == 1989
|
10
|
+
FlexYear.new("1980s").decade == 1980s
|
10
11
|
|
11
12
|
FlexYear.new("mid-80s").year_low == 1983
|
12
13
|
FlexYear.new("mid-80s").year_high == 1986
|
14
|
+
FlexYear.new("mid-80s").decade == 1980s
|
13
15
|
|
14
16
|
FlexYear.new(1983).year_low == 1983
|
15
17
|
FlexYear.new(1983).year_high == 1983
|
18
|
+
FlexYear.new(1983).decade == 1980s
|
19
|
+
|
20
|
+
FlexYear.new(198*).year_low == 1980
|
21
|
+
FlexYear.new(198*).year_high == 1989
|
22
|
+
FlexYear.new(198*).decade == 1980s
|
16
23
|
|
17
24
|
FlexYear.new(["1980s", "1988 - 2000", 2001]).year_low == 1980
|
18
25
|
FlexYear.new(["1980s", "1988 - 2000", 2001]).year_high == 2001
|
26
|
+
FlexYear.new(["1980s", "1988 - 2000", nil, 2001]).decades == [1980s, nil, nil, 2000s]
|
19
27
|
```
|
20
28
|
|
21
29
|
It's pretty flexible in the kinds of things it takes. For more examples, see the spec.
|
data/lib/flexyear.rb
CHANGED
@@ -23,7 +23,7 @@ require 'date'
|
|
23
23
|
class FlexYear
|
24
24
|
class InvalidYearError < ArgumentError; end
|
25
25
|
|
26
|
-
attr_reader :year_low, :year_high
|
26
|
+
attr_reader :year_low, :year_high, :decade, :decades
|
27
27
|
|
28
28
|
def initialize(year_input)
|
29
29
|
@year_input = year_input
|
@@ -44,6 +44,21 @@ class FlexYear
|
|
44
44
|
year_low % 10 == 0 && year_high % 10 == 9
|
45
45
|
end
|
46
46
|
|
47
|
+
def parse_decade(yr_low, yr_high)
|
48
|
+
return if @year_input.is_a?(Array)
|
49
|
+
return unless yr_low && yr_high
|
50
|
+
|
51
|
+
same_decade = yr_low.to_s[0,3] == yr_high.to_s[0, 3]
|
52
|
+
@decade = "#{yr_low.to_s[0,3]}0s" if same_decade
|
53
|
+
end
|
54
|
+
|
55
|
+
def parse_decades(years)
|
56
|
+
return unless @year_input.is_a?(Array)
|
57
|
+
|
58
|
+
parsed_decades = years.flat_map { |y| self.class.new(y).decade }
|
59
|
+
@decades = parsed_decades
|
60
|
+
end
|
61
|
+
|
47
62
|
private
|
48
63
|
|
49
64
|
def parse_year_list(years)
|
@@ -56,10 +71,13 @@ class FlexYear
|
|
56
71
|
|
57
72
|
@year_low = flat_years.min
|
58
73
|
@year_high = flat_years.max
|
74
|
+
|
75
|
+
parse_decades(years)
|
59
76
|
end
|
60
77
|
|
61
78
|
def parse_year_string(year_string)
|
62
79
|
parse_year(year_string.to_s.strip)
|
80
|
+
parse_decade(@year_low, @year_high)
|
63
81
|
end
|
64
82
|
|
65
83
|
def centuryize(year, base_year=nil)
|
data/lib/flexyear/version.rb
CHANGED
data/spec/flexyear_spec.rb
CHANGED
@@ -13,6 +13,8 @@ describe FlexYear do
|
|
13
13
|
its(:year_low) { should be_nil }
|
14
14
|
its(:year_high) { should be_nil }
|
15
15
|
its(:decade?) { should eq(false) }
|
16
|
+
its(:decade) { should be_nil }
|
17
|
+
its(:decades) { should be_nil }
|
16
18
|
end
|
17
19
|
|
18
20
|
context "given nil" do
|
@@ -20,6 +22,8 @@ describe FlexYear do
|
|
20
22
|
its(:year_low) { should be_nil }
|
21
23
|
its(:year_high) { should be_nil }
|
22
24
|
its(:decade?) { should eq(false) }
|
25
|
+
its(:decade) { should be_nil }
|
26
|
+
its(:decades) { should be_nil }
|
23
27
|
end
|
24
28
|
|
25
29
|
context "text" do
|
@@ -27,6 +31,8 @@ describe FlexYear do
|
|
27
31
|
its(:year_low) { should be_nil }
|
28
32
|
its(:year_high) { should be_nil }
|
29
33
|
its(:decade?) { should eq(false) }
|
34
|
+
its(:decade) { should be_nil }
|
35
|
+
its(:decades) { should be_nil }
|
30
36
|
end
|
31
37
|
|
32
38
|
context "given 1979 as number" do
|
@@ -34,6 +40,8 @@ describe FlexYear do
|
|
34
40
|
its(:year_low) { should eq(1979) }
|
35
41
|
its(:year_high) { should eq(1979) }
|
36
42
|
its(:decade?) { should eq(false) }
|
43
|
+
its(:decade) { should eq("1970s") }
|
44
|
+
its(:decades) { should be_nil }
|
37
45
|
end
|
38
46
|
|
39
47
|
context "given 1979" do
|
@@ -41,6 +49,8 @@ describe FlexYear do
|
|
41
49
|
its(:year_low) { should eq(1979) }
|
42
50
|
its(:year_high) { should eq(1979) }
|
43
51
|
its(:decade?) { should eq(false) }
|
52
|
+
its(:decade) { should eq("1970s") }
|
53
|
+
its(:decades) { should be_nil }
|
44
54
|
end
|
45
55
|
|
46
56
|
context "given 1979 (with a space)" do
|
@@ -48,6 +58,8 @@ describe FlexYear do
|
|
48
58
|
its(:year_low) { should eq(1979) }
|
49
59
|
its(:year_high) { should eq(1979) }
|
50
60
|
its(:decade?) { should eq(false) }
|
61
|
+
its(:decade) { should eq("1970s") }
|
62
|
+
its(:decades) { should be_nil }
|
51
63
|
end
|
52
64
|
|
53
65
|
context 'given 197*' do
|
@@ -55,6 +67,8 @@ describe FlexYear do
|
|
55
67
|
its(:year_low) { should eq(1970) }
|
56
68
|
its(:year_high) { should eq(1979) }
|
57
69
|
its(:decade?) { should eq(true) }
|
70
|
+
its(:decade) { should eq("1970s") }
|
71
|
+
its(:decades) { should be_nil }
|
58
72
|
end
|
59
73
|
|
60
74
|
context "given 1970s" do
|
@@ -62,6 +76,8 @@ describe FlexYear do
|
|
62
76
|
its(:year_low) { should eq(1970) }
|
63
77
|
its(:year_high) { should eq(1979) }
|
64
78
|
its(:decade?) { should eq(true) }
|
79
|
+
its(:decade) { should eq("1970s") }
|
80
|
+
its(:decades) { should be_nil }
|
65
81
|
end
|
66
82
|
|
67
83
|
context "given 70s" do
|
@@ -69,6 +85,8 @@ describe FlexYear do
|
|
69
85
|
its(:year_low) { should eq(1970) }
|
70
86
|
its(:year_high) { should eq(1979) }
|
71
87
|
its(:decade?) { should eq(true) }
|
88
|
+
its(:decade) { should eq("1970s") }
|
89
|
+
its(:decades) { should be_nil }
|
72
90
|
end
|
73
91
|
|
74
92
|
context "given something with negative and dots" do
|
@@ -76,6 +94,8 @@ describe FlexYear do
|
|
76
94
|
its(:year_low) { should eq(2005) }
|
77
95
|
its(:year_high) { should eq(2007) }
|
78
96
|
its(:decade?) { should eq(false) }
|
97
|
+
its(:decade) { should eq("2000s") }
|
98
|
+
its(:decades) { should be_nil }
|
79
99
|
end
|
80
100
|
|
81
101
|
context 'given before 1973' do
|
@@ -83,6 +103,8 @@ describe FlexYear do
|
|
83
103
|
its(:year_low) { should be_nil }
|
84
104
|
its(:year_high) { should eq(1973) }
|
85
105
|
its(:decade?) { should eq(false) }
|
106
|
+
its(:decade) { should be_nil }
|
107
|
+
its(:decades) { should be_nil }
|
86
108
|
end
|
87
109
|
|
88
110
|
context 'given after 1973' do
|
@@ -90,6 +112,8 @@ describe FlexYear do
|
|
90
112
|
its(:year_low) { should eq(1973) }
|
91
113
|
its(:year_high) { should be_nil }
|
92
114
|
its(:decade?) { should eq(false) }
|
115
|
+
its(:decade) { should be_nil }
|
116
|
+
its(:decades) { should be_nil }
|
93
117
|
end
|
94
118
|
|
95
119
|
["mid 1970s", "mid 70s", "mid-70s", "mid-70's"].each do |year|
|
@@ -97,6 +121,8 @@ describe FlexYear do
|
|
97
121
|
subject { flexyear_class.new(year) }
|
98
122
|
its(:year_low) { should eq(1973) }
|
99
123
|
its(:year_high) { should eq(1976) }
|
124
|
+
its(:decade) { should eq("1970s") }
|
125
|
+
its(:decades) { should be_nil }
|
100
126
|
its(:to_s) { should eq(year) }
|
101
127
|
its(:decade?) { should eq(false) }
|
102
128
|
end
|
@@ -108,6 +134,8 @@ describe FlexYear do
|
|
108
134
|
its(:year_low) { should eq(1970) }
|
109
135
|
its(:year_high) { should eq(1973) }
|
110
136
|
its(:decade?) { should eq(false) }
|
137
|
+
its(:decade) { should eq("1970s") }
|
138
|
+
its(:decades) { should be_nil }
|
111
139
|
end
|
112
140
|
end
|
113
141
|
|
@@ -117,6 +145,8 @@ describe FlexYear do
|
|
117
145
|
its(:year_low) { should eq(1976) }
|
118
146
|
its(:year_high) { should eq(1979) }
|
119
147
|
its(:decade?) { should eq(false) }
|
148
|
+
its(:decade) { should eq("1970s") }
|
149
|
+
its(:decades) { should be_nil }
|
120
150
|
end
|
121
151
|
end
|
122
152
|
|
@@ -126,6 +156,8 @@ describe FlexYear do
|
|
126
156
|
its(:year_low) { should eq(1973) }
|
127
157
|
its(:year_high) { should eq(1975) }
|
128
158
|
its(:decade?) { should eq(false) }
|
159
|
+
its(:decade) { should eq("1970s") }
|
160
|
+
its(:decades) { should be_nil }
|
129
161
|
end
|
130
162
|
end
|
131
163
|
|
@@ -133,7 +165,18 @@ describe FlexYear do
|
|
133
165
|
subject { flexyear_class.new('1975-1973') }
|
134
166
|
its(:year_low) { should eq(1973) }
|
135
167
|
its(:year_high) { should eq(1975) }
|
136
|
-
|
168
|
+
its(:decade?) { should eq(false) }
|
169
|
+
its(:decade) { should eq("1970s") }
|
170
|
+
its(:decades) { should be_nil }
|
171
|
+
end
|
172
|
+
|
173
|
+
context "given a range in difference decades" do
|
174
|
+
subject { flexyear_class.new('1975-1983') }
|
175
|
+
its(:year_low) { should eq(1975) }
|
176
|
+
its(:year_high) { should eq(1983) }
|
177
|
+
its(:decade?) { should eq(false) }
|
178
|
+
its(:decade) { should be_nil}
|
179
|
+
its(:decades) { should be_nil }
|
137
180
|
end
|
138
181
|
|
139
182
|
context "given a range" do
|
@@ -142,6 +185,8 @@ describe FlexYear do
|
|
142
185
|
its(:year_low) { should eq(2003) }
|
143
186
|
its(:year_high) { should eq(2004) }
|
144
187
|
its(:decade?) { should eq(false) }
|
188
|
+
its(:decade) { should eq("2000s") }
|
189
|
+
its(:decades) { should be_nil }
|
145
190
|
end
|
146
191
|
end
|
147
192
|
|
@@ -151,6 +196,8 @@ describe FlexYear do
|
|
151
196
|
its(:year_low) { should eq(1972) }
|
152
197
|
its(:year_high) { should eq(1974) }
|
153
198
|
its(:decade?) { should eq(false) }
|
199
|
+
its(:decade) { should eq("1970s") }
|
200
|
+
its(:decades) { should be_nil }
|
154
201
|
end
|
155
202
|
|
156
203
|
context 'at the beginning of the string' do
|
@@ -158,6 +205,8 @@ describe FlexYear do
|
|
158
205
|
its(:year_low) { should eq(1972) }
|
159
206
|
its(:year_high) { should eq(1974) }
|
160
207
|
its(:decade?) { should eq(false) }
|
208
|
+
its(:decade) { should eq("1970s") }
|
209
|
+
its(:decades) { should be_nil }
|
161
210
|
end
|
162
211
|
|
163
212
|
context 'abbreviated' do
|
@@ -165,6 +214,8 @@ describe FlexYear do
|
|
165
214
|
its(:year_low) { should eq(1972) }
|
166
215
|
its(:year_high) { should eq(1974) }
|
167
216
|
its(:decade?) { should eq(false) }
|
217
|
+
its(:decade) { should eq("1970s") }
|
218
|
+
its(:decades) { should be_nil }
|
168
219
|
end
|
169
220
|
|
170
221
|
context 'with dots' do
|
@@ -172,6 +223,8 @@ describe FlexYear do
|
|
172
223
|
its(:year_low) { should eq(1972) }
|
173
224
|
its(:year_high) { should eq(1974) }
|
174
225
|
its(:decade?) { should eq(false) }
|
226
|
+
its(:decade) { should eq("1970s") }
|
227
|
+
its(:decades) { should be_nil }
|
175
228
|
end
|
176
229
|
|
177
230
|
context 'with c.' do
|
@@ -179,6 +232,8 @@ describe FlexYear do
|
|
179
232
|
its(:year_low) { should eq(1972) }
|
180
233
|
its(:year_high) { should eq(1974) }
|
181
234
|
its(:decade?) { should eq(false) }
|
235
|
+
its(:decade) { should eq("1970s") }
|
236
|
+
its(:decades) { should be_nil }
|
182
237
|
end
|
183
238
|
|
184
239
|
context 'with ca.' do
|
@@ -186,6 +241,8 @@ describe FlexYear do
|
|
186
241
|
its(:year_low) { should eq(1972) }
|
187
242
|
its(:year_high) { should eq(1974) }
|
188
243
|
its(:decade?) { should eq(false) }
|
244
|
+
its(:decade) { should eq("1970s") }
|
245
|
+
its(:decades) { should be_nil }
|
189
246
|
end
|
190
247
|
|
191
248
|
context 'with approx.' do
|
@@ -193,6 +250,8 @@ describe FlexYear do
|
|
193
250
|
its(:year_low) { should eq(1972) }
|
194
251
|
its(:year_high) { should eq(1974) }
|
195
252
|
its(:decade?) { should eq(false) }
|
253
|
+
its(:decade) { should eq("1970s") }
|
254
|
+
its(:decades) { should be_nil }
|
196
255
|
end
|
197
256
|
|
198
257
|
context 'with appxly.' do
|
@@ -200,6 +259,8 @@ describe FlexYear do
|
|
200
259
|
its(:year_low) { should eq(1972) }
|
201
260
|
its(:year_high) { should eq(1974) }
|
202
261
|
its(:decade?) { should eq(false) }
|
262
|
+
its(:decade) { should eq("1970s") }
|
263
|
+
its(:decades) { should be_nil }
|
203
264
|
end
|
204
265
|
|
205
266
|
context 'with around' do
|
@@ -207,6 +268,8 @@ describe FlexYear do
|
|
207
268
|
its(:year_low) { should eq(1972) }
|
208
269
|
its(:year_high) { should eq(1974) }
|
209
270
|
its(:decade?) { should eq(false) }
|
271
|
+
its(:decade) { should eq("1970s") }
|
272
|
+
its(:decades) { should be_nil }
|
210
273
|
end
|
211
274
|
|
212
275
|
context 'with about' do
|
@@ -214,6 +277,8 @@ describe FlexYear do
|
|
214
277
|
its(:year_low) { should eq(1972) }
|
215
278
|
its(:year_high) { should eq(1974) }
|
216
279
|
its(:decade?) { should eq(false) }
|
280
|
+
its(:decade) { should eq("1970s") }
|
281
|
+
its(:decades) { should be_nil }
|
217
282
|
end
|
218
283
|
|
219
284
|
context 'with circ' do
|
@@ -221,6 +286,8 @@ describe FlexYear do
|
|
221
286
|
its(:year_low) { should eq(1972) }
|
222
287
|
its(:year_high) { should eq(1974) }
|
223
288
|
its(:decade?) { should eq(false) }
|
289
|
+
its(:decade) { should eq("1970s") }
|
290
|
+
its(:decades) { should be_nil }
|
224
291
|
end
|
225
292
|
|
226
293
|
context 'with cca' do
|
@@ -228,6 +295,8 @@ describe FlexYear do
|
|
228
295
|
its(:year_low) { should eq(1972) }
|
229
296
|
its(:year_high) { should eq(1974) }
|
230
297
|
its(:decade?) { should eq(false) }
|
298
|
+
its(:decade) { should eq("1970s") }
|
299
|
+
its(:decades) { should be_nil }
|
231
300
|
end
|
232
301
|
|
233
302
|
context 'given 2 character fields' do
|
@@ -236,6 +305,8 @@ describe FlexYear do
|
|
236
305
|
its(:year_low) { should eq(1973) }
|
237
306
|
its(:year_high) { should eq(1973) }
|
238
307
|
its(:decade?) { should eq(false) }
|
308
|
+
its(:decade) { should eq("1970s") }
|
309
|
+
its(:decades) { should be_nil }
|
239
310
|
end
|
240
311
|
|
241
312
|
context "from current century" do
|
@@ -243,30 +314,38 @@ describe FlexYear do
|
|
243
314
|
its(:year_low) { should eq(2006) }
|
244
315
|
its(:year_high) { should eq(2006) }
|
245
316
|
its(:decade?) { should eq(false) }
|
317
|
+
its(:decade) { should eq("2000s") }
|
318
|
+
its(:decades) { should be_nil }
|
246
319
|
end
|
247
320
|
end
|
248
321
|
end
|
249
322
|
|
250
323
|
context "given a list" do
|
251
324
|
context "mixed years" do
|
252
|
-
subject { flexyear_class.new(["1980s", "mid-80s", "1988 - 1999", 2001,]) }
|
325
|
+
subject { flexyear_class.new(["1980s", "mid-80s", "1988 - 1999", 2001, "199*"]) }
|
253
326
|
its(:year_low) { should eq(1980) }
|
254
327
|
its(:year_high) { should eq(2001) }
|
255
|
-
|
328
|
+
its(:decade?) { should eq(false) }
|
329
|
+
its(:decade) { should be_nil }
|
330
|
+
its(:decades) { should eq(["1980s", "1980s", nil, "2000s", "1990s"])}
|
256
331
|
end
|
257
332
|
|
258
333
|
context "same years" do
|
259
334
|
subject { flexyear_class.new(["1988", "1988"]) }
|
260
335
|
its(:year_low) { should eq(1988) }
|
261
336
|
its(:year_high) { should eq(1988) }
|
262
|
-
|
337
|
+
its(:decade?) { should eq(false) }
|
338
|
+
its(:decade) { should be_nil }
|
339
|
+
its(:decades) { should eq(["1980s", "1980s"])}
|
263
340
|
end
|
264
341
|
|
265
342
|
context "mixed years with nil" do
|
266
343
|
subject { flexyear_class.new(["1988", "1990s", nil]) }
|
267
344
|
its(:year_low) { should eq(1988) }
|
268
345
|
its(:year_high) { should eq(1999) }
|
269
|
-
|
346
|
+
its(:decade?) { should eq(false) }
|
347
|
+
its(:decade) { should be_nil }
|
348
|
+
its(:decades) { should eq(["1980s", "1990s", nil])}
|
270
349
|
end
|
271
350
|
end
|
272
351
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flexyear
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Melnick & Yan Pritzker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-08-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -116,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
116
|
version: '0'
|
117
117
|
requirements: []
|
118
118
|
rubyforge_project:
|
119
|
-
rubygems_version: 2.
|
119
|
+
rubygems_version: 2.5.2.3
|
120
120
|
signing_key:
|
121
121
|
specification_version: 4
|
122
122
|
summary: Natural language year range parser
|