timezone 0.2.1 → 0.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.
- data/.travis.yml +2 -0
- data/CHANGES.markdown +2 -2
- data/CONTRIBUTING.markdown +6 -2
- data/README.markdown +10 -4
- data/Rakefile +1 -1
- data/data/Asia/Nicosia.json +1 -1
- data/lib/timezone.rb +2 -2
- data/lib/timezone/active_support.rb +410 -0
- data/lib/timezone/parser.rb +29 -0
- data/lib/timezone/parser/data.rb +103 -0
- data/lib/timezone/parser/link.rb +10 -0
- data/lib/timezone/parser/rule.rb +55 -0
- data/lib/timezone/parser/rule/entry.rb +74 -0
- data/lib/timezone/parser/rule/on.rb +30 -0
- data/lib/timezone/parser/rule/on_rules.rb +30 -0
- data/lib/timezone/parser/zone.rb +37 -0
- data/lib/timezone/parser/zone/data_generator.rb +77 -0
- data/lib/timezone/parser/zone/entry.rb +39 -0
- data/lib/timezone/parser/zone/until.rb +28 -0
- data/lib/timezone/version.rb +1 -1
- data/lib/timezone/zone.rb +7 -2
- data/test/data/asia +2717 -0
- data/test/timezone/parser/rule/on_rules_test.rb +20 -0
- data/test/timezone/parser/rule_test.rb +52 -0
- data/test/timezone/parser/zone/data_generator_test.rb +101 -0
- data/test/timezone/parser/zone/until_test.rb +13 -0
- data/test/timezone/parser/zone_test.rb +42 -0
- data/test/timezone/parser_test.rb +12 -0
- data/test/timezone_test.rb +47 -1
- data/timezone.gemspec +1 -1
- metadata +33 -10
- data/lib/timezone/rule.rb +0 -30
- data/test/rule_test.rb +0 -42
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'timezone/parser/rule/on_rules'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
describe Timezone::Parser::Rule::On do
|
5
|
+
def parse(*args)
|
6
|
+
Timezone::Parser::Rule::On.parse(*args)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'parses lastDAY' do
|
10
|
+
assert_equal ['Oct', '29'], parse('lastSun', 'Oct', 1995)
|
11
|
+
assert_equal ['Oct', '27'], parse('lastSun', 'Oct', 1996)
|
12
|
+
assert_equal ['Oct', '26'], parse('lastSun', 'Oct', 1997)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'parses DAY>=NUM' do
|
16
|
+
assert_equal ['Apr', '01'], parse('Fri>=26', 'Mar', 2005)
|
17
|
+
assert_equal ['Mar', '31'], parse('Fri>=26', 'Mar', 2006)
|
18
|
+
assert_equal ['Mar', '30'], parse('Fri>=26', 'Mar', 2007)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'timezone/parser/rule'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
describe Timezone::Parser::Rule do
|
5
|
+
before do
|
6
|
+
Timezone::Parser.rules.clear
|
7
|
+
Timezone::Parser.rule("Rule Zion 1940 only - Jun 1 0:00 1:00 D")
|
8
|
+
@rule = Timezone::Parser.rules['Zion'].first
|
9
|
+
Timezone::Parser.rule("Rule Zion 1948 1950 - May 23 0:00 2:20 S")
|
10
|
+
@oddity = Timezone::Parser.rules['Zion'].last
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'adds multiple rules with the same name' do
|
14
|
+
assert_equal 4, Timezone::Parser.rules['Zion'].count
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#offset' do
|
18
|
+
it 'properly calculates hours' do
|
19
|
+
assert_equal 3_600, @rule.offset
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'properly calculates minutes' do
|
23
|
+
assert_equal 8_400, @oddity.offset
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'selects rules given an end date' do
|
28
|
+
end_date = Time.new(1947, 1, 1).to_i * 1_000
|
29
|
+
assert_equal [@rule], Timezone::Parser.select_rules('Zion', end_date)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'knows daylight savings time' do
|
33
|
+
assert @rule.dst?
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'properly calculates start_date' do
|
37
|
+
assert_equal Time.utc(1940, 6, 1, 0, 0, 0).to_i*1_000, @rule.start_date
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'understands lastDAY rules' do
|
41
|
+
Timezone::Parser.rule("Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -")
|
42
|
+
rule = Timezone::Parser.rules['EUAsia'].first
|
43
|
+
|
44
|
+
assert_equal Time.utc(1996, 10, 27, 1, 0, 0).to_i*1_000, rule.start_date
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'understands DAY>=NUM rules' do
|
48
|
+
Timezone::Parser.rule("Rule Zion 2005 only - Mar Fri>=26 2:00 1:00 D")
|
49
|
+
rule = Timezone::Parser.rules['Zion'].last
|
50
|
+
assert_equal Time.utc(2005, 4, 1, 2, 0, 0).to_i*1_000, rule.start_date
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'timezone/parser/zone/data_generator'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
describe Timezone::Parser::Zone::DataGenerator do
|
5
|
+
it 'properly parses Asia/Hebron Zion rules' do
|
6
|
+
Timezone::Parser.zones.clear
|
7
|
+
Timezone::Parser.rules.clear
|
8
|
+
|
9
|
+
Timezone::Parser.rule("Rule Zion 1940 only - Jun 1 0:00 1:00 D")
|
10
|
+
Timezone::Parser.rule("Rule Zion 1942 1944 - Nov 1 0:00 0 S")
|
11
|
+
Timezone::Parser.rule("Rule Zion 1943 only - Apr 1 2:00 1:00 D")
|
12
|
+
Timezone::Parser.rule("Rule Zion 1944 only - Apr 1 0:00 1:00 D")
|
13
|
+
Timezone::Parser.rule("Rule Zion 1945 only - Apr 16 0:00 1:00 D")
|
14
|
+
Timezone::Parser.rule("Rule Zion 1945 only - Nov 1 2:00 0 S")
|
15
|
+
Timezone::Parser.rule("Rule Zion 1946 only - Apr 16 2:00 1:00 D")
|
16
|
+
Timezone::Parser.rule("Rule Zion 1946 only - Nov 1 0:00 0 S")
|
17
|
+
Timezone::Parser.rule("Rule Zion 1948 only - May 23 0:00 2:00 DD")
|
18
|
+
Timezone::Parser.rule("Rule Zion 1948 only - Sep 1 0:00 1:00 D")
|
19
|
+
Timezone::Parser.rule("Rule Zion 1948 1949 - Nov 1 2:00 0 S")
|
20
|
+
Timezone::Parser.rule("Rule Zion 1949 only - May 1 0:00 1:00 D")
|
21
|
+
|
22
|
+
Timezone::Parser.zone('Zone Asia/Hebron 2:20:23 - LMT 1900 Oct')
|
23
|
+
Timezone::Parser.zone('2:00 Zion EET 1948 May 15')
|
24
|
+
|
25
|
+
zones = Timezone::Parser::Zone.generate('Asia/Hebron')
|
26
|
+
|
27
|
+
assert_equal 12, zones.count
|
28
|
+
|
29
|
+
assert_equal -377705116800000, zones[0].start_date
|
30
|
+
assert_equal -2185410023000, zones[0].end_date
|
31
|
+
assert !zones[0].dst
|
32
|
+
assert_equal 8423, zones[0].offset
|
33
|
+
assert_equal 'LMT', zones[0].name
|
34
|
+
|
35
|
+
assert_equal "-9999-01-01T00:00:00Z", JSON.parse(zones[0].to_json)['_from']
|
36
|
+
assert_equal "1900-09-30T21:39:37Z", JSON.parse(zones[0].to_json)['_to']
|
37
|
+
|
38
|
+
assert_equal -2185410023000, zones[1].start_date
|
39
|
+
assert_equal -933645600000, zones[1].end_date
|
40
|
+
assert !zones[1].dst
|
41
|
+
assert_equal 7_200, zones[1].offset
|
42
|
+
assert_equal 'EET', zones[1].name
|
43
|
+
|
44
|
+
assert_equal -933645600000, zones[2].start_date
|
45
|
+
assert_equal -857358000000, zones[2].end_date
|
46
|
+
assert zones[2].dst
|
47
|
+
assert_equal 10_800, zones[2].offset
|
48
|
+
assert_equal 'EET', zones[2].name
|
49
|
+
|
50
|
+
assert_equal -857358000000, zones[3].start_date
|
51
|
+
assert_equal -844300800000, zones[3].end_date
|
52
|
+
assert !zones[3].dst
|
53
|
+
assert_equal 7_200, zones[3].offset
|
54
|
+
assert_equal 'EET', zones[3].name
|
55
|
+
|
56
|
+
assert_equal -844300800000, zones[4].start_date
|
57
|
+
assert_equal -825822000000, zones[4].end_date
|
58
|
+
assert zones[4].dst
|
59
|
+
assert_equal 10_800, zones[4].offset
|
60
|
+
assert_equal 'EET', zones[4].name
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'properly parses Asia/Nicosia' do
|
64
|
+
Timezone::Parser.zones.clear
|
65
|
+
Timezone::Parser.rules.clear
|
66
|
+
|
67
|
+
Timezone::Parser.rule("Rule Cyprus 1975 only - Apr 13 0:00 1:00 S")
|
68
|
+
Timezone::Parser.rule("Rule Cyprus 1975 only - Oct 12 0:00 0 -")
|
69
|
+
Timezone::Parser.rule("Rule Cyprus 1976 only - May 15 0:00 1:00 S")
|
70
|
+
Timezone::Parser.rule("Rule Cyprus 1976 only - Oct 11 0:00 0 -")
|
71
|
+
Timezone::Parser.rule("Rule Cyprus 1977 1980 - Apr Sun>=1 0:00 1:00 S")
|
72
|
+
Timezone::Parser.rule("Rule Cyprus 1977 only - Sep 25 0:00 0 -")
|
73
|
+
Timezone::Parser.rule("Rule Cyprus 1978 only - Oct 2 0:00 0 -")
|
74
|
+
Timezone::Parser.rule("Rule Cyprus 1979 1997 - Sep lastSun 0:00 0 -")
|
75
|
+
Timezone::Parser.rule("Rule Cyprus 1981 1998 - Mar lastSun 0:00 1:00 S")
|
76
|
+
Timezone::Parser.rule("Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S")
|
77
|
+
Timezone::Parser.rule("Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -")
|
78
|
+
Timezone::Parser.rule("Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -")
|
79
|
+
|
80
|
+
Timezone::Parser.zone('Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14')
|
81
|
+
Timezone::Parser.zone(' 2:00 Cyprus EE%sT 1998 Sep')
|
82
|
+
Timezone::Parser.zone(' 2:00 EUAsia EE%sT')
|
83
|
+
|
84
|
+
|
85
|
+
zones = Timezone::Parser::Zone.generate('Asia/Nicosia')
|
86
|
+
|
87
|
+
assert zones[-2].dst
|
88
|
+
assert_equal 10_800, zones[-2].offset
|
89
|
+
assert_equal 2531955600000, zones[-2].start_date
|
90
|
+
assert_equal 2550704400000, zones[-2].end_date
|
91
|
+
assert_equal 'EEST', zones[-2].name
|
92
|
+
|
93
|
+
assert !zones.last.dst
|
94
|
+
assert_equal 7_200, zones.last.offset
|
95
|
+
assert_equal 2550704400000, zones.last.start_date
|
96
|
+
assert_equal 253402300799000, zones.last.end_date
|
97
|
+
assert_equal 'EET', zones.last.name
|
98
|
+
|
99
|
+
assert_equal 154, zones.count
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'timezone/parser/zone/until'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
describe Timezone::Parser::Zone::Until do
|
5
|
+
def parse(*args)
|
6
|
+
Timezone::Parser::Zone::Until.parse(*args)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'parses dates' do
|
10
|
+
assert_equal -2185401600000, parse('1900 Oct')
|
11
|
+
assert_equal -682646400000, parse('1948 May 15')
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'timezone/parser/zone'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
describe Timezone::Parser::Zone do
|
5
|
+
def setup
|
6
|
+
Timezone::Parser.rules.clear
|
7
|
+
Timezone::Parser.zones.clear
|
8
|
+
# This first rule is before the end date.
|
9
|
+
Timezone::Parser.rule("Rule Zion 1948 only - Jan 13 0:00 0:00 D")
|
10
|
+
# This second rule is after the end date.
|
11
|
+
Timezone::Parser.rule("Rule Zion 1949 only - Oct 12 0:00 0:00 D")
|
12
|
+
|
13
|
+
Timezone::Parser.zone('Zone Asia/Hebron 2:20:23 - LMT 1900 Oct')
|
14
|
+
Timezone::Parser.zone('2:00 Zion EET 1948 May 15')
|
15
|
+
Timezone::Parser.zone('2:00 EgyptAsia EE%sT 1967 Jun 5')
|
16
|
+
|
17
|
+
@zones = Timezone::Parser.zones['Asia/Hebron']
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'properly parses all zone names' do
|
21
|
+
assert_equal 3, Timezone::Parser.zones['Asia/Hebron'].count
|
22
|
+
assert Timezone::Parser.zones['Asia/Hebron'].all?{ |z| z.name == 'Asia/Hebron' }
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'parses offset' do
|
26
|
+
assert_equal [8423, 7_200, 7_200], @zones.map(&:offset)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'only selects rules within the entry timeline' do
|
30
|
+
assert_equal 1, @zones[1].rules.count
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'parses format' do
|
34
|
+
assert_equal ['LMT', 'EET', 'EE%sT'], @zones.map(&:format)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'parses end_date' do
|
38
|
+
assert_equal Time.utc(1900, 10, 1).to_i * 1_000, @zones[0].end_date
|
39
|
+
assert_equal Time.utc(1948, 5, 15).to_i * 1_000, @zones[1].end_date
|
40
|
+
assert_equal Time.utc(1967, 6, 5).to_i * 1_000, @zones[2].end_date
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'timezone/parser'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
describe Timezone::Parser do
|
5
|
+
it 'parses files with no errors' do
|
6
|
+
Timezone::Parser.parse('test/data/asia')
|
7
|
+
# File.open('data/Asia/Hebron.json', 'w') do |f|
|
8
|
+
# hash = { '_zone' => 'Asia/Hebron', 'zone' => Timezone::Parser::Zone.data['Asia/Hebron'].map(&:to_hash) }
|
9
|
+
# f.puts(JSON.pretty_generate(hash))
|
10
|
+
# end
|
11
|
+
end
|
12
|
+
end
|
data/test/timezone_test.rb
CHANGED
@@ -81,6 +81,45 @@ class TimezoneTest < Test::Unit::TestCase
|
|
81
81
|
assert_equal local.to_i, timezone.time(utc).to_i
|
82
82
|
end
|
83
83
|
|
84
|
+
# http://www.timeanddate.com/worldclock/clockchange.html?n=137&year=2011
|
85
|
+
def test_historical_time_change_in_la_forward
|
86
|
+
timezone = Timezone::Zone.new :zone => 'America/Los_Angeles'
|
87
|
+
local = Time.strptime('2011-03-13T01:59:59 UTC', '%Y-%m-%dT%H:%M:%S %Z')
|
88
|
+
utc = Time.strptime('2011-03-13T09:59:59 UTC', '%Y-%m-%dT%H:%M:%S %Z')
|
89
|
+
assert_equal local.to_i, timezone.time(utc).to_i
|
90
|
+
|
91
|
+
timezone = Timezone::Zone.new :zone => 'America/Los_Angeles'
|
92
|
+
local = Time.strptime('2011-03-13T03:00:00 UTC', '%Y-%m-%dT%H:%M:%S %Z')
|
93
|
+
utc = Time.strptime('2011-03-13T10:00:00 UTC', '%Y-%m-%dT%H:%M:%S %Z')
|
94
|
+
assert_equal local.to_i, timezone.time(utc).to_i
|
95
|
+
end
|
96
|
+
|
97
|
+
# http://www.timeanddate.com/worldclock/clockchange.html?n=137&year=2011
|
98
|
+
def test_historical_time_change_in_la_backward
|
99
|
+
timezone = Timezone::Zone.new :zone => 'America/Los_Angeles'
|
100
|
+
local = Time.strptime('2011-11-06T01:59:59 UTC', '%Y-%m-%dT%H:%M:%S %Z')
|
101
|
+
utc = Time.strptime('2011-11-06T08:59:59 UTC', '%Y-%m-%dT%H:%M:%S %Z')
|
102
|
+
assert_equal local.to_i, timezone.time(utc).to_i
|
103
|
+
|
104
|
+
timezone = Timezone::Zone.new :zone => 'America/Los_Angeles'
|
105
|
+
local = Time.strptime('2011-11-06T01:00:00 UTC', '%Y-%m-%dT%H:%M:%S %Z')
|
106
|
+
utc = Time.strptime('2011-11-06T09:00:00 UTC', '%Y-%m-%dT%H:%M:%S %Z')
|
107
|
+
assert_equal local.to_i, timezone.time(utc).to_i
|
108
|
+
end
|
109
|
+
|
110
|
+
# http://www.timeanddate.com/worldclock/clockchange.html?n=2364&year=1940
|
111
|
+
def test_historical_time_change_in_hebron
|
112
|
+
timezone = Timezone::Zone.new :zone => 'Asia/Hebron'
|
113
|
+
local = Time.strptime('1940-05-31T23:59:59 UTC', '%Y-%m-%dT%H:%M:%S %Z')
|
114
|
+
utc = Time.strptime('1940-05-31T21:59:59 UTC', '%Y-%m-%dT%H:%M:%S %Z')
|
115
|
+
assert_equal local.to_i, timezone.time(utc).to_i
|
116
|
+
|
117
|
+
timezone = Timezone::Zone.new :zone => 'Asia/Hebron'
|
118
|
+
local = Time.strptime('1940-06-01T01:00:00 UTC', '%Y-%m-%dT%H:%M:%S %Z')
|
119
|
+
utc = Time.strptime('1940-05-31T22:00:00 UTC', '%Y-%m-%dT%H:%M:%S %Z')
|
120
|
+
assert_equal local.to_i, timezone.time(utc).to_i
|
121
|
+
end
|
122
|
+
|
84
123
|
def test_loading_half_hour_timezone
|
85
124
|
timezone = Timezone::Zone.new :zone => 'Asia/Kathmandu'
|
86
125
|
utc = Time.utc(2011, 1, 4, 3, 51, 29)
|
@@ -136,11 +175,18 @@ class TimezoneTest < Test::Unit::TestCase
|
|
136
175
|
File.open(File.join(File.dirname(__FILE__),"data/Helsinki_rules_without_timestamps.json")) do |f|
|
137
176
|
rules = JSON.parse(f.read)
|
138
177
|
timezone = Timezone::Zone.new :zone => 'Europe/Helsinki'
|
139
|
-
|
178
|
+
# TODO [panthomakos] Resolve this using a stub.
|
179
|
+
timezone.instance_variable_set(:@rules, rules)
|
140
180
|
utc = Time.utc(2012, 3, 25, 0, 59, 59)
|
141
181
|
assert_equal timezone.utc_offset(utc), 7200
|
142
182
|
utc = Time.utc(2012, 3, 25, 1, 0, 0)
|
143
183
|
assert_equal timezone.utc_offset(utc), 10800
|
144
184
|
end
|
145
185
|
end
|
186
|
+
|
187
|
+
def test_active_support_timezone
|
188
|
+
timezone = Timezone::Zone.new(:zone => 'Australia/Adelaide')
|
189
|
+
assert_equal 'Australia/Adelaide', timezone.zone
|
190
|
+
assert_equal 'Adelaide', timezone.active_support_time_zone
|
191
|
+
end
|
146
192
|
end
|
data/timezone.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timezone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -32,17 +32,17 @@ dependencies:
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: '0'
|
37
|
+
version: '4.0'
|
38
38
|
type: :development
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
45
|
+
version: '4.0'
|
46
46
|
description: A simple way to get accurate current and historical timezone information
|
47
47
|
based on zone or latitude and longitude coordinates. This gem uses the tz database
|
48
48
|
(http://www.twinsun.com/tz/tz-link.htm) for historical timezone information. It
|
@@ -531,13 +531,30 @@ files:
|
|
531
531
|
- data/Pacific/Wallis.json
|
532
532
|
- data/WET.json
|
533
533
|
- lib/timezone.rb
|
534
|
+
- lib/timezone/active_support.rb
|
534
535
|
- lib/timezone/configure.rb
|
535
536
|
- lib/timezone/error.rb
|
536
|
-
- lib/timezone/
|
537
|
+
- lib/timezone/parser.rb
|
538
|
+
- lib/timezone/parser/data.rb
|
539
|
+
- lib/timezone/parser/link.rb
|
540
|
+
- lib/timezone/parser/rule.rb
|
541
|
+
- lib/timezone/parser/rule/entry.rb
|
542
|
+
- lib/timezone/parser/rule/on.rb
|
543
|
+
- lib/timezone/parser/rule/on_rules.rb
|
544
|
+
- lib/timezone/parser/zone.rb
|
545
|
+
- lib/timezone/parser/zone/data_generator.rb
|
546
|
+
- lib/timezone/parser/zone/entry.rb
|
547
|
+
- lib/timezone/parser/zone/until.rb
|
537
548
|
- lib/timezone/version.rb
|
538
549
|
- lib/timezone/zone.rb
|
539
550
|
- test/data/Helsinki_rules_without_timestamps.json
|
540
|
-
- test/
|
551
|
+
- test/data/asia
|
552
|
+
- test/timezone/parser/rule/on_rules_test.rb
|
553
|
+
- test/timezone/parser/rule_test.rb
|
554
|
+
- test/timezone/parser/zone/data_generator_test.rb
|
555
|
+
- test/timezone/parser/zone/until_test.rb
|
556
|
+
- test/timezone/parser/zone_test.rb
|
557
|
+
- test/timezone/parser_test.rb
|
541
558
|
- test/timezone_test.rb
|
542
559
|
- timezone.gemspec
|
543
560
|
homepage: http://github.com/panthomakos/timezone
|
@@ -564,9 +581,15 @@ rubyforge_project: timezone
|
|
564
581
|
rubygems_version: 1.8.23
|
565
582
|
signing_key:
|
566
583
|
specification_version: 3
|
567
|
-
summary: timezone-0.
|
584
|
+
summary: timezone-0.3.0
|
568
585
|
test_files:
|
569
586
|
- test/data/Helsinki_rules_without_timestamps.json
|
570
|
-
- test/
|
587
|
+
- test/data/asia
|
588
|
+
- test/timezone/parser/rule/on_rules_test.rb
|
589
|
+
- test/timezone/parser/rule_test.rb
|
590
|
+
- test/timezone/parser/zone/data_generator_test.rb
|
591
|
+
- test/timezone/parser/zone/until_test.rb
|
592
|
+
- test/timezone/parser/zone_test.rb
|
593
|
+
- test/timezone/parser_test.rb
|
571
594
|
- test/timezone_test.rb
|
572
595
|
has_rdoc:
|
data/lib/timezone/rule.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
module Timezone
|
2
|
-
@@rules = {}
|
3
|
-
def self.rules ; @@rules ; end
|
4
|
-
|
5
|
-
Rule = Struct.new(:name, :from, :to, :type, :month, :day, :time, :save, :letter) do
|
6
|
-
def initialize(name, *args)
|
7
|
-
super.tap do |rule|
|
8
|
-
Timezone.rules[name] ||= []
|
9
|
-
Timezone.rules[name] << self
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
# Converts hours and minutes to seconds.
|
14
|
-
#
|
15
|
-
# Example: 1:00 # => 3600
|
16
|
-
def offset
|
17
|
-
@offset ||= save
|
18
|
-
.split(':')
|
19
|
-
.reverse
|
20
|
-
.each_with_index
|
21
|
-
.map{ |number,index| number.to_i*(60**(index+1)) }
|
22
|
-
.reduce(&:+)
|
23
|
-
end
|
24
|
-
|
25
|
-
# Does this rule have daylight savings time?
|
26
|
-
def dst?
|
27
|
-
letter == 'D'
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
data/test/rule_test.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'timezone/rule'
|
2
|
-
require 'minitest/autorun'
|
3
|
-
|
4
|
-
describe Timezone::Rule do
|
5
|
-
before do
|
6
|
-
Timezone.rules.clear
|
7
|
-
@rule = Timezone::Rule.new('Zion')
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'adds itself to the rules' do
|
11
|
-
assert_equal ['Zion'], Timezone.rules.keys
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'adds multiple rules with the same name' do
|
15
|
-
Timezone::Rule.new('Zion')
|
16
|
-
assert_equal 2, Timezone.rules['Zion'].count
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '#offset' do
|
20
|
-
it 'properly calculates hours' do
|
21
|
-
@rule.save = '1:00'
|
22
|
-
assert_equal 3_600, @rule.offset
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'properly calculates minutes' do
|
26
|
-
@rule.save = '2:20'
|
27
|
-
assert_equal 8_400, @rule.offset
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe '#dst?' do
|
32
|
-
it 'knows standard time' do
|
33
|
-
@rule.letter = 'S'
|
34
|
-
assert !@rule.dst?
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'knows daylight savings time' do
|
38
|
-
@rule.letter = 'D'
|
39
|
-
assert @rule.dst?
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|