tzinfo 1.2.11 → 2.0.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.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.yardopts +3 -0
  4. data/CHANGES.md +469 -431
  5. data/LICENSE +13 -13
  6. data/README.md +368 -114
  7. data/lib/tzinfo/country.rb +131 -129
  8. data/lib/tzinfo/country_timezone.rb +70 -112
  9. data/lib/tzinfo/data_source.rb +389 -144
  10. data/lib/tzinfo/data_sources/constant_offset_data_timezone_info.rb +56 -0
  11. data/lib/tzinfo/data_sources/country_info.rb +42 -0
  12. data/lib/tzinfo/data_sources/data_timezone_info.rb +91 -0
  13. data/lib/tzinfo/data_sources/linked_timezone_info.rb +33 -0
  14. data/lib/tzinfo/data_sources/ruby_data_source.rb +141 -0
  15. data/lib/tzinfo/data_sources/timezone_info.rb +47 -0
  16. data/lib/tzinfo/data_sources/transitions_data_timezone_info.rb +214 -0
  17. data/lib/tzinfo/data_sources/zoneinfo_data_source.rb +573 -0
  18. data/lib/tzinfo/data_sources/zoneinfo_reader.rb +284 -0
  19. data/lib/tzinfo/data_sources.rb +8 -0
  20. data/lib/tzinfo/data_timezone.rb +33 -47
  21. data/lib/tzinfo/datetime_with_offset.rb +153 -0
  22. data/lib/tzinfo/format1/country_definer.rb +17 -0
  23. data/lib/tzinfo/format1/country_index_definition.rb +64 -0
  24. data/lib/tzinfo/format1/timezone_definer.rb +64 -0
  25. data/lib/tzinfo/format1/timezone_definition.rb +39 -0
  26. data/lib/tzinfo/format1/timezone_index_definition.rb +77 -0
  27. data/lib/tzinfo/format1.rb +10 -0
  28. data/lib/tzinfo/format2/country_definer.rb +68 -0
  29. data/lib/tzinfo/format2/country_index_definer.rb +68 -0
  30. data/lib/tzinfo/format2/country_index_definition.rb +46 -0
  31. data/lib/tzinfo/format2/timezone_definer.rb +94 -0
  32. data/lib/tzinfo/format2/timezone_definition.rb +73 -0
  33. data/lib/tzinfo/format2/timezone_index_definer.rb +45 -0
  34. data/lib/tzinfo/format2/timezone_index_definition.rb +55 -0
  35. data/lib/tzinfo/format2.rb +10 -0
  36. data/lib/tzinfo/info_timezone.rb +26 -21
  37. data/lib/tzinfo/linked_timezone.rb +33 -52
  38. data/lib/tzinfo/offset_timezone_period.rb +42 -0
  39. data/lib/tzinfo/string_deduper.rb +118 -0
  40. data/lib/tzinfo/time_with_offset.rb +128 -0
  41. data/lib/tzinfo/timestamp.rb +548 -0
  42. data/lib/tzinfo/timestamp_with_offset.rb +85 -0
  43. data/lib/tzinfo/timezone.rb +979 -502
  44. data/lib/tzinfo/timezone_offset.rb +84 -74
  45. data/lib/tzinfo/timezone_period.rb +151 -217
  46. data/lib/tzinfo/timezone_proxy.rb +70 -79
  47. data/lib/tzinfo/timezone_transition.rb +77 -109
  48. data/lib/tzinfo/transitions_timezone_period.rb +63 -0
  49. data/lib/tzinfo/version.rb +7 -0
  50. data/lib/tzinfo/with_offset.rb +61 -0
  51. data/lib/tzinfo.rb +60 -40
  52. data.tar.gz.sig +0 -0
  53. metadata +51 -115
  54. metadata.gz.sig +2 -3
  55. data/Rakefile +0 -107
  56. data/lib/tzinfo/annual_rules.rb +0 -51
  57. data/lib/tzinfo/country_index_definition.rb +0 -31
  58. data/lib/tzinfo/country_info.rb +0 -42
  59. data/lib/tzinfo/data_timezone_info.rb +0 -55
  60. data/lib/tzinfo/linked_timezone_info.rb +0 -26
  61. data/lib/tzinfo/offset_rationals.rb +0 -77
  62. data/lib/tzinfo/posix_time_zone_parser.rb +0 -136
  63. data/lib/tzinfo/ruby_core_support.rb +0 -176
  64. data/lib/tzinfo/ruby_country_info.rb +0 -74
  65. data/lib/tzinfo/ruby_data_source.rb +0 -136
  66. data/lib/tzinfo/time_or_datetime.rb +0 -351
  67. data/lib/tzinfo/timezone_definition.rb +0 -36
  68. data/lib/tzinfo/timezone_index_definition.rb +0 -54
  69. data/lib/tzinfo/timezone_info.rb +0 -30
  70. data/lib/tzinfo/timezone_transition_definition.rb +0 -104
  71. data/lib/tzinfo/transition_data_timezone_info.rb +0 -274
  72. data/lib/tzinfo/transition_rule.rb +0 -325
  73. data/lib/tzinfo/zoneinfo_country_info.rb +0 -37
  74. data/lib/tzinfo/zoneinfo_data_source.rb +0 -504
  75. data/lib/tzinfo/zoneinfo_timezone_info.rb +0 -516
  76. data/test/assets/payload.rb +0 -1
  77. data/test/tc_annual_rules.rb +0 -95
  78. data/test/tc_country.rb +0 -240
  79. data/test/tc_country_index_definition.rb +0 -69
  80. data/test/tc_country_info.rb +0 -16
  81. data/test/tc_country_timezone.rb +0 -173
  82. data/test/tc_data_source.rb +0 -218
  83. data/test/tc_data_timezone.rb +0 -99
  84. data/test/tc_data_timezone_info.rb +0 -18
  85. data/test/tc_info_timezone.rb +0 -34
  86. data/test/tc_linked_timezone.rb +0 -155
  87. data/test/tc_linked_timezone_info.rb +0 -23
  88. data/test/tc_offset_rationals.rb +0 -23
  89. data/test/tc_posix_time_zone_parser.rb +0 -261
  90. data/test/tc_ruby_core_support.rb +0 -168
  91. data/test/tc_ruby_country_info.rb +0 -110
  92. data/test/tc_ruby_data_source.rb +0 -175
  93. data/test/tc_time_or_datetime.rb +0 -674
  94. data/test/tc_timezone.rb +0 -1361
  95. data/test/tc_timezone_definition.rb +0 -113
  96. data/test/tc_timezone_index_definition.rb +0 -73
  97. data/test/tc_timezone_info.rb +0 -11
  98. data/test/tc_timezone_london.rb +0 -143
  99. data/test/tc_timezone_melbourne.rb +0 -142
  100. data/test/tc_timezone_new_york.rb +0 -142
  101. data/test/tc_timezone_offset.rb +0 -126
  102. data/test/tc_timezone_period.rb +0 -555
  103. data/test/tc_timezone_proxy.rb +0 -136
  104. data/test/tc_timezone_transition.rb +0 -366
  105. data/test/tc_timezone_transition_definition.rb +0 -295
  106. data/test/tc_timezone_utc.rb +0 -27
  107. data/test/tc_transition_data_timezone_info.rb +0 -433
  108. data/test/tc_transition_rule.rb +0 -663
  109. data/test/tc_zoneinfo_country_info.rb +0 -78
  110. data/test/tc_zoneinfo_data_source.rb +0 -1226
  111. data/test/tc_zoneinfo_timezone_info.rb +0 -2149
  112. data/test/test_utils.rb +0 -214
  113. data/test/ts_all.rb +0 -7
  114. data/test/ts_all_ruby.rb +0 -5
  115. data/test/ts_all_zoneinfo.rb +0 -9
  116. data/test/tzinfo-data/tzinfo/data/definitions/America/Argentina/Buenos_Aires.rb +0 -89
  117. data/test/tzinfo-data/tzinfo/data/definitions/America/New_York.rb +0 -327
  118. data/test/tzinfo-data/tzinfo/data/definitions/Australia/Melbourne.rb +0 -230
  119. data/test/tzinfo-data/tzinfo/data/definitions/EST.rb +0 -19
  120. data/test/tzinfo-data/tzinfo/data/definitions/Etc/GMT__m__1.rb +0 -21
  121. data/test/tzinfo-data/tzinfo/data/definitions/Etc/GMT__p__1.rb +0 -21
  122. data/test/tzinfo-data/tzinfo/data/definitions/Etc/UTC.rb +0 -21
  123. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Amsterdam.rb +0 -273
  124. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Andorra.rb +0 -198
  125. data/test/tzinfo-data/tzinfo/data/definitions/Europe/London.rb +0 -333
  126. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Paris.rb +0 -277
  127. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Prague.rb +0 -235
  128. data/test/tzinfo-data/tzinfo/data/definitions/UTC.rb +0 -16
  129. data/test/tzinfo-data/tzinfo/data/indexes/countries.rb +0 -940
  130. data/test/tzinfo-data/tzinfo/data/indexes/timezones.rb +0 -609
  131. data/test/tzinfo-data/tzinfo/data/version.rb +0 -20
  132. data/test/tzinfo-data/tzinfo/data.rb +0 -8
  133. data/test/zoneinfo/America/Argentina/Buenos_Aires +0 -0
  134. data/test/zoneinfo/America/New_York +0 -0
  135. data/test/zoneinfo/Australia/Melbourne +0 -0
  136. data/test/zoneinfo/EST +0 -0
  137. data/test/zoneinfo/Etc/UTC +0 -0
  138. data/test/zoneinfo/Europe/Amsterdam +0 -0
  139. data/test/zoneinfo/Europe/Andorra +0 -0
  140. data/test/zoneinfo/Europe/London +0 -0
  141. data/test/zoneinfo/Europe/Paris +0 -0
  142. data/test/zoneinfo/Europe/Prague +0 -0
  143. data/test/zoneinfo/Factory +0 -0
  144. data/test/zoneinfo/iso3166.tab +0 -274
  145. data/test/zoneinfo/leapseconds +0 -78
  146. data/test/zoneinfo/posix/Europe/London +0 -0
  147. data/test/zoneinfo/posixrules +0 -0
  148. data/test/zoneinfo/right/Europe/London +0 -0
  149. data/test/zoneinfo/zone.tab +0 -452
  150. data/test/zoneinfo/zone1970.tab +0 -384
  151. data/tzinfo.gemspec +0 -21
@@ -1,175 +0,0 @@
1
- require File.join(File.expand_path(File.dirname(__FILE__)), 'test_utils')
2
-
3
- include TZInfo
4
-
5
- class TCRubyDataSource < Minitest::Test
6
- def setup
7
- @data_source = RubyDataSource.new
8
- end
9
-
10
- def test_initialize_not_found
11
- # A failure to load tzinfo/data in initialize will not cause an exception.
12
- # Attempts to load data files will subsequently fail.
13
- code = <<-EOF
14
- begin
15
- ds = TZInfo::RubyDataSource.new
16
- puts 'Initialized'
17
- ds.load_timezone_info('Europe/London')
18
- rescue Exception => e
19
- puts e.class
20
- end
21
- EOF
22
-
23
- assert_sub_process_returns(['Initialized', 'TZInfo::InvalidTimezoneIdentifier'], code)
24
- end
25
-
26
- def test_load_timezone_info_data
27
- info = @data_source.load_timezone_info('Europe/London')
28
- assert_kind_of(DataTimezoneInfo, info)
29
- assert_equal('Europe/London', info.identifier)
30
- end
31
-
32
- def test_load_timezone_info_linked
33
- info = @data_source.load_timezone_info('UTC')
34
- assert_kind_of(LinkedTimezoneInfo, info)
35
- assert_equal('UTC', info.identifier)
36
- assert_equal('Etc/UTC', info.link_to_identifier)
37
- end
38
-
39
- def test_load_timezone_info_does_not_exist
40
- assert_raises(InvalidTimezoneIdentifier) do
41
- @data_source.load_timezone_info('Nowhere/Special')
42
- end
43
- end
44
-
45
- def test_load_timezone_info_invalid
46
- assert_raises(InvalidTimezoneIdentifier) do
47
- @data_source.load_timezone_info('../definitions/UTC')
48
- end
49
- end
50
-
51
- def test_load_timezone_info_directory_traversal
52
- test_data_depth = TZINFO_TEST_DATA_DIR.scan('/').size
53
- payload_path = File.join(TESTS_DIR, 'assets', 'payload')
54
- assert_raises(InvalidTimezoneIdentifier) { Timezone.get("foo\n#{'/..' * (test_data_depth + 4)}#{payload_path}") }
55
- end
56
-
57
- def test_load_timezone_info_nil
58
- assert_raises(InvalidTimezoneIdentifier) do
59
- @data_source.load_timezone_info(nil)
60
- end
61
- end
62
-
63
- def test_load_timezone_info_case
64
- assert_raises(InvalidTimezoneIdentifier) do
65
- @data_source.load_timezone_info('europe/london')
66
- end
67
- end
68
-
69
- def test_load_timezone_info_plus
70
- info = @data_source.load_timezone_info('Etc/GMT+1')
71
- assert_equal('Etc/GMT+1', info.identifier)
72
- end
73
-
74
- def test_load_timezone_info_minus
75
- info = @data_source.load_timezone_info('Etc/GMT-1')
76
- assert_equal('Etc/GMT-1', info.identifier)
77
- end
78
-
79
- def test_load_timezone_info_tainted
80
- skip_if_taint_is_undefined_or_no_op
81
- skip_if_has_bug_14060
82
-
83
- safe_test(:unavailable => :skip) do
84
- identifier = 'Europe/Amsterdam'.dup.taint
85
- assert(identifier.tainted?)
86
- info = @data_source.load_timezone_info(identifier)
87
- assert_equal('Europe/Amsterdam', info.identifier)
88
- assert(identifier.tainted?)
89
- end
90
- end
91
-
92
- def test_load_timezone_info_tainted_and_frozen
93
- skip_if_taint_is_undefined_or_no_op
94
- skip_if_has_bug_14060
95
-
96
- safe_test do
97
- info = @data_source.load_timezone_info('Europe/Amsterdam'.dup.taint.freeze)
98
- assert_equal('Europe/Amsterdam', info.identifier)
99
- end
100
- end
101
-
102
- def test_timezone_identifiers
103
- all = @data_source.timezone_identifiers
104
- assert_equal(TZInfo::Data::Indexes::Timezones.timezones, all)
105
- assert_equal(true, all.frozen?)
106
- end
107
-
108
- def test_data_timezone_identifiers
109
- all_data = @data_source.data_timezone_identifiers
110
- assert_equal(TZInfo::Data::Indexes::Timezones.data_timezones, all_data)
111
- assert_equal(true, all_data.frozen?)
112
- end
113
-
114
- def test_linked_timezone_identifiers
115
- all_linked = @data_source.linked_timezone_identifiers
116
- assert_equal(TZInfo::Data::Indexes::Timezones.linked_timezones, all_linked)
117
- assert_equal(true, all_linked.frozen?)
118
- end
119
-
120
- def test_load_country_info
121
- info = @data_source.load_country_info('GB')
122
- assert_equal('GB', info.code)
123
- end
124
-
125
- def test_load_country_info_not_exist
126
- assert_raises(InvalidCountryCode) do
127
- @data_source.load_country_info('ZZ')
128
- end
129
- end
130
-
131
- def test_load_country_info_invalid
132
- assert_raises(InvalidCountryCode) do
133
- @data_source.load_country_info('../Countries/GB')
134
- end
135
- end
136
-
137
- def test_load_country_info_nil
138
- assert_raises(InvalidCountryCode) do
139
- @data_source.load_country_info(nil)
140
- end
141
- end
142
-
143
- def test_load_country_info_case
144
- assert_raises(InvalidCountryCode) do
145
- @data_source.load_country_info('gb')
146
- end
147
- end
148
-
149
- def test_load_country_info_tainted
150
- skip_if_taint_is_undefined_or_no_op
151
-
152
- safe_test(:unavailable => :skip) do
153
- code = 'NL'.dup.taint
154
- assert(code.tainted?)
155
- info = @data_source.load_country_info(code)
156
- assert_equal('NL', info.code)
157
- assert(code.tainted?)
158
- end
159
- end
160
-
161
- def test_load_country_info_tainted_and_frozen
162
- skip_if_taint_is_undefined_or_no_op
163
-
164
- safe_test do
165
- info = @data_source.load_country_info('NL'.dup.taint.freeze)
166
- assert_equal('NL', info.code)
167
- end
168
- end
169
-
170
- def test_country_codes
171
- codes = @data_source.country_codes
172
- assert_equal(TZInfo::Data::Indexes::Countries.countries.keys, codes)
173
- assert_equal(true, codes.frozen?)
174
- end
175
- end