timezone 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|