quando 0.0.6 → 0.0.8
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/.gitignore +3 -2
- data/Gemfile.lock +5 -5
- data/README.md +7 -5
- data/lib/quando.rb +2 -2
- data/lib/quando/config.rb +40 -28
- data/lib/quando/parser.rb +32 -27
- data/lib/quando/version.rb +1 -1
- data/quando.gemspec +3 -3
- metadata +8 -9
- data/quando.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc9ef7c527d685d3da9942e1d53aff6017c012a7a25fc3e1fd47f667c2f94167
|
4
|
+
data.tar.gz: a1794e5af7f816d5b8edeb36bd8a762073f48afbcbc353a304d68bfd9c2a48e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55afbcc5d55fd62967ed3dfbbcbccf4e23933cf44f98ae9249ff47f631c7c4a62c1dea93f6961da81d62035547d516849bd1527ca98bf060eff1a659b2a61e7a
|
7
|
+
data.tar.gz: d6e38f8106e168aeb5ce8b6c9e8f14108c00eff87fdba43dcf0edc75c2c1d330f248e777b461ff7378fdaa5b894a2181883013337764662b422b91ed15c2962b
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
quando (0.0.
|
4
|
+
quando (0.0.8)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -12,7 +12,7 @@ GEM
|
|
12
12
|
pry (0.11.3)
|
13
13
|
coderay (~> 1.1.0)
|
14
14
|
method_source (~> 0.9.0)
|
15
|
-
rake (
|
15
|
+
rake (11.3.0)
|
16
16
|
rspec (3.6.0)
|
17
17
|
rspec-core (~> 3.6.0)
|
18
18
|
rspec-expectations (~> 3.6.0)
|
@@ -31,11 +31,11 @@ PLATFORMS
|
|
31
31
|
ruby
|
32
32
|
|
33
33
|
DEPENDENCIES
|
34
|
-
bundler (
|
34
|
+
bundler (>= 1.15)
|
35
35
|
pry
|
36
36
|
quando!
|
37
|
-
rake (~>
|
38
|
-
rspec (
|
37
|
+
rake (~> 11)
|
38
|
+
rspec (>= 3.0)
|
39
39
|
|
40
40
|
BUNDLED WITH
|
41
41
|
1.17.2
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
# Quando
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/quando)
|
4
4
|
[](https://semaphoreci.com/kinkou/quando)
|
@@ -131,7 +131,7 @@ Quando.configure do |c|
|
|
131
131
|
c.formats = [
|
132
132
|
/^ #{c.day} #{c.dlm} #{c.month_txt} #{c.dlm} #{c.year} $/xi,
|
133
133
|
# compiles into something like
|
134
|
-
# /^ (?<day
|
134
|
+
# /^ (?<day> …) [ -.\/]+ (?<month> jan|feb|…) [ -.\/]+ (?<year> …) $/xi
|
135
135
|
# and returns ~ #<MatchData "14 Apr 1965" day:"14" month:"Apr" year:"1965">
|
136
136
|
# on successful match
|
137
137
|
]
|
@@ -152,7 +152,7 @@ Quando.config.formats = [
|
|
152
152
|
Quando.parse('04.2019') #=> #<Date: 2019-04-01>
|
153
153
|
```
|
154
154
|
|
155
|
-
If there is a named capture ```:year```, it is used in the result. If the format matcher did not define such named group, current year is used. If the captured value is less than ```100``` (which is the case for years written as 2-digit numbers), Quando will
|
155
|
+
If there is a named capture ```:year```, it is used in the result. If the format matcher did not define such named group, current UTC year is used. If the captured value is less than ```100``` (which is the case for years written as 2-digit numbers), Quando will use the ```Quando.config.century``` setting (defaults to ```21```), effectively converting, for example, ```18``` to ```2018```. Be mindful of this behaviour, adjusting ```Quando.config.century``` accordingly:
|
156
156
|
|
157
157
|
```ruby
|
158
158
|
Quando.config.formats = [Quando.config.year]
|
@@ -161,9 +161,9 @@ Quando.parse('2019') #=> #<Date: 2019-01-01>
|
|
161
161
|
Quando.config.formats = [Quando.config.year2]
|
162
162
|
Quando.parse('65') #=> #<Date: 2065-01-01>
|
163
163
|
|
164
|
-
Quando.parse('65', century:
|
164
|
+
Quando.parse('65', century: 20) #=> #<Date: 1965-01-01>
|
165
165
|
# or
|
166
|
-
Quando.config.century =
|
166
|
+
Quando.config.century = 20
|
167
167
|
Quando.parse('65') #=> #<Date: 1965-01-01>
|
168
168
|
```
|
169
169
|
|
@@ -203,6 +203,8 @@ m = /(?<year>#{Quando.config.year}) (?<day>\d\d) (?<month>[A-Z]+)/i
|
|
203
203
|
Quando.parse('1965 14 Apr', matcher: m) #=> #<Date: 1965-04-14>
|
204
204
|
```
|
205
205
|
|
206
|
+
In both cases it will not change the global configuration (but note that calling setter methods on ```Quando.config``` will).
|
207
|
+
|
206
208
|
### Requirements
|
207
209
|
|
208
210
|
Ruby >= 1.9.3. Enjoy!
|
data/lib/quando.rb
CHANGED
@@ -9,8 +9,8 @@ module Quando
|
|
9
9
|
|
10
10
|
# @param date [String]
|
11
11
|
# @param opts [Hash]
|
12
|
-
# @option opts [Regexp, Array<Regexp>] :matcher
|
13
|
-
# @option opts [Integer] :century
|
12
|
+
# @option opts [Regexp, Array<Regexp>] :matcher
|
13
|
+
# @option opts [Integer] :century
|
14
14
|
# @return [Date, nil]
|
15
15
|
def self.parse(date, opts = {})
|
16
16
|
return if (date = date.to_s.strip).empty?
|
data/lib/quando/config.rb
CHANGED
@@ -7,65 +7,77 @@ module Quando
|
|
7
7
|
MONTHS = [:jan, :feb, :mar, :apr, :may, :jun, :jul, :aug, :sep, :oct, :nov, :dec]
|
8
8
|
AUTOUPDATE = [:dlm, :year, :year2, :day, *MONTHS, :month_num]
|
9
9
|
COMPOUND = [:month_txt, :formats]
|
10
|
-
OPTIONS = [*AUTOUPDATE, *COMPOUND
|
10
|
+
OPTIONS = [*AUTOUPDATE, *COMPOUND]
|
11
|
+
CENTURY = 21
|
11
12
|
|
12
13
|
private_constant :AUTOUPDATE, :COMPOUND, :OPTIONS
|
13
14
|
|
14
15
|
attr_accessor *OPTIONS
|
15
16
|
|
16
17
|
def initialize
|
17
|
-
@
|
18
|
-
|
19
|
-
@
|
20
|
-
@
|
21
|
-
@
|
22
|
-
|
23
|
-
@
|
24
|
-
|
25
|
-
@
|
26
|
-
@
|
27
|
-
@
|
28
|
-
@
|
29
|
-
@
|
30
|
-
@
|
31
|
-
@
|
32
|
-
@
|
33
|
-
@
|
34
|
-
@
|
35
|
-
|
36
|
-
|
18
|
+
@dlm = /[- .\/]+/
|
19
|
+
@year = /(?<year>\d{4})/
|
20
|
+
@year2 = /(?<year>\d{2})/
|
21
|
+
@month_num = /(?<month> 1[012] | 0?[1-9])/x
|
22
|
+
@day = /(?<day> 3[01] | [12]\d | 0?[1-9])/x
|
23
|
+
|
24
|
+
@jan = /JAN(?:UARY)?/i
|
25
|
+
@feb = /FEB(?:RUARY)?/i
|
26
|
+
@mar = /MAR(?:CH)?/i
|
27
|
+
@apr = /APR(?:IL)?/i
|
28
|
+
@may = /MAY/i
|
29
|
+
@jun = /JUNE?/i
|
30
|
+
@jul = /JULY?/i
|
31
|
+
@aug = /AUG(?:UST)?/i
|
32
|
+
@sep = /SEP(?:TEMBER)?/i
|
33
|
+
@oct = /OCT(?:OBER)?/i
|
34
|
+
@nov = /NOV(?:EMBER)?/i
|
35
|
+
@dec = /DEC(?:EMBER)?/i
|
36
|
+
|
37
|
+
self.century=(CENTURY)
|
37
38
|
|
38
39
|
uniupdate!
|
39
40
|
end
|
40
41
|
|
41
|
-
# Sets @month_txt
|
42
|
+
# Sets @month_txt, a compound of all month regexps that matches any month name
|
42
43
|
def unimonth!
|
43
44
|
all_months_txt_rxs = MONTHS.map { |m| instance_variable_get("@#{m}".to_sym) }.join('|')
|
44
45
|
@month_txt = Regexp.new("(?<month>#{all_months_txt_rxs})", true)
|
45
46
|
end
|
46
47
|
|
47
|
-
# Sets @formats which is an array of regexps used in succession to match and identify parts
|
48
|
+
# Sets @formats which is an array of regexps used in succession to match and identify date parts
|
48
49
|
def uniformats!
|
49
50
|
@formats = [
|
50
51
|
# Formats with a 4-digits year
|
51
52
|
# 14.4.1965, 14/04/1965, 14-4-1965, 14 04 1965, …
|
52
|
-
|
53
|
+
/^\s* #{@day} #{@dlm} #{@month_num} #{@dlm} #{@year} \s*$/xi,
|
53
54
|
|
54
55
|
# 14-APRIL-1965, 14-apr-1965, 14/Apr/1965, …
|
55
|
-
|
56
|
+
/^\s* #{@day} #{@dlm} #{@month_txt} #{@dlm} #{@year} \s*$/xi,
|
56
57
|
|
57
58
|
# April 1965, apr.1965, …
|
58
|
-
|
59
|
+
/^\s* #{@month_txt} #{@dlm} #{@year} \s*$/xi,
|
59
60
|
|
60
61
|
# Same formats with a 2-digits year
|
61
62
|
# 13.12.05, 13/12/05, 13-12-05, …
|
62
|
-
|
63
|
+
/^\s* #{@day} #{@dlm} #{@month_num} #{@dlm} #{@year2} \s*$/xi,
|
63
64
|
|
64
65
|
# April, DECEMBER, sep., …
|
65
|
-
|
66
|
+
/^\s* #{@month_txt} \s*$/xi,
|
66
67
|
]
|
67
68
|
end
|
68
69
|
|
70
|
+
# @return [Integer]
|
71
|
+
def century
|
72
|
+
@century
|
73
|
+
end
|
74
|
+
|
75
|
+
# @param value [Integer]
|
76
|
+
# @return [Integer]
|
77
|
+
def century=(value)
|
78
|
+
@century = (value == 0 ? 1 : value) || CENTURY
|
79
|
+
end
|
80
|
+
|
69
81
|
# A single method to update all compound matchers when a part matcher was changed
|
70
82
|
def uniupdate!
|
71
83
|
unimonth!
|
data/lib/quando/parser.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Quando
|
4
|
-
|
5
4
|
class Parser
|
6
5
|
|
7
6
|
def initialize
|
@@ -10,7 +9,7 @@ module Quando
|
|
10
9
|
|
11
10
|
# @return [Quando::Parser]
|
12
11
|
def configure
|
13
|
-
yield(@config
|
12
|
+
yield(@config ||= Quando.config.dup)
|
14
13
|
self
|
15
14
|
end
|
16
15
|
|
@@ -22,11 +21,11 @@ module Quando
|
|
22
21
|
# @param text_date [String]
|
23
22
|
# @return [Date, nil]
|
24
23
|
def parse(text_date)
|
25
|
-
config.formats.each do |
|
26
|
-
@date_parts = text_date.match(
|
24
|
+
config.formats.each do |regexp|
|
25
|
+
@date_parts = text_date.match(regexp)
|
27
26
|
next unless @date_parts
|
28
27
|
|
29
|
-
@current_format =
|
28
|
+
@current_format = regexp
|
30
29
|
year, month, day = detect_year, detect_month, detect_day
|
31
30
|
next unless (year && month && day)
|
32
31
|
|
@@ -40,46 +39,39 @@ module Quando
|
|
40
39
|
|
41
40
|
# @return [Integer, nil]
|
42
41
|
def detect_year
|
43
|
-
unless
|
44
|
-
return Time.current.year if Time.respond_to?(:current)
|
45
|
-
return Time.now.getlocal.year
|
46
|
-
end
|
47
|
-
|
42
|
+
return Time.now.utc.year unless wanted?(:year)
|
48
43
|
return unless found?(:year)
|
49
44
|
|
50
45
|
year = @date_parts[:year].to_i
|
51
|
-
year < 100 ? year +
|
46
|
+
year.abs < 100 ? year + century_to_hundreds : year
|
52
47
|
end
|
53
48
|
|
54
49
|
# @return [Integer, nil]
|
55
50
|
def detect_month
|
56
|
-
return 1 unless
|
51
|
+
return 1 unless wanted?(:month)
|
57
52
|
return unless found?(:month)
|
58
53
|
|
59
54
|
month = @date_parts[:month]
|
60
55
|
|
61
|
-
|
62
|
-
month
|
63
|
-
|
64
|
-
month_index = Quando::Config::MONTHS.find_index do |month_name|
|
65
|
-
month_name_rx = config.send(month_name)
|
66
|
-
month_name_rx.match(month)
|
67
|
-
end
|
56
|
+
month_index = Quando::Config::MONTHS.find_index do |month_name|
|
57
|
+
config.send(month_name) =~ month
|
58
|
+
end
|
68
59
|
|
69
|
-
|
60
|
+
if month_index
|
61
|
+
month_index += 1
|
62
|
+
return month_index if valid_month?(month_index)
|
70
63
|
end
|
71
64
|
|
72
|
-
|
65
|
+
month.to_i if valid_month?(month)
|
73
66
|
end
|
74
67
|
|
75
68
|
# @return [Integer, nil]
|
76
69
|
def detect_day
|
77
|
-
return 1 unless
|
70
|
+
return 1 unless wanted?(:day)
|
78
71
|
return unless found?(:day)
|
79
72
|
|
80
73
|
day = @date_parts[:day].to_i
|
81
|
-
|
82
|
-
day if (1..31).include?(day)
|
74
|
+
day if valid_day?(day)
|
83
75
|
end
|
84
76
|
|
85
77
|
# @param date_part [Symbol]
|
@@ -88,10 +80,23 @@ module Quando
|
|
88
80
|
end
|
89
81
|
|
90
82
|
# @param date_part [Symbol]
|
91
|
-
def
|
92
|
-
|
83
|
+
def wanted?(date_part)
|
84
|
+
@current_format.names.include?(date_part.to_s)
|
93
85
|
end
|
94
86
|
|
95
|
-
|
87
|
+
# @param value [Integer]
|
88
|
+
def valid_month?(value)
|
89
|
+
(1..12).include?(value.to_i)
|
90
|
+
end
|
91
|
+
|
92
|
+
# @param value [Integer]
|
93
|
+
def valid_day?(value)
|
94
|
+
(1..31).include?(value.to_i)
|
95
|
+
end
|
96
96
|
|
97
|
+
def century_to_hundreds
|
98
|
+
(config.century > 0 ? config.century - 1 : config.century + 1) * 100
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
97
102
|
end
|
data/lib/quando/version.rb
CHANGED
data/quando.gemspec
CHANGED
@@ -20,8 +20,8 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.required_ruby_version = '>= 1.9.3'
|
22
22
|
|
23
|
-
spec.add_development_dependency 'bundler', '
|
24
|
-
spec.add_development_dependency 'rake', '~>
|
25
|
-
spec.add_development_dependency 'rspec', '
|
23
|
+
spec.add_development_dependency 'bundler', '>= 1.15'
|
24
|
+
spec.add_development_dependency 'rake', '~> 11'
|
25
|
+
spec.add_development_dependency 'rspec', '>= 3.0'
|
26
26
|
spec.add_development_dependency 'pry'
|
27
27
|
end
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quando
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Konotopov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.15'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.15'
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -30,26 +30,26 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '11'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '11'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '3.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
@@ -88,7 +88,6 @@ files:
|
|
88
88
|
- lib/quando/parser.rb
|
89
89
|
- lib/quando/version.rb
|
90
90
|
- quando.gemspec
|
91
|
-
- quando.png
|
92
91
|
homepage: https://github.com/kinkou/quando
|
93
92
|
licenses:
|
94
93
|
- MIT
|
data/quando.png
DELETED
Binary file
|