timeliness 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9692d6a370b0240cc872d67dbc79deaf5429b276ba3a8aa45049f9b77a70456c
4
- data.tar.gz: c63f8a093f2e85909a7ecd4a894bc59d6929da07c3fd3ed445932a9e8474f535
3
+ metadata.gz: 22c5b15397d7f945442d9768efb71ebbb243e7d44b8948d8ccf03e31c70858b3
4
+ data.tar.gz: 96ac6e12fd20b0b5530e3ae99e60b2df81c9014bd7cedba26fa6e9395268d8b5
5
5
  SHA512:
6
- metadata.gz: ff9b6afda36bd0829dca9b8133e4db5f2a6eeff6d076cec28a12c8a83fd5e1c2b0973cdb7b1b328bf6556755232a4d8c82ecaa362d5224806f8eefd185d5bee5
7
- data.tar.gz: ffa9fd84e51518e61e4689ddb31bda87f4d297d6ed56a99e20e34563ba18a97412d6e95af2d2c5843498fa75fd3a26d7a82357405e56bfc99cfe314a3b5d67d3
6
+ metadata.gz: d3c968646a9f6bc9d867d31c062724e162c8824fd4feb9f76a682f46cfd20cf817948b06bb1f14731eb2f3bb2be5d433edcb39d51ee8655e863898940f9ebf08
7
+ data.tar.gz: 5eb2af292e5248ee58cfd539bad3491c668adf8c564579c1694ebffd0163e27d0353aec2bd0d478923d930d796d878ca8e99861ea15c9ea86d4bac9089ce16f8
@@ -1,3 +1,8 @@
1
+ = 0.4.1 - 2019-06-11
2
+ * Add format for ISO 8601 with usec and 'Z' UTC zone offset (jartek)
3
+ * Fix ISO 8601 parsing bug where Z was not recognised as UTC
4
+ * Add 'zt' format token to support 'Z' (Zulu time) zone offset i.e. +00:00 or UTC
5
+
1
6
  = 0.4.0 - 2019-02-09
2
7
  * Add threadsafety for use_euro_formats & use_us_formats to allow runtime
3
8
  switching (andruby, timdiggins)
@@ -75,10 +75,12 @@ module Timeliness
75
75
  'ddd, dd mmm yyyy hh:nn:ss tz', # RFC 822
76
76
  'ddd, dd mmm yyyy hh:nn:ss zo', # RFC 822
77
77
  'ddd mmm d hh:nn:ss zo yyyy', # Ruby time string
78
- 'yyyy-mm-ddThh:nn:ssZ', # ISO 8601 without zone offset
78
+ 'yyyy-mm-ddThh:nn:ss', # ISO 8601
79
79
  'yyyy-mm-ddThh:nn:sszo', # ISO 8601 with zone offset
80
+ 'yyyy-mm-ddThh:nn:sszt', # ISO 8601 with 'Zulu time' (i.e. Z) UTC zone designator
80
81
  'yyyy-mm-ddThh:nn:ss.u', # ISO 8601 with usec
81
82
  'yyyy-mm-ddThh:nn:ss.uzo', # ISO 8601 with usec and offset
83
+ 'yyyy-mm-ddThh:nn:ss.uzt', # ISO 8601 with usec and 'Zulu time' (i.e. Z) UTC zone designator
82
84
  'yyyy-mm-dd hh:nn:ss zo', # Ruby time string in later versions
83
85
  'yyyy-mm-dd hh:nn:ss tz', # Ruby time string for UTC in later versions
84
86
  ]
@@ -105,6 +107,7 @@ module Timeliness
105
107
  'ampm' => [ '[aApP]\.?[mM]\.?', :meridian ],
106
108
  'zo' => [ '[+-]\d{2}:?\d{2}', :offset ],
107
109
  'tz' => [ '[A-Z]{1,5}', :zone ],
110
+ 'zt' => [ '[Z]{1}', :zulu],
108
111
  '_' => [ '\s?' ]
109
112
  }
110
113
 
@@ -127,6 +130,7 @@ module Timeliness
127
130
  :usec => [ 6, 'microseconds(usec)'],
128
131
  :offset => [ 7, 'offset_in_seconds(offset)'],
129
132
  :zone => [ 7, 'zone'],
133
+ :zulu => [ 7, 'offset_in_seconds("00:00")'],
130
134
  :meridian => [ nil ]
131
135
  }
132
136
 
@@ -1,3 +1,3 @@
1
1
  module Timeliness
2
- VERSION = '0.4.0'
2
+ VERSION = '0.4.1'
3
3
  end
@@ -57,8 +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' => {:pass => ['Sat Jul 19 12:00:00 +1000 2008'], :fail => []},
61
- 'yyyy-mm-ddThh:nn:ss(?:Z|zo)' => {:pass => ['2008-07-19T12:00:00+10:00', '2008-07-19T12:00:00Z'], :fail => ['2008-07-19T12:00:00Z+10:00']},
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 => []},
62
64
  }
63
65
  format_tests.each do |format, values|
64
66
  it "should correctly match datetimes in format '#{format}'" do
@@ -68,7 +70,6 @@ describe Timeliness::FormatSet do
68
70
  end
69
71
  end
70
72
  end
71
-
72
73
  end
73
74
 
74
75
  context "#match" do
@@ -55,10 +55,18 @@ describe Timeliness::Format do
55
55
  expect(format_for('yyyy-mm-dd hh:nn:ss.u zo').process('2001', '02', '03', '04', '05', '06', '99', '+10:00')).to eq [2001,2,3,4,5,6,990000,36000]
56
56
  end
57
57
 
58
+ it "should define method which outputs datetime array with zone offset" do
59
+ expect(format_for('yyyy-mm-dd hh:nn:ss.u zo').process('2001', '02', '03', '04', '05', '06', '99', '+10:00')).to eq [2001,2,3,4,5,6,990000,36000]
60
+ end
61
+
58
62
  it "should define method which outputs datetime array with timezone string" do
59
63
  expect(format_for('yyyy-mm-dd hh:nn:ss.u tz').process('2001', '02', '03', '04', '05', '06', '99', 'EST')).to eq [2001,2,3,4,5,6,990000,'EST']
60
64
  end
61
65
 
66
+ it "should define method which outputs datetime array with 0 offset for zulu time ('Z')" do
67
+ expect(format_for('yyyy-mm-dd hh:nn:ss.uzt').process('2001', '02', '03', '04', '05', '06', '99', 'Z')).to eq [2001,2,3,4,5,6,990000,0]
68
+ end
69
+
62
70
  context "with long month" do
63
71
  let(:format) { format_for('dd mmm yyyy') }
64
72
 
@@ -1,4 +1,19 @@
1
1
  describe Timeliness::Parser do
2
+ around(:all) do |example|
3
+ current_default = Timeliness.default_timezone
4
+ current_zone = Time.zone
5
+ example.call
6
+ Time.zone = current_zone
7
+ Timeliness.default_timezone = current_default
8
+ end
9
+
10
+ def self.timezone_settings(zone: nil, output: nil)
11
+ before do
12
+ Time.zone = zone if zone
13
+ Timeliness.default_timezone = output if output
14
+ end
15
+ end
16
+
2
17
  before(:all) do
3
18
  Timecop.freeze(2010,1,1,0,0,0)
4
19
  end
@@ -70,10 +85,7 @@ describe Timeliness::Parser do
70
85
 
71
86
  context "string with zone offset value" do
72
87
  context "when current timezone is earler than string zone" do
73
- before(:all) do
74
- Timeliness.default_timezone = :current
75
- Time.zone = 'Australia/Melbourne'
76
- end
88
+ timezone_settings zone: 'Australia/Melbourne', output: :current
77
89
 
78
90
  it 'should return value shifted by positive offset in default timezone' do
79
91
  value = parse("2000-06-01T12:00:00+02:00")
@@ -86,18 +98,10 @@ describe Timeliness::Parser do
86
98
  expect(value).to eq Time.zone.local(2000,6,1,23,0,0)
87
99
  expect(value.utc_offset).to eq 10.hours
88
100
  end
89
-
90
- after(:all) do
91
- Time.zone = nil
92
- Timeliness.default_timezone = :local
93
- end
94
101
  end
95
102
 
96
103
  context "when current timezone is later than string zone" do
97
- before(:all) do
98
- Timeliness.default_timezone = :current
99
- Time.zone = 'America/Phoenix'
100
- end
104
+ timezone_settings zone: 'America/Phoenix', output: :current
101
105
 
102
106
  it 'should return value shifted by positive offset in default timezone' do
103
107
  value = parse("2000-06-01T12:00:00+02:00")
@@ -110,18 +114,11 @@ describe Timeliness::Parser do
110
114
  expect(value).to eq Time.zone.local(2000,6,1,6,0,0)
111
115
  expect(value.utc_offset).to eq -7.hours
112
116
  end
113
-
114
- after(:all) do
115
- Time.zone = nil
116
- Timeliness.default_timezone = :local
117
- end
118
117
  end
119
118
  end
120
119
 
121
120
  context "string with zone abbreviation" do
122
- before(:all) do
123
- Time.zone = 'Australia/Melbourne'
124
- end
121
+ timezone_settings zone: 'Australia/Melbourne'
125
122
 
126
123
  it 'should return value using string zone adjusted to default :local timezone' do
127
124
  Timeliness.default_timezone = :local
@@ -144,9 +141,17 @@ describe Timeliness::Parser do
144
141
  expect(value).to eq Time.use_zone('Perth') { Time.zone.local(2000,6,1,18,0,0) }
145
142
  expect(value.utc_offset).to eq 8.hours
146
143
  end
144
+ end
145
+
146
+ context "string with zulu time abbreviation 'Z'" do
147
+ timezone_settings zone: 'Australia/Melbourne'
148
+
149
+ it 'should return value using string zone adjusted to default :current timezone' do
150
+ Timeliness.default_timezone = :current
147
151
 
148
- after(:all) do
149
- Time.zone = nil
152
+ value = parse("2000-06-01T12:00:00Z")
153
+ expect(value).to eq Time.zone.local(2000,6,1,22,0,0)
154
+ expect(value.utc_offset).to eq 10.hours
150
155
  end
151
156
  end
152
157
 
@@ -226,8 +231,9 @@ describe Timeliness::Parser do
226
231
  end
227
232
 
228
233
  context ":current" do
234
+ timezone_settings zone: 'Adelaide'
235
+
229
236
  it "should return time object in current timezone" do
230
- Time.zone = 'Adelaide'
231
237
  time = parse("2000-06-01 12:13:14", :datetime, :zone => :current)
232
238
  expect(time.utc_offset).to eq 9.5.hours
233
239
  end
@@ -469,19 +475,11 @@ describe Timeliness::Parser do
469
475
  end
470
476
 
471
477
  context "default timezone" do
472
- before do
473
- @default_timezone = Timeliness.default_timezone
474
- end
475
-
476
478
  it "should be used if no zone value" do
477
479
  Timeliness.default_timezone = :utc
478
480
  time = parser.make_time([2000,6,1,12,0,0])
479
481
  expect(time.utc_offset).to eq 0
480
482
  end
481
-
482
- after do
483
- Timeliness.default_timezone = @default_timezone
484
- end
485
483
  end
486
484
 
487
485
  context "with zone value" do
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.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Meehan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-09 00:00:00.000000000 Z
11
+ date: 2019-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
132
  version: '0'
133
133
  requirements: []
134
134
  rubyforge_project: timeliness
135
- rubygems_version: 2.7.6
135
+ rubygems_version: 2.7.6.2
136
136
  signing_key:
137
137
  specification_version: 4
138
138
  summary: Date/time parsing for the control freak.