tzinfo 0.3.62 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of tzinfo might be problematic. Click here for more details.

Files changed (706) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +25 -158
  3. data/LICENSE +1 -1
  4. data/README +89 -55
  5. data/Rakefile +87 -282
  6. data/lib/tzinfo/country.rb +28 -34
  7. data/lib/tzinfo/country_index_definition.rb +2 -7
  8. data/lib/tzinfo/country_info.rb +20 -44
  9. data/lib/tzinfo/country_timezone.rb +1 -1
  10. data/lib/tzinfo/data_source.rb +182 -0
  11. data/lib/tzinfo/data_timezone.rb +1 -3
  12. data/lib/tzinfo/data_timezone_info.rb +11 -190
  13. data/lib/tzinfo/info_timezone.rb +1 -3
  14. data/lib/tzinfo/linked_timezone.rb +1 -4
  15. data/lib/tzinfo/linked_timezone_info.rb +9 -5
  16. data/lib/tzinfo/offset_rationals.rb +2 -4
  17. data/lib/tzinfo/ruby_core_support.rb +152 -82
  18. data/lib/tzinfo/ruby_country_info.rb +78 -0
  19. data/lib/tzinfo/ruby_data_source.rb +153 -0
  20. data/lib/tzinfo/time_or_datetime.rb +83 -52
  21. data/lib/tzinfo/timezone.rb +27 -69
  22. data/lib/tzinfo/timezone_definition.rb +4 -7
  23. data/lib/tzinfo/timezone_index_definition.rb +1 -6
  24. data/lib/tzinfo/timezone_info.rb +8 -4
  25. data/lib/tzinfo/timezone_offset_info.rb +1 -3
  26. data/lib/tzinfo/timezone_period.rb +31 -6
  27. data/lib/tzinfo/timezone_transition_info.rb +42 -12
  28. data/lib/tzinfo/transition_data_timezone_info.rb +223 -0
  29. data/lib/tzinfo/zoneinfo_country_info.rb +50 -0
  30. data/lib/tzinfo/zoneinfo_data_source.rb +297 -0
  31. data/lib/tzinfo/zoneinfo_timezone_info.rb +226 -0
  32. data/lib/tzinfo.rb +9 -7
  33. data/test/tc_country.rb +65 -9
  34. data/test/tc_country_index_definition.rb +27 -6
  35. data/test/tc_country_info.rb +23 -57
  36. data/test/tc_country_timezone.rb +23 -3
  37. data/test/tc_data_source.rb +194 -0
  38. data/test/tc_data_timezone.rb +23 -3
  39. data/test/tc_data_timezone_info.rb +30 -272
  40. data/test/tc_info_timezone.rb +23 -3
  41. data/test/tc_linked_timezone.rb +23 -4
  42. data/test/tc_linked_timezone_info.rb +30 -3
  43. data/test/tc_offset_rationals.rb +23 -3
  44. data/test/tc_ruby_core_support.rb +117 -31
  45. data/test/tc_ruby_country_info.rb +102 -0
  46. data/test/tc_ruby_data_source.rb +145 -0
  47. data/test/tc_time_or_datetime.rb +222 -19
  48. data/test/tc_timezone.rb +187 -57
  49. data/test/tc_timezone_definition.rb +26 -6
  50. data/test/tc_timezone_index_definition.rb +23 -3
  51. data/test/tc_timezone_info.rb +23 -3
  52. data/test/tc_timezone_london.rb +89 -56
  53. data/test/tc_timezone_melbourne.rb +88 -62
  54. data/test/tc_timezone_new_york.rb +73 -47
  55. data/test/tc_timezone_offset_info.rb +36 -4
  56. data/test/tc_timezone_period.rb +60 -22
  57. data/test/tc_timezone_proxy.rb +24 -4
  58. data/test/tc_timezone_transition_info.rb +305 -28
  59. data/test/tc_timezone_utc.rb +24 -4
  60. data/test/tc_transition_data_timezone_info.rb +345 -0
  61. data/test/tc_zoneinfo_country_info.rb +86 -0
  62. data/test/tc_zoneinfo_data_source.rb +601 -0
  63. data/test/tc_zoneinfo_timezone_info.rb +663 -0
  64. data/test/test_utils.rb +116 -21
  65. data/test/ts_all.rb +24 -4
  66. data/test/ts_all_ruby.rb +27 -0
  67. data/test/ts_all_zoneinfo.rb +29 -0
  68. data/test/tzinfo-data/tzinfo/data/definitions/America/Argentina/Buenos_Aires.rb +89 -0
  69. data/test/tzinfo-data/tzinfo/data/definitions/America/New_York.rb +313 -0
  70. data/test/tzinfo-data/tzinfo/data/definitions/Australia/Melbourne.rb +216 -0
  71. data/test/tzinfo-data/tzinfo/data/definitions/EST.rb +19 -0
  72. data/test/tzinfo-data/tzinfo/data/definitions/Etc/GMT__m__1.rb +21 -0
  73. data/test/tzinfo-data/tzinfo/data/definitions/Etc/GMT__p__1.rb +21 -0
  74. data/test/tzinfo-data/tzinfo/data/definitions/Etc/UTC.rb +21 -0
  75. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Amsterdam.rb +259 -0
  76. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Andorra.rb +184 -0
  77. data/test/tzinfo-data/tzinfo/data/definitions/Europe/London.rb +319 -0
  78. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Paris.rb +263 -0
  79. data/test/tzinfo-data/tzinfo/data/definitions/Europe/Prague.rb +218 -0
  80. data/test/tzinfo-data/tzinfo/data/definitions/UTC.rb +16 -0
  81. data/test/tzinfo-data/tzinfo/data/indexes/countries.rb +929 -0
  82. data/test/tzinfo-data/tzinfo/data/indexes/timezones.rb +599 -0
  83. data/test/tzinfo-data/tzinfo/data/version.rb +36 -0
  84. data/test/tzinfo-data/tzinfo/data.rb +23 -0
  85. data/test/zoneinfo/America/Argentina/Buenos_Aires +0 -0
  86. data/test/zoneinfo/America/New_York +0 -0
  87. data/test/zoneinfo/Australia/Melbourne +0 -0
  88. data/test/zoneinfo/EST +0 -0
  89. data/test/zoneinfo/Etc/UTC +0 -0
  90. data/test/zoneinfo/Europe/Amsterdam +0 -0
  91. data/test/zoneinfo/Europe/Andorra +0 -0
  92. data/test/zoneinfo/Europe/London +0 -0
  93. data/test/zoneinfo/Europe/Paris +0 -0
  94. data/test/zoneinfo/Europe/Prague +0 -0
  95. data/test/zoneinfo/Factory +0 -0
  96. data/test/zoneinfo/UTC +0 -0
  97. data/test/zoneinfo/iso3166.tab +276 -0
  98. data/test/zoneinfo/localtime +0 -0
  99. data/test/zoneinfo/posix/Europe/London +0 -0
  100. data/test/zoneinfo/posixrules +0 -0
  101. data/test/zoneinfo/right/Europe/London +0 -0
  102. data/test/zoneinfo/zone.tab +444 -0
  103. metadata +134 -716
  104. data/.yardopts +0 -8
  105. data/lib/tzinfo/definitions/Africa/Abidjan.rb +0 -18
  106. data/lib/tzinfo/definitions/Africa/Accra.rb +0 -13
  107. data/lib/tzinfo/definitions/Africa/Addis_Ababa.rb +0 -13
  108. data/lib/tzinfo/definitions/Africa/Algiers.rb +0 -55
  109. data/lib/tzinfo/definitions/Africa/Asmara.rb +0 -13
  110. data/lib/tzinfo/definitions/Africa/Asmera.rb +0 -13
  111. data/lib/tzinfo/definitions/Africa/Bamako.rb +0 -13
  112. data/lib/tzinfo/definitions/Africa/Bangui.rb +0 -13
  113. data/lib/tzinfo/definitions/Africa/Banjul.rb +0 -13
  114. data/lib/tzinfo/definitions/Africa/Bissau.rb +0 -20
  115. data/lib/tzinfo/definitions/Africa/Blantyre.rb +0 -13
  116. data/lib/tzinfo/definitions/Africa/Brazzaville.rb +0 -13
  117. data/lib/tzinfo/definitions/Africa/Bujumbura.rb +0 -13
  118. data/lib/tzinfo/definitions/Africa/Cairo.rb +0 -247
  119. data/lib/tzinfo/definitions/Africa/Casablanca.rb +0 -189
  120. data/lib/tzinfo/definitions/Africa/Ceuta.rb +0 -218
  121. data/lib/tzinfo/definitions/Africa/Conakry.rb +0 -13
  122. data/lib/tzinfo/definitions/Africa/Dakar.rb +0 -13
  123. data/lib/tzinfo/definitions/Africa/Dar_es_Salaam.rb +0 -13
  124. data/lib/tzinfo/definitions/Africa/Djibouti.rb +0 -13
  125. data/lib/tzinfo/definitions/Africa/Douala.rb +0 -13
  126. data/lib/tzinfo/definitions/Africa/El_Aaiun.rb +0 -179
  127. data/lib/tzinfo/definitions/Africa/Freetown.rb +0 -13
  128. data/lib/tzinfo/definitions/Africa/Gaborone.rb +0 -13
  129. data/lib/tzinfo/definitions/Africa/Harare.rb +0 -13
  130. data/lib/tzinfo/definitions/Africa/Johannesburg.rb +0 -25
  131. data/lib/tzinfo/definitions/Africa/Juba.rb +0 -54
  132. data/lib/tzinfo/definitions/Africa/Kampala.rb +0 -13
  133. data/lib/tzinfo/definitions/Africa/Khartoum.rb +0 -54
  134. data/lib/tzinfo/definitions/Africa/Kigali.rb +0 -13
  135. data/lib/tzinfo/definitions/Africa/Kinshasa.rb +0 -13
  136. data/lib/tzinfo/definitions/Africa/Lagos.rb +0 -23
  137. data/lib/tzinfo/definitions/Africa/Libreville.rb +0 -13
  138. data/lib/tzinfo/definitions/Africa/Lome.rb +0 -13
  139. data/lib/tzinfo/definitions/Africa/Luanda.rb +0 -13
  140. data/lib/tzinfo/definitions/Africa/Lubumbashi.rb +0 -13
  141. data/lib/tzinfo/definitions/Africa/Lusaka.rb +0 -13
  142. data/lib/tzinfo/definitions/Africa/Malabo.rb +0 -13
  143. data/lib/tzinfo/definitions/Africa/Maputo.rb +0 -18
  144. data/lib/tzinfo/definitions/Africa/Maseru.rb +0 -13
  145. data/lib/tzinfo/definitions/Africa/Mbabane.rb +0 -13
  146. data/lib/tzinfo/definitions/Africa/Mogadishu.rb +0 -13
  147. data/lib/tzinfo/definitions/Africa/Monrovia.rb +0 -22
  148. data/lib/tzinfo/definitions/Africa/Nairobi.rb +0 -24
  149. data/lib/tzinfo/definitions/Africa/Ndjamena.rb +0 -21
  150. data/lib/tzinfo/definitions/Africa/Niamey.rb +0 -13
  151. data/lib/tzinfo/definitions/Africa/Nouakchott.rb +0 -13
  152. data/lib/tzinfo/definitions/Africa/Ouagadougou.rb +0 -13
  153. data/lib/tzinfo/definitions/Africa/Porto__m__Novo.rb +0 -13
  154. data/lib/tzinfo/definitions/Africa/Sao_Tome.rb +0 -23
  155. data/lib/tzinfo/definitions/Africa/Timbuktu.rb +0 -13
  156. data/lib/tzinfo/definitions/Africa/Tripoli.rb +0 -51
  157. data/lib/tzinfo/definitions/Africa/Tunis.rb +0 -53
  158. data/lib/tzinfo/definitions/Africa/Windhoek.rb +0 -74
  159. data/lib/tzinfo/definitions/America/Adak.rb +0 -242
  160. data/lib/tzinfo/definitions/America/Anchorage.rb +0 -242
  161. data/lib/tzinfo/definitions/America/Anguilla.rb +0 -13
  162. data/lib/tzinfo/definitions/America/Antigua.rb +0 -13
  163. data/lib/tzinfo/definitions/America/Araguaina.rb +0 -69
  164. data/lib/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +0 -84
  165. data/lib/tzinfo/definitions/America/Argentina/Catamarca.rb +0 -84
  166. data/lib/tzinfo/definitions/America/Argentina/ComodRivadavia.rb +0 -15
  167. data/lib/tzinfo/definitions/America/Argentina/Cordoba.rb +0 -84
  168. data/lib/tzinfo/definitions/America/Argentina/Jujuy.rb +0 -82
  169. data/lib/tzinfo/definitions/America/Argentina/La_Rioja.rb +0 -85
  170. data/lib/tzinfo/definitions/America/Argentina/Mendoza.rb +0 -84
  171. data/lib/tzinfo/definitions/America/Argentina/Rio_Gallegos.rb +0 -84
  172. data/lib/tzinfo/definitions/America/Argentina/Salta.rb +0 -82
  173. data/lib/tzinfo/definitions/America/Argentina/San_Juan.rb +0 -85
  174. data/lib/tzinfo/definitions/America/Argentina/San_Luis.rb +0 -85
  175. data/lib/tzinfo/definitions/America/Argentina/Tucuman.rb +0 -86
  176. data/lib/tzinfo/definitions/America/Argentina/Ushuaia.rb +0 -84
  177. data/lib/tzinfo/definitions/America/Aruba.rb +0 -13
  178. data/lib/tzinfo/definitions/America/Asuncion.rb +0 -220
  179. data/lib/tzinfo/definitions/America/Atikokan.rb +0 -13
  180. data/lib/tzinfo/definitions/America/Atka.rb +0 -13
  181. data/lib/tzinfo/definitions/America/Bahia.rb +0 -79
  182. data/lib/tzinfo/definitions/America/Bahia_Banderas.rb +0 -84
  183. data/lib/tzinfo/definitions/America/Barbados.rb +0 -34
  184. data/lib/tzinfo/definitions/America/Belem.rb +0 -47
  185. data/lib/tzinfo/definitions/America/Belize.rb +0 -119
  186. data/lib/tzinfo/definitions/America/Blanc__m__Sablon.rb +0 -13
  187. data/lib/tzinfo/definitions/America/Boa_Vista.rb +0 -51
  188. data/lib/tzinfo/definitions/America/Bogota.rb +0 -23
  189. data/lib/tzinfo/definitions/America/Boise.rb +0 -245
  190. data/lib/tzinfo/definitions/America/Buenos_Aires.rb +0 -13
  191. data/lib/tzinfo/definitions/America/Cambridge_Bay.rb +0 -232
  192. data/lib/tzinfo/definitions/America/Campo_Grande.rb +0 -109
  193. data/lib/tzinfo/definitions/America/Cancun.rb +0 -62
  194. data/lib/tzinfo/definitions/America/Caracas.rb +0 -24
  195. data/lib/tzinfo/definitions/America/Catamarca.rb +0 -13
  196. data/lib/tzinfo/definitions/America/Cayenne.rb +0 -20
  197. data/lib/tzinfo/definitions/America/Cayman.rb +0 -13
  198. data/lib/tzinfo/definitions/America/Chicago.rb +0 -329
  199. data/lib/tzinfo/definitions/America/Chihuahua.rb +0 -80
  200. data/lib/tzinfo/definitions/America/Ciudad_Juarez.rb +0 -183
  201. data/lib/tzinfo/definitions/America/Coral_Harbour.rb +0 -13
  202. data/lib/tzinfo/definitions/America/Cordoba.rb +0 -13
  203. data/lib/tzinfo/definitions/America/Costa_Rica.rb +0 -29
  204. data/lib/tzinfo/definitions/America/Creston.rb +0 -13
  205. data/lib/tzinfo/definitions/America/Cuiaba.rb +0 -107
  206. data/lib/tzinfo/definitions/America/Curacao.rb +0 -13
  207. data/lib/tzinfo/definitions/America/Danmarkshavn.rb +0 -53
  208. data/lib/tzinfo/definitions/America/Dawson.rb +0 -117
  209. data/lib/tzinfo/definitions/America/Dawson_Creek.rb +0 -79
  210. data/lib/tzinfo/definitions/America/Denver.rb +0 -250
  211. data/lib/tzinfo/definitions/America/Detroit.rb +0 -234
  212. data/lib/tzinfo/definitions/America/Dominica.rb +0 -13
  213. data/lib/tzinfo/definitions/America/Edmonton.rb +0 -242
  214. data/lib/tzinfo/definitions/America/Eirunepe.rb +0 -52
  215. data/lib/tzinfo/definitions/America/El_Salvador.rb +0 -23
  216. data/lib/tzinfo/definitions/America/Ensenada.rb +0 -13
  217. data/lib/tzinfo/definitions/America/Fort_Nelson.rb +0 -164
  218. data/lib/tzinfo/definitions/America/Fort_Wayne.rb +0 -13
  219. data/lib/tzinfo/definitions/America/Fortaleza.rb +0 -57
  220. data/lib/tzinfo/definitions/America/Glace_Bay.rb +0 -232
  221. data/lib/tzinfo/definitions/America/Godthab.rb +0 -13
  222. data/lib/tzinfo/definitions/America/Goose_Bay.rb +0 -301
  223. data/lib/tzinfo/definitions/America/Grand_Turk.rb +0 -207
  224. data/lib/tzinfo/definitions/America/Grenada.rb +0 -13
  225. data/lib/tzinfo/definitions/America/Guadeloupe.rb +0 -13
  226. data/lib/tzinfo/definitions/America/Guatemala.rb +0 -27
  227. data/lib/tzinfo/definitions/America/Guayaquil.rb +0 -23
  228. data/lib/tzinfo/definitions/America/Guyana.rb +0 -23
  229. data/lib/tzinfo/definitions/America/Halifax.rb +0 -320
  230. data/lib/tzinfo/definitions/America/Havana.rb +0 -247
  231. data/lib/tzinfo/definitions/America/Hermosillo.rb +0 -35
  232. data/lib/tzinfo/definitions/America/Indiana/Indianapolis.rb +0 -195
  233. data/lib/tzinfo/definitions/America/Indiana/Knox.rb +0 -249
  234. data/lib/tzinfo/definitions/America/Indiana/Marengo.rb +0 -199
  235. data/lib/tzinfo/definitions/America/Indiana/Petersburg.rb +0 -212
  236. data/lib/tzinfo/definitions/America/Indiana/Tell_City.rb +0 -194
  237. data/lib/tzinfo/definitions/America/Indiana/Vevay.rb +0 -177
  238. data/lib/tzinfo/definitions/America/Indiana/Vincennes.rb +0 -197
  239. data/lib/tzinfo/definitions/America/Indiana/Winamac.rb +0 -203
  240. data/lib/tzinfo/definitions/America/Indianapolis.rb +0 -13
  241. data/lib/tzinfo/definitions/America/Inuvik.rb +0 -225
  242. data/lib/tzinfo/definitions/America/Iqaluit.rb +0 -229
  243. data/lib/tzinfo/definitions/America/Jamaica.rb +0 -41
  244. data/lib/tzinfo/definitions/America/Jujuy.rb +0 -13
  245. data/lib/tzinfo/definitions/America/Juneau.rb +0 -241
  246. data/lib/tzinfo/definitions/America/Kentucky/Louisville.rb +0 -274
  247. data/lib/tzinfo/definitions/America/Kentucky/Monticello.rb +0 -244
  248. data/lib/tzinfo/definitions/America/Knox_IN.rb +0 -13
  249. data/lib/tzinfo/definitions/America/Kralendijk.rb +0 -13
  250. data/lib/tzinfo/definitions/America/La_Paz.rb +0 -22
  251. data/lib/tzinfo/definitions/America/Lima.rb +0 -35
  252. data/lib/tzinfo/definitions/America/Los_Angeles.rb +0 -278
  253. data/lib/tzinfo/definitions/America/Louisville.rb +0 -13
  254. data/lib/tzinfo/definitions/America/Lower_Princes.rb +0 -13
  255. data/lib/tzinfo/definitions/America/Maceio.rb +0 -59
  256. data/lib/tzinfo/definitions/America/Managua.rb +0 -36
  257. data/lib/tzinfo/definitions/America/Manaus.rb +0 -49
  258. data/lib/tzinfo/definitions/America/Marigot.rb +0 -13
  259. data/lib/tzinfo/definitions/America/Martinique.rb +0 -23
  260. data/lib/tzinfo/definitions/America/Matamoros.rb +0 -177
  261. data/lib/tzinfo/definitions/America/Mazatlan.rb +0 -83
  262. data/lib/tzinfo/definitions/America/Mendoza.rb +0 -13
  263. data/lib/tzinfo/definitions/America/Menominee.rb +0 -236
  264. data/lib/tzinfo/definitions/America/Merida.rb +0 -76
  265. data/lib/tzinfo/definitions/America/Metlakatla.rb +0 -176
  266. data/lib/tzinfo/definitions/America/Mexico_City.rb +0 -89
  267. data/lib/tzinfo/definitions/America/Miquelon.rb +0 -195
  268. data/lib/tzinfo/definitions/America/Moncton.rb +0 -300
  269. data/lib/tzinfo/definitions/America/Monterrey.rb +0 -75
  270. data/lib/tzinfo/definitions/America/Montevideo.rb +0 -110
  271. data/lib/tzinfo/definitions/America/Montreal.rb +0 -13
  272. data/lib/tzinfo/definitions/America/Montserrat.rb +0 -13
  273. data/lib/tzinfo/definitions/America/Nassau.rb +0 -13
  274. data/lib/tzinfo/definitions/America/New_York.rb +0 -328
  275. data/lib/tzinfo/definitions/America/Nipigon.rb +0 -13
  276. data/lib/tzinfo/definitions/America/Nome.rb +0 -242
  277. data/lib/tzinfo/definitions/America/Noronha.rb +0 -57
  278. data/lib/tzinfo/definitions/America/North_Dakota/Beulah.rb +0 -246
  279. data/lib/tzinfo/definitions/America/North_Dakota/Center.rb +0 -246
  280. data/lib/tzinfo/definitions/America/North_Dakota/New_Salem.rb +0 -246
  281. data/lib/tzinfo/definitions/America/Nuuk.rb +0 -209
  282. data/lib/tzinfo/definitions/America/Ojinaga.rb +0 -182
  283. data/lib/tzinfo/definitions/America/Panama.rb +0 -20
  284. data/lib/tzinfo/definitions/America/Pangnirtung.rb +0 -13
  285. data/lib/tzinfo/definitions/America/Paramaribo.rb +0 -24
  286. data/lib/tzinfo/definitions/America/Phoenix.rb +0 -30
  287. data/lib/tzinfo/definitions/America/Port__m__au__m__Prince.rb +0 -177
  288. data/lib/tzinfo/definitions/America/Port_of_Spain.rb +0 -13
  289. data/lib/tzinfo/definitions/America/Porto_Acre.rb +0 -13
  290. data/lib/tzinfo/definitions/America/Porto_Velho.rb +0 -47
  291. data/lib/tzinfo/definitions/America/Puerto_Rico.rb +0 -23
  292. data/lib/tzinfo/definitions/America/Punta_Arenas.rb +0 -139
  293. data/lib/tzinfo/definitions/America/Rainy_River.rb +0 -13
  294. data/lib/tzinfo/definitions/America/Rankin_Inlet.rb +0 -224
  295. data/lib/tzinfo/definitions/America/Recife.rb +0 -57
  296. data/lib/tzinfo/definitions/America/Regina.rb +0 -74
  297. data/lib/tzinfo/definitions/America/Resolute.rb +0 -224
  298. data/lib/tzinfo/definitions/America/Rio_Branco.rb +0 -50
  299. data/lib/tzinfo/definitions/America/Rosario.rb +0 -13
  300. data/lib/tzinfo/definitions/America/Santa_Isabel.rb +0 -13
  301. data/lib/tzinfo/definitions/America/Santarem.rb +0 -49
  302. data/lib/tzinfo/definitions/America/Santiago.rb +0 -251
  303. data/lib/tzinfo/definitions/America/Santo_Domingo.rb +0 -38
  304. data/lib/tzinfo/definitions/America/Sao_Paulo.rb +0 -109
  305. data/lib/tzinfo/definitions/America/Scoresbysund.rb +0 -209
  306. data/lib/tzinfo/definitions/America/Shiprock.rb +0 -13
  307. data/lib/tzinfo/definitions/America/Sitka.rb +0 -240
  308. data/lib/tzinfo/definitions/America/St_Barthelemy.rb +0 -13
  309. data/lib/tzinfo/definitions/America/St_Johns.rb +0 -334
  310. data/lib/tzinfo/definitions/America/St_Kitts.rb +0 -13
  311. data/lib/tzinfo/definitions/America/St_Lucia.rb +0 -13
  312. data/lib/tzinfo/definitions/America/St_Thomas.rb +0 -13
  313. data/lib/tzinfo/definitions/America/St_Vincent.rb +0 -13
  314. data/lib/tzinfo/definitions/America/Swift_Current.rb +0 -44
  315. data/lib/tzinfo/definitions/America/Tegucigalpa.rb +0 -25
  316. data/lib/tzinfo/definitions/America/Thule.rb +0 -185
  317. data/lib/tzinfo/definitions/America/Thunder_Bay.rb +0 -13
  318. data/lib/tzinfo/definitions/America/Tijuana.rb +0 -242
  319. data/lib/tzinfo/definitions/America/Toronto.rb +0 -325
  320. data/lib/tzinfo/definitions/America/Tortola.rb +0 -13
  321. data/lib/tzinfo/definitions/America/Vancouver.rb +0 -282
  322. data/lib/tzinfo/definitions/America/Virgin.rb +0 -13
  323. data/lib/tzinfo/definitions/America/Whitehorse.rb +0 -117
  324. data/lib/tzinfo/definitions/America/Winnipeg.rb +0 -278
  325. data/lib/tzinfo/definitions/America/Yakutat.rb +0 -239
  326. data/lib/tzinfo/definitions/America/Yellowknife.rb +0 -13
  327. data/lib/tzinfo/definitions/Antarctica/Casey.rb +0 -30
  328. data/lib/tzinfo/definitions/Antarctica/Davis.rb +0 -25
  329. data/lib/tzinfo/definitions/Antarctica/DumontDUrville.rb +0 -13
  330. data/lib/tzinfo/definitions/Antarctica/Macquarie.rb +0 -233
  331. data/lib/tzinfo/definitions/Antarctica/Mawson.rb +0 -20
  332. data/lib/tzinfo/definitions/Antarctica/McMurdo.rb +0 -13
  333. data/lib/tzinfo/definitions/Antarctica/Palmer.rb +0 -102
  334. data/lib/tzinfo/definitions/Antarctica/Rothera.rb +0 -18
  335. data/lib/tzinfo/definitions/Antarctica/South_Pole.rb +0 -13
  336. data/lib/tzinfo/definitions/Antarctica/Syowa.rb +0 -13
  337. data/lib/tzinfo/definitions/Antarctica/Troll.rb +0 -157
  338. data/lib/tzinfo/definitions/Antarctica/Vostok.rb +0 -13
  339. data/lib/tzinfo/definitions/Arctic/Longyearbyen.rb +0 -13
  340. data/lib/tzinfo/definitions/Asia/Aden.rb +0 -13
  341. data/lib/tzinfo/definitions/Asia/Almaty.rb +0 -71
  342. data/lib/tzinfo/definitions/Asia/Amman.rb +0 -106
  343. data/lib/tzinfo/definitions/Asia/Anadyr.rb +0 -86
  344. data/lib/tzinfo/definitions/Asia/Aqtau.rb +0 -71
  345. data/lib/tzinfo/definitions/Asia/Aqtobe.rb +0 -72
  346. data/lib/tzinfo/definitions/Asia/Ashgabat.rb +0 -45
  347. data/lib/tzinfo/definitions/Asia/Ashkhabad.rb +0 -13
  348. data/lib/tzinfo/definitions/Asia/Atyrau.rb +0 -72
  349. data/lib/tzinfo/definitions/Asia/Baghdad.rb +0 -73
  350. data/lib/tzinfo/definitions/Asia/Bahrain.rb +0 -13
  351. data/lib/tzinfo/definitions/Asia/Baku.rb +0 -86
  352. data/lib/tzinfo/definitions/Asia/Bangkok.rb +0 -20
  353. data/lib/tzinfo/definitions/Asia/Barnaul.rb +0 -87
  354. data/lib/tzinfo/definitions/Asia/Beirut.rb +0 -231
  355. data/lib/tzinfo/definitions/Asia/Bishkek.rb +0 -72
  356. data/lib/tzinfo/definitions/Asia/Brunei.rb +0 -13
  357. data/lib/tzinfo/definitions/Asia/Calcutta.rb +0 -13
  358. data/lib/tzinfo/definitions/Asia/Chita.rb +0 -87
  359. data/lib/tzinfo/definitions/Asia/Choibalsan.rb +0 -72
  360. data/lib/tzinfo/definitions/Asia/Chongqing.rb +0 -13
  361. data/lib/tzinfo/definitions/Asia/Chungking.rb +0 -13
  362. data/lib/tzinfo/definitions/Asia/Colombo.rb +0 -30
  363. data/lib/tzinfo/definitions/Asia/Dacca.rb +0 -13
  364. data/lib/tzinfo/definitions/Asia/Damascus.rb +0 -140
  365. data/lib/tzinfo/definitions/Asia/Dhaka.rb +0 -28
  366. data/lib/tzinfo/definitions/Asia/Dili.rb +0 -22
  367. data/lib/tzinfo/definitions/Asia/Dubai.rb +0 -18
  368. data/lib/tzinfo/definitions/Asia/Dushanbe.rb +0 -44
  369. data/lib/tzinfo/definitions/Asia/Famagusta.rb +0 -217
  370. data/lib/tzinfo/definitions/Asia/Gaza.rb +0 -274
  371. data/lib/tzinfo/definitions/Asia/Harbin.rb +0 -13
  372. data/lib/tzinfo/definitions/Asia/Hebron.rb +0 -276
  373. data/lib/tzinfo/definitions/Asia/Ho_Chi_Minh.rb +0 -29
  374. data/lib/tzinfo/definitions/Asia/Hong_Kong.rb +0 -89
  375. data/lib/tzinfo/definitions/Asia/Hovd.rb +0 -69
  376. data/lib/tzinfo/definitions/Asia/Irkutsk.rb +0 -88
  377. data/lib/tzinfo/definitions/Asia/Istanbul.rb +0 -13
  378. data/lib/tzinfo/definitions/Asia/Jakarta.rb +0 -30
  379. data/lib/tzinfo/definitions/Asia/Jayapura.rb +0 -22
  380. data/lib/tzinfo/definitions/Asia/Jerusalem.rb +0 -241
  381. data/lib/tzinfo/definitions/Asia/Kabul.rb +0 -20
  382. data/lib/tzinfo/definitions/Asia/Kamchatka.rb +0 -84
  383. data/lib/tzinfo/definitions/Asia/Karachi.rb +0 -32
  384. data/lib/tzinfo/definitions/Asia/Kashgar.rb +0 -13
  385. data/lib/tzinfo/definitions/Asia/Kathmandu.rb +0 -20
  386. data/lib/tzinfo/definitions/Asia/Katmandu.rb +0 -13
  387. data/lib/tzinfo/definitions/Asia/Khandyga.rb +0 -90
  388. data/lib/tzinfo/definitions/Asia/Kolkata.rb +0 -27
  389. data/lib/tzinfo/definitions/Asia/Krasnoyarsk.rb +0 -86
  390. data/lib/tzinfo/definitions/Asia/Kuala_Lumpur.rb +0 -13
  391. data/lib/tzinfo/definitions/Asia/Kuching.rb +0 -38
  392. data/lib/tzinfo/definitions/Asia/Kuwait.rb +0 -13
  393. data/lib/tzinfo/definitions/Asia/Macao.rb +0 -13
  394. data/lib/tzinfo/definitions/Asia/Macau.rb +0 -91
  395. data/lib/tzinfo/definitions/Asia/Magadan.rb +0 -87
  396. data/lib/tzinfo/definitions/Asia/Makassar.rb +0 -24
  397. data/lib/tzinfo/definitions/Asia/Manila.rb +0 -30
  398. data/lib/tzinfo/definitions/Asia/Muscat.rb +0 -13
  399. data/lib/tzinfo/definitions/Asia/Nicosia.rb +0 -217
  400. data/lib/tzinfo/definitions/Asia/Novokuznetsk.rb +0 -84
  401. data/lib/tzinfo/definitions/Asia/Novosibirsk.rb +0 -87
  402. data/lib/tzinfo/definitions/Asia/Omsk.rb +0 -86
  403. data/lib/tzinfo/definitions/Asia/Oral.rb +0 -73
  404. data/lib/tzinfo/definitions/Asia/Phnom_Penh.rb +0 -13
  405. data/lib/tzinfo/definitions/Asia/Pontianak.rb +0 -30
  406. data/lib/tzinfo/definitions/Asia/Pyongyang.rb +0 -24
  407. data/lib/tzinfo/definitions/Asia/Qatar.rb +0 -20
  408. data/lib/tzinfo/definitions/Asia/Qostanay.rb +0 -72
  409. data/lib/tzinfo/definitions/Asia/Qyzylorda.rb +0 -73
  410. data/lib/tzinfo/definitions/Asia/Rangoon.rb +0 -13
  411. data/lib/tzinfo/definitions/Asia/Riyadh.rb +0 -18
  412. data/lib/tzinfo/definitions/Asia/Saigon.rb +0 -13
  413. data/lib/tzinfo/definitions/Asia/Sakhalin.rb +0 -87
  414. data/lib/tzinfo/definitions/Asia/Samarkand.rb +0 -44
  415. data/lib/tzinfo/definitions/Asia/Seoul.rb +0 -50
  416. data/lib/tzinfo/definitions/Asia/Shanghai.rb +0 -47
  417. data/lib/tzinfo/definitions/Asia/Singapore.rb +0 -31
  418. data/lib/tzinfo/definitions/Asia/Srednekolymsk.rb +0 -86
  419. data/lib/tzinfo/definitions/Asia/Taipei.rb +0 -60
  420. data/lib/tzinfo/definitions/Asia/Tashkent.rb +0 -44
  421. data/lib/tzinfo/definitions/Asia/Tbilisi.rb +0 -73
  422. data/lib/tzinfo/definitions/Asia/Tehran.rb +0 -92
  423. data/lib/tzinfo/definitions/Asia/Tel_Aviv.rb +0 -13
  424. data/lib/tzinfo/definitions/Asia/Thimbu.rb +0 -13
  425. data/lib/tzinfo/definitions/Asia/Thimphu.rb +0 -20
  426. data/lib/tzinfo/definitions/Asia/Tokyo.rb +0 -27
  427. data/lib/tzinfo/definitions/Asia/Tomsk.rb +0 -87
  428. data/lib/tzinfo/definitions/Asia/Ujung_Pandang.rb +0 -13
  429. data/lib/tzinfo/definitions/Asia/Ulaanbaatar.rb +0 -69
  430. data/lib/tzinfo/definitions/Asia/Ulan_Bator.rb +0 -13
  431. data/lib/tzinfo/definitions/Asia/Urumqi.rb +0 -18
  432. data/lib/tzinfo/definitions/Asia/Ust__m__Nera.rb +0 -89
  433. data/lib/tzinfo/definitions/Asia/Vientiane.rb +0 -13
  434. data/lib/tzinfo/definitions/Asia/Vladivostok.rb +0 -86
  435. data/lib/tzinfo/definitions/Asia/Yakutsk.rb +0 -86
  436. data/lib/tzinfo/definitions/Asia/Yangon.rb +0 -23
  437. data/lib/tzinfo/definitions/Asia/Yekaterinburg.rb +0 -88
  438. data/lib/tzinfo/definitions/Asia/Yerevan.rb +0 -82
  439. data/lib/tzinfo/definitions/Atlantic/Azores.rb +0 -318
  440. data/lib/tzinfo/definitions/Atlantic/Bermuda.rb +0 -248
  441. data/lib/tzinfo/definitions/Atlantic/Canary.rb +0 -209
  442. data/lib/tzinfo/definitions/Atlantic/Cape_Verde.rb +0 -23
  443. data/lib/tzinfo/definitions/Atlantic/Faeroe.rb +0 -13
  444. data/lib/tzinfo/definitions/Atlantic/Faroe.rb +0 -205
  445. data/lib/tzinfo/definitions/Atlantic/Jan_Mayen.rb +0 -13
  446. data/lib/tzinfo/definitions/Atlantic/Madeira.rb +0 -317
  447. data/lib/tzinfo/definitions/Atlantic/Reykjavik.rb +0 -13
  448. data/lib/tzinfo/definitions/Atlantic/South_Georgia.rb +0 -18
  449. data/lib/tzinfo/definitions/Atlantic/St_Helena.rb +0 -13
  450. data/lib/tzinfo/definitions/Atlantic/Stanley.rb +0 -91
  451. data/lib/tzinfo/definitions/Australia/ACT.rb +0 -13
  452. data/lib/tzinfo/definitions/Australia/Adelaide.rb +0 -233
  453. data/lib/tzinfo/definitions/Australia/Brisbane.rb +0 -35
  454. data/lib/tzinfo/definitions/Australia/Broken_Hill.rb +0 -235
  455. data/lib/tzinfo/definitions/Australia/Canberra.rb +0 -13
  456. data/lib/tzinfo/definitions/Australia/Currie.rb +0 -13
  457. data/lib/tzinfo/definitions/Australia/Darwin.rb +0 -29
  458. data/lib/tzinfo/definitions/Australia/Eucla.rb +0 -37
  459. data/lib/tzinfo/definitions/Australia/Hobart.rb +0 -243
  460. data/lib/tzinfo/definitions/Australia/LHI.rb +0 -13
  461. data/lib/tzinfo/definitions/Australia/Lindeman.rb +0 -39
  462. data/lib/tzinfo/definitions/Australia/Lord_Howe.rb +0 -206
  463. data/lib/tzinfo/definitions/Australia/Melbourne.rb +0 -231
  464. data/lib/tzinfo/definitions/Australia/NSW.rb +0 -13
  465. data/lib/tzinfo/definitions/Australia/North.rb +0 -13
  466. data/lib/tzinfo/definitions/Australia/Perth.rb +0 -37
  467. data/lib/tzinfo/definitions/Australia/Queensland.rb +0 -13
  468. data/lib/tzinfo/definitions/Australia/South.rb +0 -13
  469. data/lib/tzinfo/definitions/Australia/Sydney.rb +0 -231
  470. data/lib/tzinfo/definitions/Australia/Tasmania.rb +0 -13
  471. data/lib/tzinfo/definitions/Australia/Victoria.rb +0 -13
  472. data/lib/tzinfo/definitions/Australia/West.rb +0 -13
  473. data/lib/tzinfo/definitions/Australia/Yancowinna.rb +0 -13
  474. data/lib/tzinfo/definitions/Brazil/Acre.rb +0 -13
  475. data/lib/tzinfo/definitions/Brazil/DeNoronha.rb +0 -13
  476. data/lib/tzinfo/definitions/Brazil/East.rb +0 -13
  477. data/lib/tzinfo/definitions/Brazil/West.rb +0 -13
  478. data/lib/tzinfo/definitions/CET.rb +0 -223
  479. data/lib/tzinfo/definitions/CST6CDT.rb +0 -238
  480. data/lib/tzinfo/definitions/Canada/Atlantic.rb +0 -13
  481. data/lib/tzinfo/definitions/Canada/Central.rb +0 -13
  482. data/lib/tzinfo/definitions/Canada/Eastern.rb +0 -13
  483. data/lib/tzinfo/definitions/Canada/Mountain.rb +0 -13
  484. data/lib/tzinfo/definitions/Canada/Newfoundland.rb +0 -13
  485. data/lib/tzinfo/definitions/Canada/Pacific.rb +0 -13
  486. data/lib/tzinfo/definitions/Canada/Saskatchewan.rb +0 -13
  487. data/lib/tzinfo/definitions/Canada/Yukon.rb +0 -13
  488. data/lib/tzinfo/definitions/Chile/Continental.rb +0 -13
  489. data/lib/tzinfo/definitions/Chile/EasterIsland.rb +0 -13
  490. data/lib/tzinfo/definitions/Cuba.rb +0 -11
  491. data/lib/tzinfo/definitions/EET.rb +0 -209
  492. data/lib/tzinfo/definitions/EST.rb +0 -14
  493. data/lib/tzinfo/definitions/EST5EDT.rb +0 -238
  494. data/lib/tzinfo/definitions/Egypt.rb +0 -11
  495. data/lib/tzinfo/definitions/Eire.rb +0 -11
  496. data/lib/tzinfo/definitions/Etc/GMT.rb +0 -16
  497. data/lib/tzinfo/definitions/Etc/GMT0.rb +0 -13
  498. data/lib/tzinfo/definitions/Etc/GMT__m__0.rb +0 -13
  499. data/lib/tzinfo/definitions/Etc/GMT__m__1.rb +0 -16
  500. data/lib/tzinfo/definitions/Etc/GMT__m__10.rb +0 -16
  501. data/lib/tzinfo/definitions/Etc/GMT__m__11.rb +0 -16
  502. data/lib/tzinfo/definitions/Etc/GMT__m__12.rb +0 -16
  503. data/lib/tzinfo/definitions/Etc/GMT__m__13.rb +0 -16
  504. data/lib/tzinfo/definitions/Etc/GMT__m__14.rb +0 -16
  505. data/lib/tzinfo/definitions/Etc/GMT__m__2.rb +0 -16
  506. data/lib/tzinfo/definitions/Etc/GMT__m__3.rb +0 -16
  507. data/lib/tzinfo/definitions/Etc/GMT__m__4.rb +0 -16
  508. data/lib/tzinfo/definitions/Etc/GMT__m__5.rb +0 -16
  509. data/lib/tzinfo/definitions/Etc/GMT__m__6.rb +0 -16
  510. data/lib/tzinfo/definitions/Etc/GMT__m__7.rb +0 -16
  511. data/lib/tzinfo/definitions/Etc/GMT__m__8.rb +0 -16
  512. data/lib/tzinfo/definitions/Etc/GMT__m__9.rb +0 -16
  513. data/lib/tzinfo/definitions/Etc/GMT__p__0.rb +0 -13
  514. data/lib/tzinfo/definitions/Etc/GMT__p__1.rb +0 -16
  515. data/lib/tzinfo/definitions/Etc/GMT__p__10.rb +0 -16
  516. data/lib/tzinfo/definitions/Etc/GMT__p__11.rb +0 -16
  517. data/lib/tzinfo/definitions/Etc/GMT__p__12.rb +0 -16
  518. data/lib/tzinfo/definitions/Etc/GMT__p__2.rb +0 -16
  519. data/lib/tzinfo/definitions/Etc/GMT__p__3.rb +0 -16
  520. data/lib/tzinfo/definitions/Etc/GMT__p__4.rb +0 -16
  521. data/lib/tzinfo/definitions/Etc/GMT__p__5.rb +0 -16
  522. data/lib/tzinfo/definitions/Etc/GMT__p__6.rb +0 -16
  523. data/lib/tzinfo/definitions/Etc/GMT__p__7.rb +0 -16
  524. data/lib/tzinfo/definitions/Etc/GMT__p__8.rb +0 -16
  525. data/lib/tzinfo/definitions/Etc/GMT__p__9.rb +0 -16
  526. data/lib/tzinfo/definitions/Etc/Greenwich.rb +0 -13
  527. data/lib/tzinfo/definitions/Etc/UCT.rb +0 -13
  528. data/lib/tzinfo/definitions/Etc/UTC.rb +0 -16
  529. data/lib/tzinfo/definitions/Etc/Universal.rb +0 -13
  530. data/lib/tzinfo/definitions/Etc/Zulu.rb +0 -13
  531. data/lib/tzinfo/definitions/Europe/Amsterdam.rb +0 -13
  532. data/lib/tzinfo/definitions/Europe/Andorra.rb +0 -199
  533. data/lib/tzinfo/definitions/Europe/Astrakhan.rb +0 -84
  534. data/lib/tzinfo/definitions/Europe/Athens.rb +0 -231
  535. data/lib/tzinfo/definitions/Europe/Belfast.rb +0 -13
  536. data/lib/tzinfo/definitions/Europe/Belgrade.rb +0 -209
  537. data/lib/tzinfo/definitions/Europe/Berlin.rb +0 -234
  538. data/lib/tzinfo/definitions/Europe/Bratislava.rb +0 -13
  539. data/lib/tzinfo/definitions/Europe/Brussels.rb +0 -278
  540. data/lib/tzinfo/definitions/Europe/Bucharest.rb +0 -227
  541. data/lib/tzinfo/definitions/Europe/Budapest.rb +0 -241
  542. data/lib/tzinfo/definitions/Europe/Busingen.rb +0 -13
  543. data/lib/tzinfo/definitions/Europe/Chisinau.rb +0 -237
  544. data/lib/tzinfo/definitions/Europe/Copenhagen.rb +0 -13
  545. data/lib/tzinfo/definitions/Europe/Dublin.rb +0 -322
  546. data/lib/tzinfo/definitions/Europe/Gibraltar.rb +0 -291
  547. data/lib/tzinfo/definitions/Europe/Guernsey.rb +0 -13
  548. data/lib/tzinfo/definitions/Europe/Helsinki.rb +0 -209
  549. data/lib/tzinfo/definitions/Europe/Isle_of_Man.rb +0 -13
  550. data/lib/tzinfo/definitions/Europe/Istanbul.rb +0 -136
  551. data/lib/tzinfo/definitions/Europe/Jersey.rb +0 -13
  552. data/lib/tzinfo/definitions/Europe/Kaliningrad.rb +0 -103
  553. data/lib/tzinfo/definitions/Europe/Kiev.rb +0 -13
  554. data/lib/tzinfo/definitions/Europe/Kirov.rb +0 -85
  555. data/lib/tzinfo/definitions/Europe/Kyiv.rb +0 -216
  556. data/lib/tzinfo/definitions/Europe/Lisbon.rb +0 -316
  557. data/lib/tzinfo/definitions/Europe/Ljubljana.rb +0 -13
  558. data/lib/tzinfo/definitions/Europe/London.rb +0 -334
  559. data/lib/tzinfo/definitions/Europe/Luxembourg.rb +0 -13
  560. data/lib/tzinfo/definitions/Europe/Madrid.rb +0 -255
  561. data/lib/tzinfo/definitions/Europe/Malta.rb +0 -259
  562. data/lib/tzinfo/definitions/Europe/Mariehamn.rb +0 -13
  563. data/lib/tzinfo/definitions/Europe/Minsk.rb +0 -92
  564. data/lib/tzinfo/definitions/Europe/Monaco.rb +0 -13
  565. data/lib/tzinfo/definitions/Europe/Moscow.rb +0 -104
  566. data/lib/tzinfo/definitions/Europe/Nicosia.rb +0 -13
  567. data/lib/tzinfo/definitions/Europe/Oslo.rb +0 -13
  568. data/lib/tzinfo/definitions/Europe/Paris.rb +0 -278
  569. data/lib/tzinfo/definitions/Europe/Podgorica.rb +0 -13
  570. data/lib/tzinfo/definitions/Europe/Prague.rb +0 -236
  571. data/lib/tzinfo/definitions/Europe/Riga.rb +0 -222
  572. data/lib/tzinfo/definitions/Europe/Rome.rb +0 -261
  573. data/lib/tzinfo/definitions/Europe/Samara.rb +0 -85
  574. data/lib/tzinfo/definitions/Europe/San_Marino.rb +0 -13
  575. data/lib/tzinfo/definitions/Europe/Sarajevo.rb +0 -13
  576. data/lib/tzinfo/definitions/Europe/Saratov.rb +0 -84
  577. data/lib/tzinfo/definitions/Europe/Simferopol.rb +0 -99
  578. data/lib/tzinfo/definitions/Europe/Skopje.rb +0 -13
  579. data/lib/tzinfo/definitions/Europe/Sofia.rb +0 -219
  580. data/lib/tzinfo/definitions/Europe/Stockholm.rb +0 -13
  581. data/lib/tzinfo/definitions/Europe/Tallinn.rb +0 -218
  582. data/lib/tzinfo/definitions/Europe/Tirane.rb +0 -223
  583. data/lib/tzinfo/definitions/Europe/Tiraspol.rb +0 -13
  584. data/lib/tzinfo/definitions/Europe/Ulyanovsk.rb +0 -88
  585. data/lib/tzinfo/definitions/Europe/Uzhgorod.rb +0 -13
  586. data/lib/tzinfo/definitions/Europe/Vaduz.rb +0 -13
  587. data/lib/tzinfo/definitions/Europe/Vatican.rb +0 -13
  588. data/lib/tzinfo/definitions/Europe/Vienna.rb +0 -229
  589. data/lib/tzinfo/definitions/Europe/Vilnius.rb +0 -216
  590. data/lib/tzinfo/definitions/Europe/Volgograd.rb +0 -87
  591. data/lib/tzinfo/definitions/Europe/Warsaw.rb +0 -258
  592. data/lib/tzinfo/definitions/Europe/Zagreb.rb +0 -13
  593. data/lib/tzinfo/definitions/Europe/Zaporozhye.rb +0 -13
  594. data/lib/tzinfo/definitions/Europe/Zurich.rb +0 -211
  595. data/lib/tzinfo/definitions/Factory.rb +0 -14
  596. data/lib/tzinfo/definitions/GB.rb +0 -11
  597. data/lib/tzinfo/definitions/GB__m__Eire.rb +0 -11
  598. data/lib/tzinfo/definitions/GMT.rb +0 -11
  599. data/lib/tzinfo/definitions/GMT0.rb +0 -11
  600. data/lib/tzinfo/definitions/GMT__m__0.rb +0 -11
  601. data/lib/tzinfo/definitions/GMT__p__0.rb +0 -11
  602. data/lib/tzinfo/definitions/Greenwich.rb +0 -11
  603. data/lib/tzinfo/definitions/HST.rb +0 -14
  604. data/lib/tzinfo/definitions/Hongkong.rb +0 -11
  605. data/lib/tzinfo/definitions/Iceland.rb +0 -11
  606. data/lib/tzinfo/definitions/Indian/Antananarivo.rb +0 -13
  607. data/lib/tzinfo/definitions/Indian/Chagos.rb +0 -20
  608. data/lib/tzinfo/definitions/Indian/Christmas.rb +0 -13
  609. data/lib/tzinfo/definitions/Indian/Cocos.rb +0 -13
  610. data/lib/tzinfo/definitions/Indian/Comoro.rb +0 -13
  611. data/lib/tzinfo/definitions/Indian/Kerguelen.rb +0 -13
  612. data/lib/tzinfo/definitions/Indian/Mahe.rb +0 -13
  613. data/lib/tzinfo/definitions/Indian/Maldives.rb +0 -20
  614. data/lib/tzinfo/definitions/Indian/Mauritius.rb +0 -23
  615. data/lib/tzinfo/definitions/Indian/Mayotte.rb +0 -13
  616. data/lib/tzinfo/definitions/Indian/Reunion.rb +0 -13
  617. data/lib/tzinfo/definitions/Iran.rb +0 -11
  618. data/lib/tzinfo/definitions/Israel.rb +0 -11
  619. data/lib/tzinfo/definitions/Jamaica.rb +0 -11
  620. data/lib/tzinfo/definitions/Japan.rb +0 -11
  621. data/lib/tzinfo/definitions/Kwajalein.rb +0 -11
  622. data/lib/tzinfo/definitions/Libya.rb +0 -11
  623. data/lib/tzinfo/definitions/MET.rb +0 -223
  624. data/lib/tzinfo/definitions/MST.rb +0 -14
  625. data/lib/tzinfo/definitions/MST7MDT.rb +0 -238
  626. data/lib/tzinfo/definitions/Mexico/BajaNorte.rb +0 -13
  627. data/lib/tzinfo/definitions/Mexico/BajaSur.rb +0 -13
  628. data/lib/tzinfo/definitions/Mexico/General.rb +0 -13
  629. data/lib/tzinfo/definitions/NZ.rb +0 -11
  630. data/lib/tzinfo/definitions/NZ__m__CHAT.rb +0 -11
  631. data/lib/tzinfo/definitions/Navajo.rb +0 -11
  632. data/lib/tzinfo/definitions/PRC.rb +0 -11
  633. data/lib/tzinfo/definitions/PST8PDT.rb +0 -238
  634. data/lib/tzinfo/definitions/Pacific/Apia.rb +0 -48
  635. data/lib/tzinfo/definitions/Pacific/Auckland.rb +0 -248
  636. data/lib/tzinfo/definitions/Pacific/Bougainville.rb +0 -25
  637. data/lib/tzinfo/definitions/Pacific/Chatham.rb +0 -219
  638. data/lib/tzinfo/definitions/Pacific/Chuuk.rb +0 -13
  639. data/lib/tzinfo/definitions/Pacific/Easter.rb +0 -231
  640. data/lib/tzinfo/definitions/Pacific/Efate.rb +0 -41
  641. data/lib/tzinfo/definitions/Pacific/Enderbury.rb +0 -13
  642. data/lib/tzinfo/definitions/Pacific/Fakaofo.rb +0 -20
  643. data/lib/tzinfo/definitions/Pacific/Fiji.rb +0 -47
  644. data/lib/tzinfo/definitions/Pacific/Funafuti.rb +0 -13
  645. data/lib/tzinfo/definitions/Pacific/Galapagos.rb +0 -23
  646. data/lib/tzinfo/definitions/Pacific/Gambier.rb +0 -18
  647. data/lib/tzinfo/definitions/Pacific/Guadalcanal.rb +0 -18
  648. data/lib/tzinfo/definitions/Pacific/Guam.rb +0 -42
  649. data/lib/tzinfo/definitions/Pacific/Honolulu.rb +0 -28
  650. data/lib/tzinfo/definitions/Pacific/Johnston.rb +0 -13
  651. data/lib/tzinfo/definitions/Pacific/Kanton.rb +0 -22
  652. data/lib/tzinfo/definitions/Pacific/Kiritimati.rb +0 -22
  653. data/lib/tzinfo/definitions/Pacific/Kosrae.rb +0 -30
  654. data/lib/tzinfo/definitions/Pacific/Kwajalein.rb +0 -27
  655. data/lib/tzinfo/definitions/Pacific/Majuro.rb +0 -13
  656. data/lib/tzinfo/definitions/Pacific/Marquesas.rb +0 -18
  657. data/lib/tzinfo/definitions/Pacific/Midway.rb +0 -13
  658. data/lib/tzinfo/definitions/Pacific/Nauru.rb +0 -23
  659. data/lib/tzinfo/definitions/Pacific/Niue.rb +0 -20
  660. data/lib/tzinfo/definitions/Pacific/Norfolk.rb +0 -134
  661. data/lib/tzinfo/definitions/Pacific/Noumea.rb +0 -25
  662. data/lib/tzinfo/definitions/Pacific/Pago_Pago.rb +0 -20
  663. data/lib/tzinfo/definitions/Pacific/Palau.rb +0 -20
  664. data/lib/tzinfo/definitions/Pacific/Pitcairn.rb +0 -20
  665. data/lib/tzinfo/definitions/Pacific/Pohnpei.rb +0 -13
  666. data/lib/tzinfo/definitions/Pacific/Ponape.rb +0 -13
  667. data/lib/tzinfo/definitions/Pacific/Port_Moresby.rb +0 -20
  668. data/lib/tzinfo/definitions/Pacific/Rarotonga.rb +0 -48
  669. data/lib/tzinfo/definitions/Pacific/Saipan.rb +0 -13
  670. data/lib/tzinfo/definitions/Pacific/Samoa.rb +0 -13
  671. data/lib/tzinfo/definitions/Pacific/Tahiti.rb +0 -18
  672. data/lib/tzinfo/definitions/Pacific/Tarawa.rb +0 -18
  673. data/lib/tzinfo/definitions/Pacific/Tongatapu.rb +0 -29
  674. data/lib/tzinfo/definitions/Pacific/Truk.rb +0 -13
  675. data/lib/tzinfo/definitions/Pacific/Wake.rb +0 -13
  676. data/lib/tzinfo/definitions/Pacific/Wallis.rb +0 -13
  677. data/lib/tzinfo/definitions/Pacific/Yap.rb +0 -13
  678. data/lib/tzinfo/definitions/Poland.rb +0 -11
  679. data/lib/tzinfo/definitions/Portugal.rb +0 -11
  680. data/lib/tzinfo/definitions/ROC.rb +0 -11
  681. data/lib/tzinfo/definitions/ROK.rb +0 -11
  682. data/lib/tzinfo/definitions/Singapore.rb +0 -11
  683. data/lib/tzinfo/definitions/Turkey.rb +0 -11
  684. data/lib/tzinfo/definitions/UCT.rb +0 -11
  685. data/lib/tzinfo/definitions/US/Alaska.rb +0 -13
  686. data/lib/tzinfo/definitions/US/Aleutian.rb +0 -13
  687. data/lib/tzinfo/definitions/US/Arizona.rb +0 -13
  688. data/lib/tzinfo/definitions/US/Central.rb +0 -13
  689. data/lib/tzinfo/definitions/US/East__m__Indiana.rb +0 -13
  690. data/lib/tzinfo/definitions/US/Eastern.rb +0 -13
  691. data/lib/tzinfo/definitions/US/Hawaii.rb +0 -13
  692. data/lib/tzinfo/definitions/US/Indiana__m__Starke.rb +0 -13
  693. data/lib/tzinfo/definitions/US/Michigan.rb +0 -13
  694. data/lib/tzinfo/definitions/US/Mountain.rb +0 -13
  695. data/lib/tzinfo/definitions/US/Pacific.rb +0 -13
  696. data/lib/tzinfo/definitions/US/Samoa.rb +0 -13
  697. data/lib/tzinfo/definitions/UTC.rb +0 -11
  698. data/lib/tzinfo/definitions/Universal.rb +0 -11
  699. data/lib/tzinfo/definitions/WET.rb +0 -209
  700. data/lib/tzinfo/definitions/W__m__SU.rb +0 -11
  701. data/lib/tzinfo/definitions/Zulu.rb +0 -11
  702. data/lib/tzinfo/indexes/countries.rb +0 -924
  703. data/lib/tzinfo/indexes/timezones.rb +0 -607
  704. data/lib/tzinfo/tzdataparser.rb +0 -1287
  705. data/test/in_load_path/payload.rb +0 -1
  706. data/tzinfo.gemspec +0 -19
@@ -0,0 +1,663 @@
1
+ # encoding: UTF-8
2
+
3
+ #--
4
+ # Copyright (c) 2012-2013 Philip Ross
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ # THE SOFTWARE.
23
+ #++
24
+
25
+
26
+
27
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'test_utils')
28
+ require 'tempfile'
29
+
30
+ include TZInfo
31
+
32
+ class TCZoneinfoTimezoneInfo < Test::Unit::TestCase
33
+
34
+ def assert_period(abbreviation, utc_offset, std_offset, dst, start_at, end_at, info)
35
+ if start_at
36
+ period = info.period_for_utc(start_at)
37
+ elsif end_at
38
+ period = info.period_for_utc(end_at - 1)
39
+ else
40
+ # no transitions, pick the epoch
41
+ period = info.period_for_utc(Time.utc(1970, 1, 1))
42
+ end
43
+
44
+ assert_equal(abbreviation, period.abbreviation)
45
+ assert_equal(utc_offset, period.utc_offset)
46
+ assert_equal(std_offset, period.std_offset)
47
+ assert_equal(dst, period.dst?)
48
+
49
+ if start_at
50
+ assert_not_nil(period.utc_start_time)
51
+ assert_equal(start_at, period.utc_start_time)
52
+ else
53
+ assert_nil(period.utc_start_time)
54
+ end
55
+
56
+ if end_at
57
+ assert_not_nil(period.utc_end_time)
58
+ assert_equal(end_at, period.utc_end_time)
59
+ else
60
+ assert_nil(period.utc_end_time)
61
+ end
62
+ end
63
+
64
+ def convert_times_to_i(items, key = :at)
65
+ items.each do |item|
66
+ if item[key].kind_of?(Time)
67
+ item[key] = item[key].utc.to_i
68
+ end
69
+ end
70
+ end
71
+
72
+ def select_with_32bit_values(items, key = :at)
73
+ items.select do |item|
74
+ i = item[key]
75
+ i >= -2147483648 && i <= 2147483647
76
+ end
77
+ end
78
+
79
+ def pack_int64_network_order(values)
80
+ values.collect {|value| [value >> 32, value & 0xFFFFFFFF]}.flatten.pack('NN' * values.length)
81
+ end
82
+
83
+ def pack_int64_signed_network_order(values)
84
+ # Convert to the equivalent 64-bit unsigned integer with the same bit representation
85
+ pack_int64_network_order(values.collect {|value| value < 0 ? value + 0x10000000000000000 : value})
86
+ end
87
+
88
+ def write_tzif(format, offsets, transitions, leaps = [], options = {})
89
+
90
+ # Options for testing malformed zoneinfo files.
91
+ magic = options[:magic]
92
+ abbrev_separator = options[:abbrev_separator] || "\0"
93
+ abbrev_offset_base = options[:abbrev_offset_base] || 0
94
+
95
+ unless magic
96
+ if format == 1
97
+ magic = "TZif\0"
98
+ elsif format == 2
99
+ magic = 'TZif2'
100
+ else
101
+ raise ArgumentError, 'Invalid format specified'
102
+ end
103
+ end
104
+
105
+ convert_times_to_i(transitions)
106
+ convert_times_to_i(leaps)
107
+
108
+ abbrevs = offsets.collect {|o| o[:abbrev]}.uniq
109
+
110
+ if abbrevs.length > 0
111
+ abbrevs = abbrevs.collect {|a| a.encode('UTF-8')} if abbrevs.first.respond_to?(:encode)
112
+
113
+ if abbrevs.first.respond_to?(:bytesize)
114
+ abbrevs_length = abbrevs.inject(0) {|sum, a| sum + a.bytesize + abbrev_separator.bytesize}
115
+ else
116
+ abbrevs_length = abbrevs.inject(0) {|sum, a| sum + a.length + abbrev_separator.length}
117
+ end
118
+ else
119
+ abbrevs_length = 0
120
+ end
121
+
122
+ b32_transitions = select_with_32bit_values(transitions)
123
+ b32_leaps = select_with_32bit_values(leaps)
124
+
125
+ Tempfile.open('tzinfo-test-zone') do |file|
126
+ file.binmode
127
+
128
+ file.write(
129
+ [magic, offsets.length, offsets.length, leaps.length,
130
+ b32_transitions.length, offsets.length, abbrevs_length].pack('a5 x15 NNNNNN'))
131
+
132
+ unless b32_transitions.empty?
133
+ file.write(b32_transitions.collect {|t| t[:at]}.pack('N' * b32_transitions.length))
134
+ file.write(b32_transitions.collect {|t| t[:offset_index]}.pack('C' * b32_transitions.length))
135
+ end
136
+
137
+ offsets.each do |offset|
138
+ index = abbrevs.index(offset[:abbrev])
139
+ abbrev_offset = abbrev_offset_base
140
+ 0.upto(index - 1) {|i| abbrev_offset += abbrevs[i].length + 1}
141
+
142
+ file.write([offset[:gmtoff], offset[:isdst] ? 1 : 0, abbrev_offset].pack('NCC'))
143
+ end
144
+
145
+ abbrevs.each do |a|
146
+ file.write(a)
147
+ file.write(abbrev_separator)
148
+ end
149
+
150
+ b32_leaps.each do |leap|
151
+ file.write([leap[:at], leap[:seconds]].pack('NN'))
152
+ end
153
+
154
+ unless offsets.empty?
155
+ file.write("\0" * offsets.length * 2)
156
+ end
157
+
158
+ if format == 2
159
+ file.write(
160
+ [magic, offsets.length, offsets.length, leaps.length,
161
+ transitions.length, offsets.length, abbrevs_length].pack('a5 x15 NNNNNN'))
162
+
163
+ unless transitions.empty?
164
+ file.write(pack_int64_signed_network_order(transitions.collect {|t| t[:at]}))
165
+ file.write(transitions.collect {|t| t[:offset_index]}.pack('C' * transitions.length))
166
+ end
167
+
168
+ offsets.each do |offset|
169
+ index = abbrevs.index(offset[:abbrev])
170
+ abbrev_offset = abbrev_offset_base
171
+ 0.upto(index - 1) {|i| abbrev_offset += abbrevs[i].length + 1}
172
+
173
+ file.write([offset[:gmtoff], offset[:isdst] ? 1 : 0, abbrev_offset].pack('NCC'))
174
+ end
175
+
176
+ abbrevs.each do |a|
177
+ file.write(a)
178
+ file.write(abbrev_separator)
179
+ end
180
+
181
+ leaps.each do |leap|
182
+ file.write(pack_int64_signed_network_order([leap[:at]]))
183
+ file.write([leap[:seconds]].pack('N'))
184
+ end
185
+
186
+ unless offsets.empty?
187
+ file.write("\0" * offsets.length * 2)
188
+ end
189
+
190
+ # Empty POSIX timezone string
191
+ file.write("\n\n")
192
+ end
193
+
194
+ file.flush
195
+
196
+ yield file.path, format
197
+ end
198
+ end
199
+
200
+ def tzif_test(offsets, transitions, leaps = [], options = {}, &block)
201
+ write_tzif(1, offsets, transitions, leaps, options, &block)
202
+ write_tzif(2, offsets, transitions, leaps, options, &block)
203
+ end
204
+
205
+ def test_load
206
+ offsets = [
207
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
208
+ {:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
209
+ {:gmtoff => 7200, :isdst => true, :abbrev => 'XDT'},
210
+ {:gmtoff => 0, :isdst => false, :abbrev => 'XNST'}]
211
+
212
+ transitions = [
213
+ {:at => Time.utc(1971, 1, 2), :offset_index => 1},
214
+ {:at => Time.utc(1980, 4, 22), :offset_index => 2},
215
+ {:at => Time.utc(1980, 10, 21), :offset_index => 1},
216
+ {:at => Time.utc(2000, 12, 31), :offset_index => 3}]
217
+
218
+ tzif_test(offsets, transitions) do |path, format|
219
+ info = ZoneinfoTimezoneInfo.new('Zone/One', path)
220
+ assert_equal('Zone/One', info.identifier)
221
+
222
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(1971, 1, 2), info)
223
+ assert_period(:XST, 3600, 0, false, Time.utc(1971, 1, 2), Time.utc(1980, 4, 22), info)
224
+ assert_period(:XDT, 3600, 3600, true, Time.utc(1980, 4, 22), Time.utc(1980, 10, 21), info)
225
+ assert_period(:XST, 3600, 0, false, Time.utc(1980, 10, 21), Time.utc(2000, 12, 31), info)
226
+ assert_period(:XNST, 0, 0, false, Time.utc(2000, 12, 31), nil, info)
227
+ end
228
+ end
229
+
230
+ def test_load_negative_utc_offset
231
+ offsets = [
232
+ {:gmtoff => -12492, :isdst => false, :abbrev => 'LMT'},
233
+ {:gmtoff => -12000, :isdst => false, :abbrev => 'XST'},
234
+ {:gmtoff => -8400, :isdst => true, :abbrev => 'XDT'},
235
+ {:gmtoff => -8400, :isdst => false, :abbrev => 'XNST'}]
236
+
237
+ transitions = [
238
+ {:at => Time.utc(1971, 7, 9, 3, 0, 0), :offset_index => 1},
239
+ {:at => Time.utc(1972, 10, 12, 3, 0, 0), :offset_index => 2},
240
+ {:at => Time.utc(1973, 4, 29, 3, 0, 0), :offset_index => 1},
241
+ {:at => Time.utc(1992, 4, 1, 4, 30, 0), :offset_index => 3}]
242
+
243
+ tzif_test(offsets, transitions) do |path, format|
244
+ info = ZoneinfoTimezoneInfo.new('Zone/One', path)
245
+ assert_equal('Zone/One', info.identifier)
246
+
247
+ assert_period(:LMT, -12492, 0, false, nil, Time.utc(1971, 7, 9, 3, 0, 0), info)
248
+ assert_period(:XST, -12000, 0, false, Time.utc(1971, 7, 9, 3, 0, 0), Time.utc(1972, 10, 12, 3, 0, 0), info)
249
+ assert_period(:XDT, -12000, 3600, true, Time.utc(1972, 10, 12, 3, 0, 0), Time.utc(1973, 4, 29, 3, 0, 0), info)
250
+ assert_period(:XST, -12000, 0, false, Time.utc(1973, 4, 29, 3, 0, 0), Time.utc(1992, 4, 1, 4, 30, 0), info)
251
+ assert_period(:XNST, -8400, 0, false, Time.utc(1992, 4, 1, 4, 30, 0), nil, info)
252
+ end
253
+ end
254
+
255
+ def test_load_dst_first
256
+ offsets = [
257
+ {:gmtoff => 7200, :isdst => true, :abbrev => 'XDT'},
258
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
259
+ {:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
260
+ {:gmtoff => 0, :isdst => false, :abbrev => 'XNST'}]
261
+
262
+ transitions = [
263
+ {:at => Time.utc(1979, 1, 2), :offset_index => 2},
264
+ {:at => Time.utc(1980, 4, 22), :offset_index => 0},
265
+ {:at => Time.utc(1980, 10, 21), :offset_index => 2},
266
+ {:at => Time.utc(2000, 12, 31), :offset_index => 3}]
267
+
268
+ tzif_test(offsets, transitions) do |path, format|
269
+ info = ZoneinfoTimezoneInfo.new('Zone/Two', path)
270
+ assert_equal('Zone/Two', info.identifier)
271
+
272
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(1979, 1, 2), info)
273
+ end
274
+ end
275
+
276
+ def test_load_no_transitions
277
+ offsets = [{:gmtoff => -12094, :isdst => false, :abbrev => 'LT'}]
278
+
279
+ tzif_test(offsets, []) do |path, format|
280
+ info = ZoneinfoTimezoneInfo.new('Zone/three', path)
281
+ assert_equal('Zone/three', info.identifier)
282
+
283
+ assert_period(:LT, -12094, 0, false, nil, nil, info)
284
+ end
285
+ end
286
+
287
+ def test_load_invalid_offset_index
288
+ offsets = [{:gmtoff => -0, :isdst => false, :abbrev => 'LMT'}]
289
+ transitions = [{:at => Time.utc(2000, 12, 31), :offset_index => 2}]
290
+
291
+ tzif_test(offsets, transitions) do |path, format|
292
+ assert_raises(InvalidZoneinfoFile) do
293
+ ZoneinfoTimezoneInfo.new('Zone', path)
294
+ end
295
+ end
296
+ end
297
+
298
+ def test_load_with_leap_seconds
299
+ offsets = [{:gmtoff => -0, :isdst => false, :abbrev => 'LMT'}]
300
+ leaps = [{:at => Time.utc(1972,6,30,23,59,60), :seconds => 1}]
301
+
302
+ tzif_test(offsets, [], leaps) do |path, format|
303
+ assert_raises(InvalidZoneinfoFile) do
304
+ ZoneinfoTimezoneInfo.new('Zone', path)
305
+ end
306
+ end
307
+ end
308
+
309
+ def test_load_invalid_magic
310
+ ['TZif3', 'tzif2', '12345'].each do |magic|
311
+ offsets = [{:gmtoff => -12094, :isdst => false, :abbrev => 'LT'}]
312
+
313
+ tzif_test(offsets, [], [], :magic => magic) do |path, format|
314
+ assert_raises(InvalidZoneinfoFile) do
315
+ ZoneinfoTimezoneInfo.new('Zone2', path)
316
+ end
317
+ end
318
+ end
319
+ end
320
+
321
+ def test_load_invalid_format
322
+ Tempfile.open('tzinfo-test-zone') do |file|
323
+ file.write('Invalid')
324
+ file.flush
325
+
326
+ assert_raises(InvalidZoneinfoFile) do
327
+ ZoneinfoTimezoneInfo.new('Zone3', file.path)
328
+ end
329
+ end
330
+ end
331
+
332
+ def test_load_missing_abbrev_null_termination
333
+ offsets = [
334
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
335
+ {:gmtoff => 3600, :isdst => false, :abbrev => 'XST'}]
336
+
337
+ transitions = [
338
+ {:at => Time.utc(2000, 1, 1), :offset_index => 1}]
339
+
340
+ tzif_test(offsets, transitions, [], :abbrev_separator => '^') do |path, format|
341
+ assert_raises(InvalidZoneinfoFile) do
342
+ ZoneinfoTimezoneInfo.new('Zone', path)
343
+ end
344
+ end
345
+ end
346
+
347
+ def test_load_out_of_range_abbrev_offsets
348
+ offsets = [
349
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
350
+ {:gmtoff => 3600, :isdst => false, :abbrev => 'XST'}]
351
+
352
+ transitions = [
353
+ {:at => Time.utc(2000, 1, 1), :offset_index => 1}]
354
+
355
+ tzif_test(offsets, transitions, [], :abbrev_offset_base => 8) do |path, format|
356
+ assert_raises(InvalidZoneinfoFile) do
357
+ ZoneinfoTimezoneInfo.new('Zone', path)
358
+ end
359
+ end
360
+ end
361
+
362
+ def test_load_before_epoch
363
+ # Some platforms don't support negative numbers for times before the epoch.
364
+ # Check that they are returned when supported and skipped when not.
365
+
366
+ begin
367
+ Time.at(-1)
368
+ Time.at(-2147483648)
369
+ supports_negative = true
370
+ rescue ArgumentError
371
+ supports_negative = false
372
+ end
373
+
374
+ offsets = [
375
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
376
+ {:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
377
+ {:gmtoff => 7200, :isdst => true, :abbrev => 'XDT'},
378
+ {:gmtoff => 0, :isdst => false, :abbrev => 'XNST'}]
379
+
380
+ transitions = [
381
+ {:at => -694224000, :offset_index => 1}, # Time.utc(1948, 1, 2)
382
+ {:at => -21945600, :offset_index => 2}, # Time.utc(1969, 4, 22)
383
+ {:at => Time.utc(1970, 10, 21), :offset_index => 1},
384
+ {:at => Time.utc(2000, 12, 31), :offset_index => 3}]
385
+
386
+ tzif_test(offsets, transitions) do |path, format|
387
+ info = ZoneinfoTimezoneInfo.new('Zone/Negative', path)
388
+ assert_equal('Zone/Negative', info.identifier)
389
+
390
+ if supports_negative
391
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(1948, 1, 2), info)
392
+ assert_period(:XST, 3600, 0, false, Time.utc(1948, 1, 2), Time.utc(1969, 4, 22), info)
393
+ assert_period(:XDT, 3600, 3600, true, Time.utc(1969, 4, 22), Time.utc(1970, 10, 21), info)
394
+ else
395
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(1970, 10, 21), info)
396
+ end
397
+
398
+ assert_period(:XST, 3600, 0, false, Time.utc(1970, 10, 21), Time.utc(2000, 12, 31), info)
399
+ assert_period(:XNST, 0, 0, false, Time.utc(2000, 12, 31), nil, info)
400
+ end
401
+ end
402
+
403
+ def test_load_64bit
404
+ # Some platforms support 64-bit Times, others only 32-bit. The TZif version
405
+ # 2 format contains both 32-bit and 64-bit times.
406
+
407
+ # Where 64-bit is supported and a TZif 2 file is provided, the 64-bit times
408
+ # should be used, otherwise the 32-bit information should be used.
409
+
410
+ begin
411
+ Time.at(-2147483649)
412
+ Time.at(2147483648)
413
+ supports_64bit = true
414
+ rescue RangeError
415
+ supports_64bit = false
416
+ end
417
+
418
+ offsets = [
419
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
420
+ {:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
421
+ {:gmtoff => 7200, :isdst => true, :abbrev => 'XDT'},
422
+ {:gmtoff => 0, :isdst => false, :abbrev => 'XNST'}]
423
+
424
+ transitions = [
425
+ {:at => -3786739200, :offset_index => 1}, # Time.utc(1850, 1, 2)
426
+ {:at => Time.utc(2003, 4, 22), :offset_index => 2},
427
+ {:at => Time.utc(2003, 10, 21), :offset_index => 1},
428
+ {:at => 2240524800, :offset_index => 3}] # Time.utc(2040, 12, 31)
429
+
430
+ tzif_test(offsets, transitions) do |path, format|
431
+ info = ZoneinfoTimezoneInfo.new('Zone/SixtyFour', path)
432
+ assert_equal('Zone/SixtyFour', info.identifier)
433
+
434
+ if supports_64bit && format == 2
435
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(1850, 1, 2), info)
436
+ assert_period(:XST, 3600, 0, false, Time.utc(1850, 1, 2), Time.utc(2003, 4, 22), info)
437
+ assert_period(:XDT, 3600, 3600, true, Time.utc(2003, 4, 22), Time.utc(2003, 10, 21), info)
438
+ assert_period(:XST, 3600, 0, false, Time.utc(2003, 10, 21), Time.utc(2040, 12, 31), info)
439
+ assert_period(:XNST, 0, 0, false, Time.utc(2040, 12, 31), nil, info)
440
+ else
441
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(2003, 4, 22), info)
442
+ assert_period(:XDT, 3600, 3600, true, Time.utc(2003, 4, 22), Time.utc(2003, 10, 21), info)
443
+ assert_period(:XST, 3600, 0, false, Time.utc(2003, 10, 21), nil, info)
444
+ end
445
+ end
446
+ end
447
+
448
+ def test_load_std_offset_changes
449
+ # The zoneinfo files don't include the offset from standard time, so this
450
+ # has to be derived by looking at changes in the total UTC offset.
451
+
452
+ offsets = [
453
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
454
+ {:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
455
+ {:gmtoff => 7200, :isdst => true, :abbrev => 'XDT'},
456
+ {:gmtoff => 10800, :isdst => true, :abbrev => 'XDDT'}]
457
+
458
+ transitions = [
459
+ {:at => Time.utc(2000, 1, 1), :offset_index => 1},
460
+ {:at => Time.utc(2000, 2, 1), :offset_index => 2},
461
+ {:at => Time.utc(2000, 3, 1), :offset_index => 3},
462
+ {:at => Time.utc(2000, 4, 1), :offset_index => 1}]
463
+
464
+ tzif_test(offsets, transitions) do |path, format|
465
+ info = ZoneinfoTimezoneInfo.new('Zone/DoubleDaylight', path)
466
+ assert_equal('Zone/DoubleDaylight', info.identifier)
467
+
468
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(2000, 1, 1), info)
469
+ assert_period(:XST, 3600, 0, false, Time.utc(2000, 1, 1), Time.utc(2000, 2, 1), info)
470
+ assert_period(:XDT, 3600, 3600, true, Time.utc(2000, 2, 1), Time.utc(2000, 3, 1), info)
471
+ assert_period(:XDDT, 3600, 7200, true, Time.utc(2000, 3, 1), Time.utc(2000, 4, 1), info)
472
+ assert_period(:XST, 3600, 0, false, Time.utc(2000, 4, 1), nil, info)
473
+ end
474
+ end
475
+
476
+ def test_load_std_offset_changes_jump_to_double_dst
477
+ # The zoneinfo files don't include the offset from standard time, so this
478
+ # has to be derived by looking at changes in the total UTC offset.
479
+
480
+ offsets = [
481
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
482
+ {:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
483
+ {:gmtoff => 10800, :isdst => true, :abbrev => 'XDDT'}]
484
+
485
+ transitions = [
486
+ {:at => Time.utc(2000, 4, 1), :offset_index => 1},
487
+ {:at => Time.utc(2000, 5, 1), :offset_index => 2},
488
+ {:at => Time.utc(2000, 6, 1), :offset_index => 1}]
489
+
490
+ tzif_test(offsets, transitions) do |path, format|
491
+ info = ZoneinfoTimezoneInfo.new('Zone/DoubleDaylight', path)
492
+ assert_equal('Zone/DoubleDaylight', info.identifier)
493
+
494
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(2000, 4, 1), info)
495
+ assert_period(:XST, 3600, 0, false, Time.utc(2000, 4, 1), Time.utc(2000, 5, 1), info)
496
+ assert_period(:XDDT, 3600, 7200, true, Time.utc(2000, 5, 1), Time.utc(2000, 6, 1), info)
497
+ assert_period(:XST, 3600, 0, false, Time.utc(2000, 6, 1), nil, info)
498
+ end
499
+ end
500
+
501
+ def test_load_std_offset_changes_negative
502
+ # The zoneinfo files don't include the offset from standard time, so this
503
+ # has to be derived by looking at changes in the total UTC offset.
504
+
505
+ offsets = [
506
+ {:gmtoff => -10821, :isdst => false, :abbrev => 'LMT'},
507
+ {:gmtoff => -10800, :isdst => false, :abbrev => 'XST'},
508
+ {:gmtoff => -7200, :isdst => true, :abbrev => 'XDT'},
509
+ {:gmtoff => -3600, :isdst => true, :abbrev => 'XDDT'}]
510
+
511
+ transitions = [
512
+ {:at => Time.utc(2000, 1, 1), :offset_index => 1},
513
+ {:at => Time.utc(2000, 2, 1), :offset_index => 2},
514
+ {:at => Time.utc(2000, 3, 1), :offset_index => 3},
515
+ {:at => Time.utc(2000, 4, 1), :offset_index => 1},
516
+ {:at => Time.utc(2000, 5, 1), :offset_index => 3},
517
+ {:at => Time.utc(2000, 6, 1), :offset_index => 1}]
518
+
519
+ tzif_test(offsets, transitions) do |path, format|
520
+ info = ZoneinfoTimezoneInfo.new('Zone/DoubleDaylight', path)
521
+ assert_equal('Zone/DoubleDaylight', info.identifier)
522
+
523
+ assert_period(:LMT, -10821, 0, false, nil, Time.utc(2000, 1, 1), info)
524
+ assert_period(:XST, -10800, 0, false, Time.utc(2000, 1, 1), Time.utc(2000, 2, 1), info)
525
+ assert_period(:XDT, -10800, 3600, true, Time.utc(2000, 2, 1), Time.utc(2000, 3, 1), info)
526
+ assert_period(:XDDT, -10800, 7200, true, Time.utc(2000, 3, 1), Time.utc(2000, 4, 1), info)
527
+ assert_period(:XST, -10800, 0, false, Time.utc(2000, 4, 1), Time.utc(2000, 5, 1), info)
528
+ assert_period(:XDDT, -10800, 7200, true, Time.utc(2000, 5, 1), Time.utc(2000, 6, 1), info)
529
+ assert_period(:XST, -10800, 0, false, Time.utc(2000, 6, 1), nil, info)
530
+ end
531
+ end
532
+
533
+ def test_load_starts_two_hour_std_offset
534
+ # The zoneinfo files don't include the offset from standard time, so this
535
+ # has to be derived by looking at changes in the total UTC offset.
536
+
537
+ offsets = [
538
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
539
+ {:gmtoff => 3600, :isdst => false, :abbrev => 'XST'},
540
+ {:gmtoff => 7200, :isdst => true, :abbrev => 'XDT'},
541
+ {:gmtoff => 10800, :isdst => true, :abbrev => 'XDDT'}]
542
+
543
+ transitions = [
544
+ {:at => Time.utc(2000, 1, 1), :offset_index => 3},
545
+ {:at => Time.utc(2000, 2, 1), :offset_index => 2},
546
+ {:at => Time.utc(2000, 3, 1), :offset_index => 1}]
547
+
548
+ tzif_test(offsets, transitions) do |path, format|
549
+ info = ZoneinfoTimezoneInfo.new('Zone/DoubleDaylight', path)
550
+ assert_equal('Zone/DoubleDaylight', info.identifier)
551
+
552
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(2000, 1, 1), info)
553
+ assert_period(:XDDT, 3600, 7200, true, Time.utc(2000, 1, 1), Time.utc(2000, 2, 1), info)
554
+ assert_period(:XDT, 3600, 3600, true, Time.utc(2000, 2, 1), Time.utc(2000, 3, 1), info)
555
+ assert_period(:XST, 3600, 0, false, Time.utc(2000, 3, 1), nil, info)
556
+ end
557
+ end
558
+
559
+ def test_load_starts_all_same_dst_offset
560
+ # The zoneinfo files don't include the offset from standard time, so this
561
+ # has to be derived by looking at changes in the total UTC offset.
562
+ #
563
+ # If there are no changes in the UTC offset (ignoring the first offset,
564
+ # which is usually local mean time), then a value of 1 hour is used as the
565
+ # standard time offset.
566
+
567
+ offsets = [
568
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
569
+ {:gmtoff => 7200, :isdst => true, :abbrev => 'XDDT'}]
570
+
571
+ transitions = [
572
+ {:at => Time.utc(2000, 1, 1), :offset_index => 1}]
573
+
574
+ tzif_test(offsets, transitions) do |path, format|
575
+ info = ZoneinfoTimezoneInfo.new('Zone/DoubleDaylight', path)
576
+ assert_equal('Zone/DoubleDaylight', info.identifier)
577
+
578
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(2000, 1, 1), info)
579
+ assert_period(:XDDT, 3600, 3600, true, Time.utc(2000, 1, 1), nil, info)
580
+ end
581
+ end
582
+
583
+ def test_load_switch_to_dst_and_change_utc_offset
584
+ # The zoneinfo files don't include the offset from standard time, so this
585
+ # has to be derived by looking at changes in the total UTC offset.
586
+
587
+ # Switch from non-DST to DST at the same time as moving the UTC offset
588
+ # back an hour (i.e. wall clock time doesn't change).
589
+
590
+ offsets = [
591
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
592
+ {:gmtoff => 3600, :isdst => false, :abbrev => 'YST'},
593
+ {:gmtoff => 3600, :isdst => true, :abbrev => 'XDT'}]
594
+
595
+ transitions = [
596
+ {:at => Time.utc(2000, 1, 1), :offset_index => 1},
597
+ {:at => Time.utc(2000, 2, 1), :offset_index => 2}]
598
+
599
+ tzif_test(offsets, transitions) do |path, format|
600
+ info = ZoneinfoTimezoneInfo.new('Zone/DoubleDaylight', path)
601
+ assert_equal('Zone/DoubleDaylight', info.identifier)
602
+
603
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(2000, 1, 1), info)
604
+ assert_period(:YST, 3600, 0, false, Time.utc(2000, 1, 1), Time.utc(2000, 2, 1), info)
605
+ assert_period(:XDT, 0, 3600, true, Time.utc(2000, 2, 1), nil, info)
606
+ end
607
+ end
608
+
609
+ def test_load_in_safe_mode
610
+ offsets = [{:gmtoff => -12094, :isdst => false, :abbrev => 'LT'}]
611
+
612
+ tzif_test(offsets, []) do |path, format|
613
+ # untaint only required for Ruby 1.9.2
614
+ path.untaint
615
+
616
+ safe_test do
617
+ info = ZoneinfoTimezoneInfo.new('Zone/three', path)
618
+ assert_equal('Zone/three', info.identifier)
619
+
620
+ assert_period(:LT, -12094, 0, false, nil, nil, info)
621
+ end
622
+ end
623
+ end
624
+
625
+ def test_load_encoding
626
+ # tzfile.5 doesn't specify an encoding, but the source data is in ASCII.
627
+ # ZoneinfoTimezoneInfo will load as UTF-8 (a superset of ASCII).
628
+
629
+ offsets = [
630
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
631
+ {:gmtoff => 3600, :isdst => false, :abbrev => 'XST©'}]
632
+
633
+ transitions = [
634
+ {:at => Time.utc(1971, 1, 2), :offset_index => 1}]
635
+
636
+ tzif_test(offsets, transitions) do |path, format|
637
+ info = ZoneinfoTimezoneInfo.new('Zone/One', path)
638
+ assert_equal('Zone/One', info.identifier)
639
+
640
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(1971, 1, 2), info)
641
+ assert_period(:"XST©", 3600, 0, false, Time.utc(1971, 1, 2), nil, info)
642
+ end
643
+ end
644
+
645
+ def test_load_binmode
646
+ offsets = [
647
+ {:gmtoff => 3542, :isdst => false, :abbrev => 'LMT'},
648
+ {:gmtoff => 3600, :isdst => false, :abbrev => 'XST'}]
649
+
650
+ # Transition time that includes CRLF (4EFF0D0A).
651
+ # Test that this doesn't get corrupted by translating CRLF to LF.
652
+ transitions = [
653
+ {:at => Time.utc(2011, 12, 31, 13, 24, 26), :offset_index => 1}]
654
+
655
+ tzif_test(offsets, transitions) do |path, format|
656
+ info = ZoneinfoTimezoneInfo.new('Zone/One', path)
657
+ assert_equal('Zone/One', info.identifier)
658
+
659
+ assert_period(:LMT, 3542, 0, false, nil, Time.utc(2011, 12, 31, 13, 24, 26), info)
660
+ assert_period(:XST, 3600, 0, false, Time.utc(2011, 12, 31, 13, 24, 26), nil, info)
661
+ end
662
+ end
663
+ end