teasy 0.0.2 → 0.1.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/lib/teasy.rb +2 -2
- data/lib/teasy/time_with_zone.rb +14 -5
- data/lib/teasy/version.rb +1 -1
- data/test/teasy/teasy_test.rb +6 -1
- data/test/teasy/time_with_zone_test.rb +50 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54fb405363968ca96e3690d23559425f212a96f5
|
4
|
+
data.tar.gz: 65ab60376126736884d7a5b4faf3b4fe6e194736
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1dcaa1eb6b607f0061f570c84b8a0de4d4f081fa86f313d953617556749dba4966638341255d3135d132a7c7c5423258dc0567b2a27b78f637a84d3ff742204e
|
7
|
+
data.tar.gz: 0b432bb95e49c19ace3c6d0f751908be1a930de43e9e266de8b1fc78c61b58451e4d7f3aa6ff0c94f0a069154281e9a42b510b07eb4ddc809c3239ca78699062
|
data/lib/teasy.rb
CHANGED
@@ -14,8 +14,8 @@ module Teasy
|
|
14
14
|
def self.with_zone(zone)
|
15
15
|
old_zone = Thread.current[:teasy_default_zone]
|
16
16
|
Thread.current[:teasy_default_zone] = zone
|
17
|
-
|
17
|
+
yield
|
18
|
+
ensure
|
18
19
|
Thread.current[:teasy_default_zone] = old_zone
|
19
|
-
block_result
|
20
20
|
end
|
21
21
|
end
|
data/lib/teasy/time_with_zone.rb
CHANGED
@@ -13,7 +13,8 @@ module Teasy
|
|
13
13
|
:sunday?
|
14
14
|
def_delegators :period, :dst?
|
15
15
|
def_delegator :period, :utc_total_offset, :utc_offset
|
16
|
-
def_delegators :to_time, :to_i, :to_r, :to_f
|
16
|
+
def_delegators :to_time, :to_i, :to_r, :to_f, :to_datetime, :to_date,
|
17
|
+
:httpdate, :rfc2822, :rfc822, :xmlschema, :iso8601
|
17
18
|
|
18
19
|
# rubocop:disable Metrics/ParameterLists
|
19
20
|
def initialize(year, month = nil, day = nil,
|
@@ -35,10 +36,11 @@ module Teasy
|
|
35
36
|
end
|
36
37
|
|
37
38
|
def in_time_zone!(zone = Teasy.default_zone)
|
38
|
-
time =
|
39
|
+
time = utc_time
|
39
40
|
@zone = TZInfo::Timezone.get(zone)
|
40
41
|
@time = @zone.utc_to_local(time)
|
41
42
|
@period = @zone.period_for_utc(time)
|
43
|
+
remove_instance_variable(:@local_time) unless @local_time.nil?
|
42
44
|
self
|
43
45
|
end
|
44
46
|
|
@@ -93,12 +95,12 @@ module Teasy
|
|
93
95
|
alias_method :ctime, :asctime
|
94
96
|
|
95
97
|
def +(other)
|
96
|
-
TimeWithZone.from_utc(
|
98
|
+
TimeWithZone.from_utc(utc_time + other, @zone.identifier)
|
97
99
|
end
|
98
100
|
|
99
101
|
def -(other)
|
100
102
|
if other.is_a? Numeric
|
101
|
-
TimeWithZone.from_utc(
|
103
|
+
TimeWithZone.from_utc(utc_time - other, @zone.identifier)
|
102
104
|
elsif other.respond_to? :to_time
|
103
105
|
to_time - other.to_time
|
104
106
|
else
|
@@ -124,11 +126,18 @@ module Teasy
|
|
124
126
|
end
|
125
127
|
|
126
128
|
def to_time
|
127
|
-
@
|
129
|
+
return @local_time unless @local_time.nil?
|
130
|
+
params = %i(year mon day hour min).map! { |m| @time.send(m) }
|
131
|
+
params << @time.sec + @time.subsec
|
132
|
+
@local_time = utc? ? Time.utc(*params) : Time.new(*params, utc_offset)
|
128
133
|
end
|
129
134
|
|
130
135
|
private
|
131
136
|
|
137
|
+
def utc_time
|
138
|
+
@utc_time ||= @zone.local_to_utc(@time)
|
139
|
+
end
|
140
|
+
|
132
141
|
attr_reader :time, :period
|
133
142
|
|
134
143
|
# matches valid format directives for zones
|
data/lib/teasy/version.rb
CHANGED
data/test/teasy/teasy_test.rb
CHANGED
@@ -30,12 +30,17 @@ class TeasyTest < Minitest::Test
|
|
30
30
|
threads.each(&:join)
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def test_with_zone_changes_default_zone_only_within_block
|
34
34
|
assert_equal 'UTC', Teasy.default_zone
|
35
35
|
Teasy.with_zone('Europe/Berlin') do
|
36
36
|
assert_equal 'Europe/Berlin', Teasy.default_zone
|
37
|
+
fail 'exception within block'
|
37
38
|
end
|
39
|
+
rescue
|
38
40
|
assert_equal 'UTC', Teasy.default_zone
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_with_zone_returns_block_result
|
39
44
|
assert_equal 1, Teasy.with_zone('Europe/Berlin') { 1 }
|
40
45
|
end
|
41
46
|
end
|
@@ -313,6 +313,31 @@ class TimeWithZoneTest < Minitest::Test
|
|
313
313
|
assert_equal [45, 30, 0, 2, 4, 2042, 3, 92, true, 'CEST'], berlin_to_a
|
314
314
|
end
|
315
315
|
|
316
|
+
def test_to_time
|
317
|
+
assert_instance_of Time, @timestamptz.to_time
|
318
|
+
assert_equal 0, @timestamptz.to_time.utc_offset
|
319
|
+
assert @timestamptz.to_time.utc?
|
320
|
+
assert_equal @timestamptz, @timestamptz.to_time
|
321
|
+
|
322
|
+
assert_equal 7200, @timestamptz_berlin.to_time.utc_offset
|
323
|
+
assert_equal @timestamptz_berlin, @timestamptz_berlin.to_time
|
324
|
+
end
|
325
|
+
|
326
|
+
def test_to_datetime
|
327
|
+
assert_instance_of DateTime, @timestamptz.to_datetime
|
328
|
+
assert_equal 0, @timestamptz.to_datetime.offset
|
329
|
+
assert_equal @timestamptz, @timestamptz.to_datetime
|
330
|
+
|
331
|
+
assert_equal Rational(2, 24), @timestamptz_berlin.to_datetime.offset
|
332
|
+
assert_equal @timestamptz_berlin, @timestamptz_berlin.to_datetime
|
333
|
+
end
|
334
|
+
|
335
|
+
def test_to_date
|
336
|
+
assert_instance_of Date, @timestamptz.to_date
|
337
|
+
assert_equal @timestamptz.day, @timestamptz.to_date.day
|
338
|
+
assert_equal @timestamptz_berlin.day, @timestamptz_berlin.to_date.day
|
339
|
+
end
|
340
|
+
|
316
341
|
def test_to_f
|
317
342
|
assert_instance_of Float, @timestamptz.to_f
|
318
343
|
assert_in_epsilon 2_280_011_445.000_001, @timestamptz.to_f
|
@@ -413,4 +438,29 @@ class TimeWithZoneTest < Minitest::Test
|
|
413
438
|
assert_equal 'UTC', @timestamptz.zone
|
414
439
|
assert_equal 'Europe/Berlin', @timestamptz_berlin.zone
|
415
440
|
end
|
441
|
+
|
442
|
+
def test_httpdate
|
443
|
+
assert_equal 'Wed, 02 Apr 2042 00:30:45 GMT', @timestamptz.httpdate
|
444
|
+
assert_equal 'Tue, 01 Apr 2042 22:30:45 GMT', @timestamptz_berlin.httpdate
|
445
|
+
end
|
446
|
+
|
447
|
+
def test_rfc2822
|
448
|
+
assert_equal 'Wed, 02 Apr 2042 00:30:45 -0000', @timestamptz.rfc2822
|
449
|
+
assert_equal 'Wed, 02 Apr 2042 00:30:45 +0200', @timestamptz_berlin.rfc2822
|
450
|
+
end
|
451
|
+
|
452
|
+
def test_rfc822
|
453
|
+
assert_equal 'Wed, 02 Apr 2042 00:30:45 -0000', @timestamptz.rfc822
|
454
|
+
assert_equal 'Wed, 02 Apr 2042 00:30:45 +0200', @timestamptz_berlin.rfc822
|
455
|
+
end
|
456
|
+
|
457
|
+
def test_xmlschema
|
458
|
+
assert_equal '2042-04-02T00:30:45Z', @timestamptz.xmlschema
|
459
|
+
assert_equal '2042-04-02T00:30:45+02:00', @timestamptz_berlin.xmlschema
|
460
|
+
end
|
461
|
+
|
462
|
+
def test_iso8601
|
463
|
+
assert_equal '2042-04-02T00:30:45Z', @timestamptz.iso8601
|
464
|
+
assert_equal '2042-04-02T00:30:45+02:00', @timestamptz_berlin.iso8601
|
465
|
+
end
|
416
466
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teasy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kai Kuchenbecker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tzinfo
|