timeliness 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.rdoc +4 -0
- data/README.rdoc +11 -11
- data/Rakefile +1 -1
- data/benchmark.rb +2 -18
- data/lib/timeliness/core_ext/string.rb +1 -1
- data/lib/timeliness/definitions.rb +11 -11
- data/lib/timeliness/format.rb +21 -14
- data/lib/timeliness/version.rb +1 -1
- data/spec/timeliness/definitions_spec.rb +2 -2
- data/spec/timeliness/format_set_spec.rb +26 -26
- data/spec/timeliness/format_spec.rb +8 -2
- data/spec/timeliness/parser_spec.rb +30 -30
- 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: 0b1224a95afa47942b2118db304f6b00f741748e129243fe277ccb45127b9804
|
4
|
+
data.tar.gz: 320e9633f0769274f57bcca370e1a839abf62039df963af1d4cb35757b9f03fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 593b8a2649f97b485a94f205c2e500ca38c31d4db734d46962c4224f12df47fe6679a111d1a950e1794f46065a9e922eafbada8a8dc617ac68a250a1249fba1c
|
7
|
+
data.tar.gz: 3b8705a405281a0d4bb2c56f436a6e016bae0f83ed8f61700fc6553d37ed53614b85b56d818063bc4aaa5dc96360426e762da038ed30374473448c621a18e07b
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
= 0.4.4 - 2019-08-06
|
2
|
+
* Raise compilation error if token with capturing arg is used more than once in a format
|
3
|
+
* Some small internal refactorings in format compilation
|
4
|
+
|
1
5
|
= 0.4.3 - 2019-06-16
|
2
6
|
* Fixed `Timeliness.ambiguous_date_format` being used in new threads if custom value set
|
3
7
|
* Moved all config from Timeliness to new Configuration class. Delegated all
|
data/README.rdoc
CHANGED
@@ -41,9 +41,9 @@ the value for that type.
|
|
41
41
|
|
42
42
|
Now let's get strict. Pass the :strict option with true and things get finicky
|
43
43
|
|
44
|
-
Timeliness.parse('2010-09-08 12:13:14', :date, :
|
45
|
-
Timeliness.parse('2010-09-08 12:13:14', :time, :
|
46
|
-
Timeliness.parse('2010-09-08 12:13:14', :datetime, :
|
44
|
+
Timeliness.parse('2010-09-08 12:13:14', :date, strict: true) #=> nil
|
45
|
+
Timeliness.parse('2010-09-08 12:13:14', :time, strict: true) #=> nil
|
46
|
+
Timeliness.parse('2010-09-08 12:13:14', :datetime, strict: true) #=> Wed Sep 08 12:13:14 1000 2010 i.e. the whole string is used
|
47
47
|
|
48
48
|
The date and time strings are not accepted for a datetime type. The strict option without a type is
|
49
49
|
ignored.
|
@@ -62,7 +62,7 @@ or using a lambda thats evaluated when parsed
|
|
62
62
|
|
63
63
|
It can also be specified with :now option:
|
64
64
|
|
65
|
-
Timeliness.parse('12:13:14', :
|
65
|
+
Timeliness.parse('12:13:14', now: Time.mktime(2010,9,8)) #=> Wed Sep 08 12:13:14 1000 2010
|
66
66
|
|
67
67
|
As well conforming to the Ruby Time class style.
|
68
68
|
|
@@ -82,10 +82,10 @@ The last two options require that you have ActiveSupport timezone extension load
|
|
82
82
|
|
83
83
|
You can also use the :zone option to control it for a single parse call:
|
84
84
|
|
85
|
-
Timeliness.parse('2010-09-08 12:13:14', :
|
86
|
-
Timeliness.parse('2010-09-08 12:13:14', :
|
87
|
-
Timeliness.parse('2010-09-08 12:13:14', :
|
88
|
-
Timeliness.parse('2010-09-08 12:13:14', :
|
85
|
+
Timeliness.parse('2010-09-08 12:13:14', zone: :utc) #=> Wed Sep 08 12:13:14 UTC 2010
|
86
|
+
Timeliness.parse('2010-09-08 12:13:14', zone: :local) #=> Wed Sep 08 12:13:14 1000 2010
|
87
|
+
Timeliness.parse('2010-09-08 12:13:14', zone: :current) #=> Wed Sep 08 12:13:14 1000 2010, with Time.zone = 'Melbourne'
|
88
|
+
Timeliness.parse('2010-09-08 12:13:14', zone: 'Melbourne') #=> Wed Sep 08 12:13:14 1000 2010
|
89
89
|
|
90
90
|
Remember, you must have ActiveSupport timezone extension loaded to use the last two examples.
|
91
91
|
|
@@ -94,8 +94,8 @@ Remember, you must have ActiveSupport timezone extension loaded to use the last
|
|
94
94
|
|
95
95
|
To get super finicky, you can restrict the parsing to a single format with the :format option
|
96
96
|
|
97
|
-
Timeliness.parse('2010-09-08 12:13:14', :
|
98
|
-
Timeliness.parse('08/09/2010 12:13:14', :
|
97
|
+
Timeliness.parse('2010-09-08 12:13:14', format: 'yyyy-mm-dd hh:nn:ss') #=> Wed Sep 08 12:13:14 UTC 2010
|
98
|
+
Timeliness.parse('08/09/2010 12:13:14', format: 'yyyy-mm-dd hh:nn:ss') #=> nil
|
99
99
|
|
100
100
|
|
101
101
|
=== String with Offset or Zone Abbreviations
|
@@ -280,7 +280,7 @@ Because formats are evaluated in order, adding a format which may be ambiguous w
|
|
280
280
|
format, will mean your format is ignored. If you need to make your new format higher precedence than
|
281
281
|
an existing format, you can include the before option like so
|
282
282
|
|
283
|
-
Timeliness.add_formats(:time, 'ss:nn:hh', :
|
283
|
+
Timeliness.add_formats(:time, 'ss:nn:hh', before: 'hh:nn:ss')
|
284
284
|
|
285
285
|
Now a time of '59:30:23' will be interpreted as 11:30:59 pm. This option saves you adding a new one
|
286
286
|
and deleting an old one to get it to work.
|
data/Rakefile
CHANGED
data/benchmark.rb
CHANGED
@@ -13,7 +13,7 @@ if defined?(JRUBY_VERSION)
|
|
13
13
|
end
|
14
14
|
|
15
15
|
n = 10_000
|
16
|
-
Benchmark.bm do |x|
|
16
|
+
Benchmark.bm(40) do |x|
|
17
17
|
x.report('timeliness - datetime') {
|
18
18
|
n.times do
|
19
19
|
Timeliness::Parser.parse("2000-01-04 12:12:12", :datetime)
|
@@ -22,7 +22,7 @@ Benchmark.bm do |x|
|
|
22
22
|
|
23
23
|
x.report('timeliness - datetime with :format') {
|
24
24
|
n.times do
|
25
|
-
Timeliness::Parser.parse("2000-01-04 12:12:12", :datetime, :
|
25
|
+
Timeliness::Parser.parse("2000-01-04 12:12:12", :datetime, format: 'yyyy-mm-dd hh:nn:ss')
|
26
26
|
end
|
27
27
|
}
|
28
28
|
|
@@ -131,22 +131,6 @@ Benchmark.bm do |x|
|
|
131
131
|
end
|
132
132
|
}
|
133
133
|
|
134
|
-
if defined?(ParseDate)
|
135
|
-
x.report('parsedate - valid') {
|
136
|
-
n.times do
|
137
|
-
arr = ParseDate.parsedate("2000-01-04 12:12:12")
|
138
|
-
Date.new(*arr[0..2])
|
139
|
-
Time.mktime(*arr)
|
140
|
-
end
|
141
|
-
}
|
142
|
-
|
143
|
-
x.report('parsedate - invalid ') {
|
144
|
-
n.times do
|
145
|
-
arr = ParseDate.parsedate("2000-00-04 12:12:12")
|
146
|
-
end
|
147
|
-
}
|
148
|
-
end
|
149
|
-
|
150
134
|
x.report('strptime - valid') {
|
151
135
|
n.times do
|
152
136
|
DateTime.strptime("2000-01-04 12:12:12", '%Y-%m-%d %H:%M:%s')
|
@@ -121,17 +121,17 @@ module Timeliness
|
|
121
121
|
# code is nil, then just the raw value is used.
|
122
122
|
#
|
123
123
|
@format_components = {
|
124
|
-
:
|
125
|
-
:
|
126
|
-
:
|
127
|
-
:
|
128
|
-
:
|
129
|
-
:
|
130
|
-
:
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:
|
134
|
-
:
|
124
|
+
year: [ 0, 'unambiguous_year(year)'],
|
125
|
+
month: [ 1, 'month_index(month)'],
|
126
|
+
day: [ 2 ],
|
127
|
+
hour: [ 3, 'full_hour(hour, meridian ||= nil)'],
|
128
|
+
min: [ 4 ],
|
129
|
+
sec: [ 5 ],
|
130
|
+
usec: [ 6, 'microseconds(usec)'],
|
131
|
+
offset: [ 7, 'offset_in_seconds(offset)'],
|
132
|
+
zone: [ 7, 'zone'],
|
133
|
+
zulu: [ 7, 'offset_in_seconds("00:00")'],
|
134
|
+
meridian: [ nil ]
|
135
135
|
}
|
136
136
|
|
137
137
|
# Mapping some common timezone abbreviations which are not mapped or
|
data/lib/timeliness/format.rb
CHANGED
@@ -12,29 +12,37 @@ module Timeliness
|
|
12
12
|
|
13
13
|
def compile!
|
14
14
|
@token_count = 0
|
15
|
+
found_tokens, token_order = [], []
|
16
|
+
|
15
17
|
format = format_string.dup
|
16
18
|
format.gsub!(/([\.\\])/, '\\\\\1') # escapes dots and backslashes
|
17
|
-
found_tokens, token_order = [], []
|
18
19
|
|
19
20
|
# Substitute tokens with numbered placeholder
|
20
21
|
Definitions.sorted_token_keys.each do |token|
|
21
|
-
|
22
|
-
|
22
|
+
count = 0
|
23
|
+
format.gsub!(token) do
|
24
|
+
token_regexp_str, arg_key = Definitions.format_tokens[token]
|
25
|
+
token_index = found_tokens.size
|
26
|
+
|
23
27
|
if arg_key
|
28
|
+
raise CompilationFailed, "Token '#{token}' was found more than once in format '#{format_string}'. This has unexpected effects should be removed." if count > 0
|
29
|
+
count += 1
|
30
|
+
|
24
31
|
token_regexp_str = "(#{token_regexp_str})"
|
25
32
|
@token_count += 1
|
26
33
|
end
|
27
|
-
found_tokens << [token_regexp_str, arg_key]
|
34
|
+
found_tokens << [ token_regexp_str, arg_key ]
|
35
|
+
|
36
|
+
"%<#{token_index}>"
|
28
37
|
end
|
29
38
|
end
|
30
39
|
|
31
40
|
# Replace placeholders with token regexps
|
32
|
-
format.
|
33
|
-
|
34
|
-
token_regexp_str, arg_key = found_tokens[token_index.to_i]
|
35
|
-
format.gsub!("%<#{token_index}>", token_regexp_str)
|
41
|
+
format.gsub!(/%<(\d+)>/) do
|
42
|
+
token_regexp_str, arg_key = found_tokens[$1.to_i]
|
36
43
|
token_order << arg_key
|
37
|
-
|
44
|
+
token_regexp_str
|
45
|
+
end
|
38
46
|
|
39
47
|
define_process_method(token_order.compact)
|
40
48
|
@regexp_string = format
|
@@ -55,12 +63,11 @@ module Timeliness
|
|
55
63
|
position, code = Definitions.format_components[component]
|
56
64
|
values[position] = code || "#{component}.to_i" if position
|
57
65
|
end
|
58
|
-
instance_eval
|
59
|
-
|
60
|
-
|
61
|
-
|
66
|
+
instance_eval <<~DEF
|
67
|
+
def process(#{components.join(',')})
|
68
|
+
[#{values.map { |i| i || 'nil' }.join(',')}]
|
69
|
+
end
|
62
70
|
DEF
|
63
71
|
end
|
64
|
-
|
65
72
|
end
|
66
73
|
end
|
data/lib/timeliness/version.rb
CHANGED
@@ -21,13 +21,13 @@ describe Timeliness::Definitions do
|
|
21
21
|
|
22
22
|
context "with :before option" do
|
23
23
|
it "should add new format with higher precedence" do
|
24
|
-
definitions.add_formats(:time, "ss:hh:nn", :
|
24
|
+
definitions.add_formats(:time, "ss:hh:nn", before: 'hh:nn:ss')
|
25
25
|
time_array = parser._parse('59:23:58', :time)
|
26
26
|
expect(time_array).to eq [nil,nil,nil,23,58,59,nil,nil]
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should raise error if :before format does not exist" do
|
30
|
-
expect { definitions.add_formats(:time, "ss:hh:nn", :
|
30
|
+
expect { definitions.add_formats(:time, "ss:hh:nn", before: 'nn:hh:ss') }.to raise_error(Timeliness::Definitions::FormatNotFound)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -11,17 +11,17 @@ describe Timeliness::FormatSet do
|
|
11
11
|
context "compiled regexp" do
|
12
12
|
context "for time formats" do
|
13
13
|
format_tests = {
|
14
|
-
'hh:nn:ss' => {:
|
15
|
-
'hh-nn-ss' => {:
|
16
|
-
'h:nn' => {:
|
17
|
-
'h.nn' => {:
|
18
|
-
'h nn' => {:
|
19
|
-
'h-nn' => {:
|
20
|
-
'h:nn_ampm' => {:
|
21
|
-
'h.nn_ampm' => {:
|
22
|
-
'h nn_ampm' => {:
|
23
|
-
'h-nn_ampm' => {:
|
24
|
-
'h_ampm' => {:
|
14
|
+
'hh:nn:ss' => {pass: ['12:12:12', '01:01:01'], fail: ['1:12:12', '12:1:12', '12:12:1', '12-12-12']},
|
15
|
+
'hh-nn-ss' => {pass: ['12-12-12', '01-01-01'], fail: ['1-12-12', '12-1-12', '12-12-1', '12:12:12']},
|
16
|
+
'h:nn' => {pass: ['12:12', '1:01'], fail: ['12:2', '12-12']},
|
17
|
+
'h.nn' => {pass: ['2.12', '12.12'], fail: ['2.1', '12:12']},
|
18
|
+
'h nn' => {pass: ['2 12', '12 12'], fail: ['2 1', '2.12', '12:12']},
|
19
|
+
'h-nn' => {pass: ['2-12', '12-12'], fail: ['2-1', '2.12', '12:12']},
|
20
|
+
'h:nn_ampm' => {pass: ['2:12am', '2:12 pm', '2:12 AM', '2:12PM'], fail: ['1:2am', '1:12 pm', '2.12am']},
|
21
|
+
'h.nn_ampm' => {pass: ['2.12am', '2.12 pm'], fail: ['1:2am', '1:12 pm', '2:12am']},
|
22
|
+
'h nn_ampm' => {pass: ['2 12am', '2 12 pm'], fail: ['1 2am', '1 12 pm', '2:12am']},
|
23
|
+
'h-nn_ampm' => {pass: ['2-12am', '2-12 pm'], fail: ['1-2am', '1-12 pm', '2:12am']},
|
24
|
+
'h_ampm' => {pass: ['2am', '2 am', '12 pm'], fail: ['1.am', '12 pm', '2:12am']},
|
25
25
|
}
|
26
26
|
format_tests.each do |format, values|
|
27
27
|
it "should correctly match times in format '#{format}'" do
|
@@ -34,17 +34,17 @@ describe Timeliness::FormatSet do
|
|
34
34
|
|
35
35
|
context "for date formats" do
|
36
36
|
format_tests = {
|
37
|
-
'yyyy/mm/dd' => {:
|
38
|
-
'yyyy-mm-dd' => {:
|
39
|
-
'yyyy.mm.dd' => {:
|
40
|
-
'm/d/yy' => {:
|
41
|
-
'd/m/yy' => {:
|
42
|
-
'm\d\yy' => {:
|
43
|
-
'd\m\yy' => {:
|
44
|
-
'd-m-yy' => {:
|
45
|
-
'd.m.yy' => {:
|
46
|
-
'd mmm yy' => {:
|
47
|
-
:
|
37
|
+
'yyyy/mm/dd' => {pass: ['2000/02/01'], fail: ['2000\02\01', '2000/2/1', '00/02/01']},
|
38
|
+
'yyyy-mm-dd' => {pass: ['2000-02-01'], fail: ['2000\02\01', '2000-2-1', '00-02-01']},
|
39
|
+
'yyyy.mm.dd' => {pass: ['2000.02.01'], fail: ['2000\02\01', '2000.2.1', '00.02.01']},
|
40
|
+
'm/d/yy' => {pass: ['2/1/01', '02/01/00', '02/01/2000'], fail: ['2/1/0', '2.1.01']},
|
41
|
+
'd/m/yy' => {pass: ['1/2/01', '01/02/00', '01/02/2000'], fail: ['1/2/0', '1.2.01']},
|
42
|
+
'm\d\yy' => {pass: ['2\1\01', '2\01\00', '02\01\2000'], fail: ['2\1\0', '2/1/01']},
|
43
|
+
'd\m\yy' => {pass: ['1\2\01', '1\02\00', '01\02\2000'], fail: ['1\2\0', '1/2/01']},
|
44
|
+
'd-m-yy' => {pass: ['1-2-01', '1-02-00', '01-02-2000'], fail: ['1-2-0', '1/2/01']},
|
45
|
+
'd.m.yy' => {pass: ['1.2.01', '1.02.00', '01.02.2000'], fail: ['1.2.0', '1/2/01']},
|
46
|
+
'd mmm yy' => {pass: ['1 Feb 00', '1 Feb 2000', '1 February 00', '01 February 2000'],
|
47
|
+
fail: ['1 Fe 00', 'Feb 1 2000', '1 Feb 0']}
|
48
48
|
}
|
49
49
|
format_tests.each do |format, values|
|
50
50
|
it "should correctly match dates in format '#{format}'" do
|
@@ -57,10 +57,10 @@ describe Timeliness::FormatSet do
|
|
57
57
|
|
58
58
|
context "for datetime formats" do
|
59
59
|
format_tests = {
|
60
|
-
'ddd mmm d hh:nn:ss zo yyyy' => {:
|
61
|
-
'ddd mmm d hh:nn:ss tz yyyy' => {:
|
62
|
-
'yyyy-mm-ddThh:nn:sszo' => {:
|
63
|
-
'yyyy-mm-ddThh:nn:ss.uzt' => {:
|
60
|
+
'ddd mmm d hh:nn:ss zo yyyy' => {pass: ['Sat Jul 19 12:00:00 +1000 2008'], fail: []},
|
61
|
+
'ddd mmm d hh:nn:ss tz yyyy' => {pass: ['Sat Jul 19 12:00:00 EST 2008'], fail: []},
|
62
|
+
'yyyy-mm-ddThh:nn:sszo' => {pass: ['2008-07-19T12:00:00+10:00'], fail: ['2008-07-19T12:00:00Z+10:00']},
|
63
|
+
'yyyy-mm-ddThh:nn:ss.uzt' => {pass: ['2019-06-07T03:35:55.100000Z'], fail: []},
|
64
64
|
}
|
65
65
|
format_tests.each do |format, values|
|
66
66
|
it "should correctly match datetimes in format '#{format}'" do
|
@@ -16,6 +16,12 @@ describe Timeliness::Format do
|
|
16
16
|
Timeliness::Format.new('|--[)').compile!
|
17
17
|
}.to raise_error(Timeliness::Format::CompilationFailed)
|
18
18
|
end
|
19
|
+
|
20
|
+
it 'should raise compilation error if token with captured arg is present more than once' do
|
21
|
+
expect {
|
22
|
+
Timeliness::Format.new('dd-mm-yyyy-dd').compile!
|
23
|
+
}.to raise_error(Timeliness::Format::CompilationFailed)
|
24
|
+
end
|
19
25
|
end
|
20
26
|
|
21
27
|
describe "#process" do
|
@@ -73,8 +79,8 @@ describe Timeliness::Format do
|
|
73
79
|
context "with I18n loaded" do
|
74
80
|
before(:all) do
|
75
81
|
I18n.locale = :es
|
76
|
-
I18n.backend.store_translations :es, :
|
77
|
-
I18n.backend.store_translations :es, :
|
82
|
+
I18n.backend.store_translations :es, date: { month_names: %w{ ~ Enero Febrero Marzo } }
|
83
|
+
I18n.backend.store_translations :es, date: { abbr_month_names: %w{ ~ Ene Feb Mar } }
|
78
84
|
end
|
79
85
|
|
80
86
|
it 'should parse abbreviated month for current locale to correct value' do
|
@@ -138,7 +138,7 @@ describe Timeliness::Parser do
|
|
138
138
|
it 'should return value using string zone adjusted to :zone option string timezone' do
|
139
139
|
Timeliness.configuration.default_timezone = :local
|
140
140
|
|
141
|
-
value = parse("Thu, 01 Jun 2000 03:00:00 MST", :
|
141
|
+
value = parse("Thu, 01 Jun 2000 03:00:00 MST", zone: 'Perth')
|
142
142
|
expect(value).to eq Time.use_zone('Perth') { Time.zone.local(2000,6,1,18,0,0) }
|
143
143
|
expect(value.utc_offset).to eq 8.hours
|
144
144
|
end
|
@@ -196,7 +196,7 @@ describe Timeliness::Parser do
|
|
196
196
|
|
197
197
|
context "with :now option" do
|
198
198
|
it 'should use date parts if string does not specify' do
|
199
|
-
time = parse("12:13:14", :
|
199
|
+
time = parse("12:13:14", now: Time.local(2010,1,1))
|
200
200
|
expect(time).to eq Time.local(2010,1,1,12,13,14)
|
201
201
|
end
|
202
202
|
end
|
@@ -211,23 +211,23 @@ describe Timeliness::Parser do
|
|
211
211
|
context "with :zone option" do
|
212
212
|
context ":utc" do
|
213
213
|
it "should return time object in utc timezone" do
|
214
|
-
time = parse("2000-06-01 12:13:14", :datetime, :
|
214
|
+
time = parse("2000-06-01 12:13:14", :datetime, zone: :utc)
|
215
215
|
expect(time.utc_offset).to eq 0
|
216
216
|
end
|
217
217
|
|
218
218
|
it 'should return nil for partial invalid time component' do
|
219
|
-
expect(parse("2000-06-01 12:60", :datetime, :
|
219
|
+
expect(parse("2000-06-01 12:60", :datetime, zone: :utc)).to be_nil
|
220
220
|
end
|
221
221
|
end
|
222
222
|
|
223
223
|
context ":local" do
|
224
224
|
it "should return time object in local system timezone" do
|
225
|
-
time = parse("2000-06-01 12:13:14", :datetime, :
|
225
|
+
time = parse("2000-06-01 12:13:14", :datetime, zone: :local)
|
226
226
|
expect(time.utc_offset).to eq Time.mktime(2000, 6, 1, 12, 13, 14).utc_offset
|
227
227
|
end
|
228
228
|
|
229
229
|
it 'should return nil for partial invalid time component' do
|
230
|
-
expect(parse("2000-06-01 12:60", :datetime, :
|
230
|
+
expect(parse("2000-06-01 12:60", :datetime, zone: :local)).to be_nil
|
231
231
|
end
|
232
232
|
end
|
233
233
|
|
@@ -235,23 +235,23 @@ describe Timeliness::Parser do
|
|
235
235
|
timezone_settings zone: 'Adelaide'
|
236
236
|
|
237
237
|
it "should return time object in current timezone" do
|
238
|
-
time = parse("2000-06-01 12:13:14", :datetime, :
|
238
|
+
time = parse("2000-06-01 12:13:14", :datetime, zone: :current)
|
239
239
|
expect(time.utc_offset).to eq 9.5.hours
|
240
240
|
end
|
241
241
|
|
242
242
|
it 'should return nil for partial invalid time component' do
|
243
|
-
expect(parse("2000-06-01 12:60", :datetime, :
|
243
|
+
expect(parse("2000-06-01 12:60", :datetime, zone: :current)).to be_nil
|
244
244
|
end
|
245
245
|
end
|
246
246
|
|
247
247
|
context "named zone" do
|
248
248
|
it "should return time object in the timezone" do
|
249
|
-
time = parse("2000-06-01 12:13:14", :datetime, :
|
249
|
+
time = parse("2000-06-01 12:13:14", :datetime, zone: 'London')
|
250
250
|
expect(time.utc_offset).to eq 1.hour
|
251
251
|
end
|
252
252
|
|
253
253
|
it 'should return nil for partial invalid time component' do
|
254
|
-
expect(parse("2000-06-01 12:60", :datetime, :
|
254
|
+
expect(parse("2000-06-01 12:60", :datetime, zone: 'London')).to be_nil
|
255
255
|
end
|
256
256
|
end
|
257
257
|
|
@@ -259,17 +259,17 @@ describe Timeliness::Parser do
|
|
259
259
|
it 'should output message' do
|
260
260
|
expect {
|
261
261
|
expect(Time).to receive(:zone).and_raise(NoMethodError.new("undefined method `zone' for Time:Class"))
|
262
|
-
parse("2000-06-01 12:13:14", :
|
262
|
+
parse("2000-06-01 12:13:14", zone: :current)
|
263
263
|
}.to raise_error(Timeliness::Parser::MissingTimezoneSupport)
|
264
264
|
|
265
265
|
expect {
|
266
266
|
expect(Time).to receive(:current).and_raise(NoMethodError.new("undefined method `current' for Time:Class"))
|
267
|
-
parse("12:13:14", :
|
267
|
+
parse("12:13:14", zone: :current)
|
268
268
|
}.to raise_error(Timeliness::Parser::MissingTimezoneSupport)
|
269
269
|
|
270
270
|
expect {
|
271
271
|
expect(Time).to receive(:use_zone).and_raise(NoMethodError.new("undefined method `use_zone' for Time:Class"))
|
272
|
-
parse("2000-06-01 12:13:14", :
|
272
|
+
parse("2000-06-01 12:13:14", zone: 'London')
|
273
273
|
}.to raise_error(Timeliness::Parser::MissingTimezoneSupport)
|
274
274
|
end
|
275
275
|
end
|
@@ -292,7 +292,7 @@ describe Timeliness::Parser do
|
|
292
292
|
|
293
293
|
context "with :now option" do
|
294
294
|
it 'should use date from :now' do
|
295
|
-
expect(parse('12:13:14', :time, :
|
295
|
+
expect(parse('12:13:14', :time, now: Time.local(2010, 6, 1))).to eq Time.local(2010,6,1,12,13,14)
|
296
296
|
end
|
297
297
|
end
|
298
298
|
|
@@ -304,7 +304,7 @@ describe Timeliness::Parser do
|
|
304
304
|
end
|
305
305
|
|
306
306
|
it "should use date from the specified zone" do
|
307
|
-
time = parse("12:13:14", :time, :
|
307
|
+
time = parse("12:13:14", :time, zone: :utc)
|
308
308
|
expect(time.year).to eq 2009
|
309
309
|
expect(time.month).to eq 12
|
310
310
|
expect(time.day).to eq 31
|
@@ -374,51 +374,51 @@ describe Timeliness::Parser do
|
|
374
374
|
end
|
375
375
|
end
|
376
376
|
|
377
|
-
context "with :
|
377
|
+
context "with strict: true" do
|
378
378
|
it "should return nil from date string when type is datetime" do
|
379
|
-
time_array = parser._parse('2000-02-01', :datetime, :
|
379
|
+
time_array = parser._parse('2000-02-01', :datetime, strict: true)
|
380
380
|
expect(time_array).to be_nil
|
381
381
|
end
|
382
382
|
|
383
383
|
it "should return nil from datetime string when type is date" do
|
384
|
-
time_array = parser._parse('2000-02-01 12:13:14', :date, :
|
384
|
+
time_array = parser._parse('2000-02-01 12:13:14', :date, strict: true)
|
385
385
|
expect(time_array).to be_nil
|
386
386
|
end
|
387
387
|
|
388
388
|
it "should return nil from datetime string when type is time" do
|
389
|
-
time_array = parser._parse('2000-02-01 12:13:14', :time, :
|
389
|
+
time_array = parser._parse('2000-02-01 12:13:14', :time, strict: true)
|
390
390
|
expect(time_array).to be_nil
|
391
391
|
end
|
392
392
|
|
393
393
|
it "should parse date string when type is date" do
|
394
|
-
time_array = parser._parse('2000-02-01', :date, :
|
394
|
+
time_array = parser._parse('2000-02-01', :date, strict: true)
|
395
395
|
expect(time_array).not_to be_nil
|
396
396
|
end
|
397
397
|
|
398
398
|
it "should parse time string when type is time" do
|
399
|
-
time_array = parser._parse('12:13:14', :time, :
|
399
|
+
time_array = parser._parse('12:13:14', :time, strict: true)
|
400
400
|
expect(time_array).not_to be_nil
|
401
401
|
end
|
402
402
|
|
403
403
|
it "should parse datetime string when type is datetime" do
|
404
|
-
time_array = parser._parse('2000-02-01 12:13:14', :datetime, :
|
404
|
+
time_array = parser._parse('2000-02-01 12:13:14', :datetime, strict: true)
|
405
405
|
expect(time_array).not_to be_nil
|
406
406
|
end
|
407
407
|
|
408
408
|
it "should ignore strict parsing if no type specified" do
|
409
|
-
time_array = parser._parse('2000-02-01', :
|
409
|
+
time_array = parser._parse('2000-02-01', strict: true)
|
410
410
|
expect(time_array).not_to be_nil
|
411
411
|
end
|
412
412
|
end
|
413
413
|
|
414
414
|
context "with :format option" do
|
415
415
|
it "should return values if string matches specified format" do
|
416
|
-
time_array = parser._parse('2000-02-01 12:13:14', :datetime, :
|
416
|
+
time_array = parser._parse('2000-02-01 12:13:14', :datetime, format: 'yyyy-mm-dd hh:nn:ss')
|
417
417
|
expect(time_array).to eq [2000,2,1,12,13,14,nil,nil]
|
418
418
|
end
|
419
419
|
|
420
420
|
it "should return nil if string does not match specified format" do
|
421
|
-
time_array = parser._parse('2000-02-01 12:13', :datetime, :
|
421
|
+
time_array = parser._parse('2000-02-01 12:13', :datetime, format: 'yyyy-mm-dd hh:nn:ss')
|
422
422
|
expect(time_array).to be_nil
|
423
423
|
end
|
424
424
|
end
|
@@ -520,7 +520,7 @@ describe Timeliness::Parser do
|
|
520
520
|
it 'should return date array from Time value' do
|
521
521
|
time = Time.now
|
522
522
|
date_array = [time.year, time.month, time.day]
|
523
|
-
expect(current_date(:
|
523
|
+
expect(current_date(now: time)).to eq date_array
|
524
524
|
end
|
525
525
|
end
|
526
526
|
|
@@ -528,26 +528,26 @@ describe Timeliness::Parser do
|
|
528
528
|
it 'should return date array for utc zone' do
|
529
529
|
time = Time.now.getutc
|
530
530
|
date_array = [time.year, time.month, time.day]
|
531
|
-
expect(current_date(:
|
531
|
+
expect(current_date(zone: :utc)).to eq date_array
|
532
532
|
end
|
533
533
|
|
534
534
|
it 'should return date array for local zone' do
|
535
535
|
time = Time.now
|
536
536
|
date_array = [time.year, time.month, time.day]
|
537
|
-
expect(current_date(:
|
537
|
+
expect(current_date(zone: :local)).to eq date_array
|
538
538
|
end
|
539
539
|
|
540
540
|
it 'should return date array for current zone' do
|
541
541
|
Time.zone = 'London'
|
542
542
|
time = Time.current
|
543
543
|
date_array = [time.year, time.month, time.day]
|
544
|
-
expect(current_date(:
|
544
|
+
expect(current_date(zone: :current)).to eq date_array
|
545
545
|
end
|
546
546
|
|
547
547
|
it 'should return date array for named zone' do
|
548
548
|
time = Time.use_zone('London') { Time.current }
|
549
549
|
date_array = [time.year, time.month, time.day]
|
550
|
-
expect(current_date(:
|
550
|
+
expect(current_date(zone: 'London')).to eq date_array
|
551
551
|
end
|
552
552
|
end
|
553
553
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timeliness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Meehan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|