tzinfo 0.3.61 → 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 (704) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +25 -150
  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 -714
  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 -145
  119. data/lib/tzinfo/definitions/Africa/Casablanca.rb +0 -141
  120. data/lib/tzinfo/definitions/Africa/Ceuta.rb +0 -172
  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 -131
  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 -196
  160. data/lib/tzinfo/definitions/America/Anchorage.rb +0 -196
  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 -174
  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 -140
  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 -199
  190. data/lib/tzinfo/definitions/America/Buenos_Aires.rb +0 -13
  191. data/lib/tzinfo/definitions/America/Cambridge_Bay.rb +0 -173
  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 -283
  199. data/lib/tzinfo/definitions/America/Chihuahua.rb +0 -136
  200. data/lib/tzinfo/definitions/America/Coral_Harbour.rb +0 -13
  201. data/lib/tzinfo/definitions/America/Cordoba.rb +0 -13
  202. data/lib/tzinfo/definitions/America/Costa_Rica.rb +0 -29
  203. data/lib/tzinfo/definitions/America/Creston.rb +0 -13
  204. data/lib/tzinfo/definitions/America/Cuiaba.rb +0 -107
  205. data/lib/tzinfo/definitions/America/Curacao.rb +0 -13
  206. data/lib/tzinfo/definitions/America/Danmarkshavn.rb +0 -53
  207. data/lib/tzinfo/definitions/America/Dawson.rb +0 -117
  208. data/lib/tzinfo/definitions/America/Dawson_Creek.rb +0 -79
  209. data/lib/tzinfo/definitions/America/Denver.rb +0 -204
  210. data/lib/tzinfo/definitions/America/Detroit.rb +0 -188
  211. data/lib/tzinfo/definitions/America/Dominica.rb +0 -13
  212. data/lib/tzinfo/definitions/America/Edmonton.rb +0 -196
  213. data/lib/tzinfo/definitions/America/Eirunepe.rb +0 -52
  214. data/lib/tzinfo/definitions/America/El_Salvador.rb +0 -23
  215. data/lib/tzinfo/definitions/America/Ensenada.rb +0 -13
  216. data/lib/tzinfo/definitions/America/Fort_Nelson.rb +0 -164
  217. data/lib/tzinfo/definitions/America/Fort_Wayne.rb +0 -13
  218. data/lib/tzinfo/definitions/America/Fortaleza.rb +0 -57
  219. data/lib/tzinfo/definitions/America/Glace_Bay.rb +0 -186
  220. data/lib/tzinfo/definitions/America/Godthab.rb +0 -13
  221. data/lib/tzinfo/definitions/America/Goose_Bay.rb +0 -255
  222. data/lib/tzinfo/definitions/America/Grand_Turk.rb +0 -161
  223. data/lib/tzinfo/definitions/America/Grenada.rb +0 -13
  224. data/lib/tzinfo/definitions/America/Guadeloupe.rb +0 -13
  225. data/lib/tzinfo/definitions/America/Guatemala.rb +0 -27
  226. data/lib/tzinfo/definitions/America/Guayaquil.rb +0 -23
  227. data/lib/tzinfo/definitions/America/Guyana.rb +0 -23
  228. data/lib/tzinfo/definitions/America/Halifax.rb +0 -274
  229. data/lib/tzinfo/definitions/America/Havana.rb +0 -201
  230. data/lib/tzinfo/definitions/America/Hermosillo.rb +0 -35
  231. data/lib/tzinfo/definitions/America/Indiana/Indianapolis.rb +0 -149
  232. data/lib/tzinfo/definitions/America/Indiana/Knox.rb +0 -203
  233. data/lib/tzinfo/definitions/America/Indiana/Marengo.rb +0 -153
  234. data/lib/tzinfo/definitions/America/Indiana/Petersburg.rb +0 -166
  235. data/lib/tzinfo/definitions/America/Indiana/Tell_City.rb +0 -148
  236. data/lib/tzinfo/definitions/America/Indiana/Vevay.rb +0 -131
  237. data/lib/tzinfo/definitions/America/Indiana/Vincennes.rb +0 -151
  238. data/lib/tzinfo/definitions/America/Indiana/Winamac.rb +0 -157
  239. data/lib/tzinfo/definitions/America/Indianapolis.rb +0 -13
  240. data/lib/tzinfo/definitions/America/Inuvik.rb +0 -166
  241. data/lib/tzinfo/definitions/America/Iqaluit.rb +0 -170
  242. data/lib/tzinfo/definitions/America/Jamaica.rb +0 -41
  243. data/lib/tzinfo/definitions/America/Jujuy.rb +0 -13
  244. data/lib/tzinfo/definitions/America/Juneau.rb +0 -195
  245. data/lib/tzinfo/definitions/America/Kentucky/Louisville.rb +0 -228
  246. data/lib/tzinfo/definitions/America/Kentucky/Monticello.rb +0 -198
  247. data/lib/tzinfo/definitions/America/Knox_IN.rb +0 -13
  248. data/lib/tzinfo/definitions/America/Kralendijk.rb +0 -13
  249. data/lib/tzinfo/definitions/America/La_Paz.rb +0 -22
  250. data/lib/tzinfo/definitions/America/Lima.rb +0 -35
  251. data/lib/tzinfo/definitions/America/Los_Angeles.rb +0 -232
  252. data/lib/tzinfo/definitions/America/Louisville.rb +0 -13
  253. data/lib/tzinfo/definitions/America/Lower_Princes.rb +0 -13
  254. data/lib/tzinfo/definitions/America/Maceio.rb +0 -59
  255. data/lib/tzinfo/definitions/America/Managua.rb +0 -36
  256. data/lib/tzinfo/definitions/America/Manaus.rb +0 -49
  257. data/lib/tzinfo/definitions/America/Marigot.rb +0 -13
  258. data/lib/tzinfo/definitions/America/Martinique.rb +0 -23
  259. data/lib/tzinfo/definitions/America/Matamoros.rb +0 -131
  260. data/lib/tzinfo/definitions/America/Mazatlan.rb +0 -139
  261. data/lib/tzinfo/definitions/America/Mendoza.rb +0 -13
  262. data/lib/tzinfo/definitions/America/Menominee.rb +0 -190
  263. data/lib/tzinfo/definitions/America/Merida.rb +0 -132
  264. data/lib/tzinfo/definitions/America/Metlakatla.rb +0 -130
  265. data/lib/tzinfo/definitions/America/Mexico_City.rb +0 -144
  266. data/lib/tzinfo/definitions/America/Miquelon.rb +0 -149
  267. data/lib/tzinfo/definitions/America/Moncton.rb +0 -254
  268. data/lib/tzinfo/definitions/America/Monterrey.rb +0 -131
  269. data/lib/tzinfo/definitions/America/Montevideo.rb +0 -110
  270. data/lib/tzinfo/definitions/America/Montreal.rb +0 -13
  271. data/lib/tzinfo/definitions/America/Montserrat.rb +0 -13
  272. data/lib/tzinfo/definitions/America/Nassau.rb +0 -13
  273. data/lib/tzinfo/definitions/America/New_York.rb +0 -282
  274. data/lib/tzinfo/definitions/America/Nipigon.rb +0 -181
  275. data/lib/tzinfo/definitions/America/Nome.rb +0 -196
  276. data/lib/tzinfo/definitions/America/Noronha.rb +0 -57
  277. data/lib/tzinfo/definitions/America/North_Dakota/Beulah.rb +0 -200
  278. data/lib/tzinfo/definitions/America/North_Dakota/Center.rb +0 -200
  279. data/lib/tzinfo/definitions/America/North_Dakota/New_Salem.rb +0 -200
  280. data/lib/tzinfo/definitions/America/Nuuk.rb +0 -161
  281. data/lib/tzinfo/definitions/America/Ojinaga.rb +0 -136
  282. data/lib/tzinfo/definitions/America/Panama.rb +0 -20
  283. data/lib/tzinfo/definitions/America/Pangnirtung.rb +0 -173
  284. data/lib/tzinfo/definitions/America/Paramaribo.rb +0 -24
  285. data/lib/tzinfo/definitions/America/Phoenix.rb +0 -30
  286. data/lib/tzinfo/definitions/America/Port__m__au__m__Prince.rb +0 -131
  287. data/lib/tzinfo/definitions/America/Port_of_Spain.rb +0 -13
  288. data/lib/tzinfo/definitions/America/Porto_Acre.rb +0 -13
  289. data/lib/tzinfo/definitions/America/Porto_Velho.rb +0 -47
  290. data/lib/tzinfo/definitions/America/Puerto_Rico.rb +0 -23
  291. data/lib/tzinfo/definitions/America/Punta_Arenas.rb +0 -138
  292. data/lib/tzinfo/definitions/America/Rainy_River.rb +0 -181
  293. data/lib/tzinfo/definitions/America/Rankin_Inlet.rb +0 -165
  294. data/lib/tzinfo/definitions/America/Recife.rb +0 -57
  295. data/lib/tzinfo/definitions/America/Regina.rb +0 -74
  296. data/lib/tzinfo/definitions/America/Resolute.rb +0 -165
  297. data/lib/tzinfo/definitions/America/Rio_Branco.rb +0 -50
  298. data/lib/tzinfo/definitions/America/Rosario.rb +0 -13
  299. data/lib/tzinfo/definitions/America/Santa_Isabel.rb +0 -13
  300. data/lib/tzinfo/definitions/America/Santarem.rb +0 -49
  301. data/lib/tzinfo/definitions/America/Santiago.rb +0 -205
  302. data/lib/tzinfo/definitions/America/Santo_Domingo.rb +0 -38
  303. data/lib/tzinfo/definitions/America/Sao_Paulo.rb +0 -109
  304. data/lib/tzinfo/definitions/America/Scoresbysund.rb +0 -163
  305. data/lib/tzinfo/definitions/America/Shiprock.rb +0 -13
  306. data/lib/tzinfo/definitions/America/Sitka.rb +0 -194
  307. data/lib/tzinfo/definitions/America/St_Barthelemy.rb +0 -13
  308. data/lib/tzinfo/definitions/America/St_Johns.rb +0 -288
  309. data/lib/tzinfo/definitions/America/St_Kitts.rb +0 -13
  310. data/lib/tzinfo/definitions/America/St_Lucia.rb +0 -13
  311. data/lib/tzinfo/definitions/America/St_Thomas.rb +0 -13
  312. data/lib/tzinfo/definitions/America/St_Vincent.rb +0 -13
  313. data/lib/tzinfo/definitions/America/Swift_Current.rb +0 -44
  314. data/lib/tzinfo/definitions/America/Tegucigalpa.rb +0 -25
  315. data/lib/tzinfo/definitions/America/Thule.rb +0 -139
  316. data/lib/tzinfo/definitions/America/Thunder_Bay.rb +0 -186
  317. data/lib/tzinfo/definitions/America/Tijuana.rb +0 -196
  318. data/lib/tzinfo/definitions/America/Toronto.rb +0 -279
  319. data/lib/tzinfo/definitions/America/Tortola.rb +0 -13
  320. data/lib/tzinfo/definitions/America/Vancouver.rb +0 -236
  321. data/lib/tzinfo/definitions/America/Virgin.rb +0 -13
  322. data/lib/tzinfo/definitions/America/Whitehorse.rb +0 -117
  323. data/lib/tzinfo/definitions/America/Winnipeg.rb +0 -232
  324. data/lib/tzinfo/definitions/America/Yakutat.rb +0 -193
  325. data/lib/tzinfo/definitions/America/Yellowknife.rb +0 -169
  326. data/lib/tzinfo/definitions/Antarctica/Casey.rb +0 -30
  327. data/lib/tzinfo/definitions/Antarctica/Davis.rb +0 -25
  328. data/lib/tzinfo/definitions/Antarctica/DumontDUrville.rb +0 -13
  329. data/lib/tzinfo/definitions/Antarctica/Macquarie.rb +0 -187
  330. data/lib/tzinfo/definitions/Antarctica/Mawson.rb +0 -20
  331. data/lib/tzinfo/definitions/Antarctica/McMurdo.rb +0 -13
  332. data/lib/tzinfo/definitions/Antarctica/Palmer.rb +0 -102
  333. data/lib/tzinfo/definitions/Antarctica/Rothera.rb +0 -18
  334. data/lib/tzinfo/definitions/Antarctica/South_Pole.rb +0 -13
  335. data/lib/tzinfo/definitions/Antarctica/Syowa.rb +0 -13
  336. data/lib/tzinfo/definitions/Antarctica/Troll.rb +0 -111
  337. data/lib/tzinfo/definitions/Antarctica/Vostok.rb +0 -18
  338. data/lib/tzinfo/definitions/Arctic/Longyearbyen.rb +0 -13
  339. data/lib/tzinfo/definitions/Asia/Aden.rb +0 -13
  340. data/lib/tzinfo/definitions/Asia/Almaty.rb +0 -71
  341. data/lib/tzinfo/definitions/Asia/Amman.rb +0 -161
  342. data/lib/tzinfo/definitions/Asia/Anadyr.rb +0 -86
  343. data/lib/tzinfo/definitions/Asia/Aqtau.rb +0 -71
  344. data/lib/tzinfo/definitions/Asia/Aqtobe.rb +0 -72
  345. data/lib/tzinfo/definitions/Asia/Ashgabat.rb +0 -45
  346. data/lib/tzinfo/definitions/Asia/Ashkhabad.rb +0 -13
  347. data/lib/tzinfo/definitions/Asia/Atyrau.rb +0 -72
  348. data/lib/tzinfo/definitions/Asia/Baghdad.rb +0 -73
  349. data/lib/tzinfo/definitions/Asia/Bahrain.rb +0 -13
  350. data/lib/tzinfo/definitions/Asia/Baku.rb +0 -86
  351. data/lib/tzinfo/definitions/Asia/Bangkok.rb +0 -20
  352. data/lib/tzinfo/definitions/Asia/Barnaul.rb +0 -87
  353. data/lib/tzinfo/definitions/Asia/Beirut.rb +0 -185
  354. data/lib/tzinfo/definitions/Asia/Bishkek.rb +0 -72
  355. data/lib/tzinfo/definitions/Asia/Brunei.rb +0 -20
  356. data/lib/tzinfo/definitions/Asia/Calcutta.rb +0 -13
  357. data/lib/tzinfo/definitions/Asia/Chita.rb +0 -87
  358. data/lib/tzinfo/definitions/Asia/Choibalsan.rb +0 -72
  359. data/lib/tzinfo/definitions/Asia/Chongqing.rb +0 -13
  360. data/lib/tzinfo/definitions/Asia/Chungking.rb +0 -13
  361. data/lib/tzinfo/definitions/Asia/Colombo.rb +0 -30
  362. data/lib/tzinfo/definitions/Asia/Dacca.rb +0 -13
  363. data/lib/tzinfo/definitions/Asia/Damascus.rb +0 -195
  364. data/lib/tzinfo/definitions/Asia/Dhaka.rb +0 -28
  365. data/lib/tzinfo/definitions/Asia/Dili.rb +0 -22
  366. data/lib/tzinfo/definitions/Asia/Dubai.rb +0 -18
  367. data/lib/tzinfo/definitions/Asia/Dushanbe.rb +0 -44
  368. data/lib/tzinfo/definitions/Asia/Famagusta.rb +0 -171
  369. data/lib/tzinfo/definitions/Asia/Gaza.rb +0 -196
  370. data/lib/tzinfo/definitions/Asia/Harbin.rb +0 -13
  371. data/lib/tzinfo/definitions/Asia/Hebron.rb +0 -198
  372. data/lib/tzinfo/definitions/Asia/Ho_Chi_Minh.rb +0 -29
  373. data/lib/tzinfo/definitions/Asia/Hong_Kong.rb +0 -89
  374. data/lib/tzinfo/definitions/Asia/Hovd.rb +0 -69
  375. data/lib/tzinfo/definitions/Asia/Irkutsk.rb +0 -88
  376. data/lib/tzinfo/definitions/Asia/Istanbul.rb +0 -13
  377. data/lib/tzinfo/definitions/Asia/Jakarta.rb +0 -30
  378. data/lib/tzinfo/definitions/Asia/Jayapura.rb +0 -22
  379. data/lib/tzinfo/definitions/Asia/Jerusalem.rb +0 -195
  380. data/lib/tzinfo/definitions/Asia/Kabul.rb +0 -20
  381. data/lib/tzinfo/definitions/Asia/Kamchatka.rb +0 -84
  382. data/lib/tzinfo/definitions/Asia/Karachi.rb +0 -32
  383. data/lib/tzinfo/definitions/Asia/Kashgar.rb +0 -13
  384. data/lib/tzinfo/definitions/Asia/Kathmandu.rb +0 -20
  385. data/lib/tzinfo/definitions/Asia/Katmandu.rb +0 -13
  386. data/lib/tzinfo/definitions/Asia/Khandyga.rb +0 -90
  387. data/lib/tzinfo/definitions/Asia/Kolkata.rb +0 -27
  388. data/lib/tzinfo/definitions/Asia/Krasnoyarsk.rb +0 -86
  389. data/lib/tzinfo/definitions/Asia/Kuala_Lumpur.rb +0 -31
  390. data/lib/tzinfo/definitions/Asia/Kuching.rb +0 -38
  391. data/lib/tzinfo/definitions/Asia/Kuwait.rb +0 -13
  392. data/lib/tzinfo/definitions/Asia/Macao.rb +0 -13
  393. data/lib/tzinfo/definitions/Asia/Macau.rb +0 -91
  394. data/lib/tzinfo/definitions/Asia/Magadan.rb +0 -87
  395. data/lib/tzinfo/definitions/Asia/Makassar.rb +0 -24
  396. data/lib/tzinfo/definitions/Asia/Manila.rb +0 -30
  397. data/lib/tzinfo/definitions/Asia/Muscat.rb +0 -13
  398. data/lib/tzinfo/definitions/Asia/Nicosia.rb +0 -171
  399. data/lib/tzinfo/definitions/Asia/Novokuznetsk.rb +0 -84
  400. data/lib/tzinfo/definitions/Asia/Novosibirsk.rb +0 -87
  401. data/lib/tzinfo/definitions/Asia/Omsk.rb +0 -86
  402. data/lib/tzinfo/definitions/Asia/Oral.rb +0 -73
  403. data/lib/tzinfo/definitions/Asia/Phnom_Penh.rb +0 -13
  404. data/lib/tzinfo/definitions/Asia/Pontianak.rb +0 -30
  405. data/lib/tzinfo/definitions/Asia/Pyongyang.rb +0 -24
  406. data/lib/tzinfo/definitions/Asia/Qatar.rb +0 -20
  407. data/lib/tzinfo/definitions/Asia/Qostanay.rb +0 -72
  408. data/lib/tzinfo/definitions/Asia/Qyzylorda.rb +0 -73
  409. data/lib/tzinfo/definitions/Asia/Rangoon.rb +0 -13
  410. data/lib/tzinfo/definitions/Asia/Riyadh.rb +0 -18
  411. data/lib/tzinfo/definitions/Asia/Saigon.rb +0 -13
  412. data/lib/tzinfo/definitions/Asia/Sakhalin.rb +0 -87
  413. data/lib/tzinfo/definitions/Asia/Samarkand.rb +0 -44
  414. data/lib/tzinfo/definitions/Asia/Seoul.rb +0 -50
  415. data/lib/tzinfo/definitions/Asia/Shanghai.rb +0 -47
  416. data/lib/tzinfo/definitions/Asia/Singapore.rb +0 -31
  417. data/lib/tzinfo/definitions/Asia/Srednekolymsk.rb +0 -86
  418. data/lib/tzinfo/definitions/Asia/Taipei.rb +0 -60
  419. data/lib/tzinfo/definitions/Asia/Tashkent.rb +0 -44
  420. data/lib/tzinfo/definitions/Asia/Tbilisi.rb +0 -73
  421. data/lib/tzinfo/definitions/Asia/Tehran.rb +0 -147
  422. data/lib/tzinfo/definitions/Asia/Tel_Aviv.rb +0 -13
  423. data/lib/tzinfo/definitions/Asia/Thimbu.rb +0 -13
  424. data/lib/tzinfo/definitions/Asia/Thimphu.rb +0 -20
  425. data/lib/tzinfo/definitions/Asia/Tokyo.rb +0 -27
  426. data/lib/tzinfo/definitions/Asia/Tomsk.rb +0 -87
  427. data/lib/tzinfo/definitions/Asia/Ujung_Pandang.rb +0 -13
  428. data/lib/tzinfo/definitions/Asia/Ulaanbaatar.rb +0 -69
  429. data/lib/tzinfo/definitions/Asia/Ulan_Bator.rb +0 -13
  430. data/lib/tzinfo/definitions/Asia/Urumqi.rb +0 -18
  431. data/lib/tzinfo/definitions/Asia/Ust__m__Nera.rb +0 -89
  432. data/lib/tzinfo/definitions/Asia/Vientiane.rb +0 -13
  433. data/lib/tzinfo/definitions/Asia/Vladivostok.rb +0 -86
  434. data/lib/tzinfo/definitions/Asia/Yakutsk.rb +0 -86
  435. data/lib/tzinfo/definitions/Asia/Yangon.rb +0 -23
  436. data/lib/tzinfo/definitions/Asia/Yekaterinburg.rb +0 -88
  437. data/lib/tzinfo/definitions/Asia/Yerevan.rb +0 -82
  438. data/lib/tzinfo/definitions/Atlantic/Azores.rb +0 -272
  439. data/lib/tzinfo/definitions/Atlantic/Bermuda.rb +0 -202
  440. data/lib/tzinfo/definitions/Atlantic/Canary.rb +0 -163
  441. data/lib/tzinfo/definitions/Atlantic/Cape_Verde.rb +0 -23
  442. data/lib/tzinfo/definitions/Atlantic/Faeroe.rb +0 -13
  443. data/lib/tzinfo/definitions/Atlantic/Faroe.rb +0 -159
  444. data/lib/tzinfo/definitions/Atlantic/Jan_Mayen.rb +0 -13
  445. data/lib/tzinfo/definitions/Atlantic/Madeira.rb +0 -271
  446. data/lib/tzinfo/definitions/Atlantic/Reykjavik.rb +0 -87
  447. data/lib/tzinfo/definitions/Atlantic/South_Georgia.rb +0 -18
  448. data/lib/tzinfo/definitions/Atlantic/St_Helena.rb +0 -13
  449. data/lib/tzinfo/definitions/Atlantic/Stanley.rb +0 -91
  450. data/lib/tzinfo/definitions/Australia/ACT.rb +0 -13
  451. data/lib/tzinfo/definitions/Australia/Adelaide.rb +0 -187
  452. data/lib/tzinfo/definitions/Australia/Brisbane.rb +0 -35
  453. data/lib/tzinfo/definitions/Australia/Broken_Hill.rb +0 -189
  454. data/lib/tzinfo/definitions/Australia/Canberra.rb +0 -13
  455. data/lib/tzinfo/definitions/Australia/Currie.rb +0 -13
  456. data/lib/tzinfo/definitions/Australia/Darwin.rb +0 -29
  457. data/lib/tzinfo/definitions/Australia/Eucla.rb +0 -37
  458. data/lib/tzinfo/definitions/Australia/Hobart.rb +0 -197
  459. data/lib/tzinfo/definitions/Australia/LHI.rb +0 -13
  460. data/lib/tzinfo/definitions/Australia/Lindeman.rb +0 -39
  461. data/lib/tzinfo/definitions/Australia/Lord_Howe.rb +0 -160
  462. data/lib/tzinfo/definitions/Australia/Melbourne.rb +0 -185
  463. data/lib/tzinfo/definitions/Australia/NSW.rb +0 -13
  464. data/lib/tzinfo/definitions/Australia/North.rb +0 -13
  465. data/lib/tzinfo/definitions/Australia/Perth.rb +0 -37
  466. data/lib/tzinfo/definitions/Australia/Queensland.rb +0 -13
  467. data/lib/tzinfo/definitions/Australia/South.rb +0 -13
  468. data/lib/tzinfo/definitions/Australia/Sydney.rb +0 -185
  469. data/lib/tzinfo/definitions/Australia/Tasmania.rb +0 -13
  470. data/lib/tzinfo/definitions/Australia/Victoria.rb +0 -13
  471. data/lib/tzinfo/definitions/Australia/West.rb +0 -13
  472. data/lib/tzinfo/definitions/Australia/Yancowinna.rb +0 -13
  473. data/lib/tzinfo/definitions/Brazil/Acre.rb +0 -13
  474. data/lib/tzinfo/definitions/Brazil/DeNoronha.rb +0 -13
  475. data/lib/tzinfo/definitions/Brazil/East.rb +0 -13
  476. data/lib/tzinfo/definitions/Brazil/West.rb +0 -13
  477. data/lib/tzinfo/definitions/CET.rb +0 -177
  478. data/lib/tzinfo/definitions/CST6CDT.rb +0 -192
  479. data/lib/tzinfo/definitions/Canada/Atlantic.rb +0 -13
  480. data/lib/tzinfo/definitions/Canada/Central.rb +0 -13
  481. data/lib/tzinfo/definitions/Canada/Eastern.rb +0 -13
  482. data/lib/tzinfo/definitions/Canada/Mountain.rb +0 -13
  483. data/lib/tzinfo/definitions/Canada/Newfoundland.rb +0 -13
  484. data/lib/tzinfo/definitions/Canada/Pacific.rb +0 -13
  485. data/lib/tzinfo/definitions/Canada/Saskatchewan.rb +0 -13
  486. data/lib/tzinfo/definitions/Canada/Yukon.rb +0 -13
  487. data/lib/tzinfo/definitions/Chile/Continental.rb +0 -13
  488. data/lib/tzinfo/definitions/Chile/EasterIsland.rb +0 -13
  489. data/lib/tzinfo/definitions/Cuba.rb +0 -11
  490. data/lib/tzinfo/definitions/EET.rb +0 -163
  491. data/lib/tzinfo/definitions/EST.rb +0 -14
  492. data/lib/tzinfo/definitions/EST5EDT.rb +0 -192
  493. data/lib/tzinfo/definitions/Egypt.rb +0 -11
  494. data/lib/tzinfo/definitions/Eire.rb +0 -11
  495. data/lib/tzinfo/definitions/Etc/GMT.rb +0 -16
  496. data/lib/tzinfo/definitions/Etc/GMT0.rb +0 -13
  497. data/lib/tzinfo/definitions/Etc/GMT__m__0.rb +0 -13
  498. data/lib/tzinfo/definitions/Etc/GMT__m__1.rb +0 -16
  499. data/lib/tzinfo/definitions/Etc/GMT__m__10.rb +0 -16
  500. data/lib/tzinfo/definitions/Etc/GMT__m__11.rb +0 -16
  501. data/lib/tzinfo/definitions/Etc/GMT__m__12.rb +0 -16
  502. data/lib/tzinfo/definitions/Etc/GMT__m__13.rb +0 -16
  503. data/lib/tzinfo/definitions/Etc/GMT__m__14.rb +0 -16
  504. data/lib/tzinfo/definitions/Etc/GMT__m__2.rb +0 -16
  505. data/lib/tzinfo/definitions/Etc/GMT__m__3.rb +0 -16
  506. data/lib/tzinfo/definitions/Etc/GMT__m__4.rb +0 -16
  507. data/lib/tzinfo/definitions/Etc/GMT__m__5.rb +0 -16
  508. data/lib/tzinfo/definitions/Etc/GMT__m__6.rb +0 -16
  509. data/lib/tzinfo/definitions/Etc/GMT__m__7.rb +0 -16
  510. data/lib/tzinfo/definitions/Etc/GMT__m__8.rb +0 -16
  511. data/lib/tzinfo/definitions/Etc/GMT__m__9.rb +0 -16
  512. data/lib/tzinfo/definitions/Etc/GMT__p__0.rb +0 -13
  513. data/lib/tzinfo/definitions/Etc/GMT__p__1.rb +0 -16
  514. data/lib/tzinfo/definitions/Etc/GMT__p__10.rb +0 -16
  515. data/lib/tzinfo/definitions/Etc/GMT__p__11.rb +0 -16
  516. data/lib/tzinfo/definitions/Etc/GMT__p__12.rb +0 -16
  517. data/lib/tzinfo/definitions/Etc/GMT__p__2.rb +0 -16
  518. data/lib/tzinfo/definitions/Etc/GMT__p__3.rb +0 -16
  519. data/lib/tzinfo/definitions/Etc/GMT__p__4.rb +0 -16
  520. data/lib/tzinfo/definitions/Etc/GMT__p__5.rb +0 -16
  521. data/lib/tzinfo/definitions/Etc/GMT__p__6.rb +0 -16
  522. data/lib/tzinfo/definitions/Etc/GMT__p__7.rb +0 -16
  523. data/lib/tzinfo/definitions/Etc/GMT__p__8.rb +0 -16
  524. data/lib/tzinfo/definitions/Etc/GMT__p__9.rb +0 -16
  525. data/lib/tzinfo/definitions/Etc/Greenwich.rb +0 -13
  526. data/lib/tzinfo/definitions/Etc/UCT.rb +0 -13
  527. data/lib/tzinfo/definitions/Etc/UTC.rb +0 -16
  528. data/lib/tzinfo/definitions/Etc/Universal.rb +0 -13
  529. data/lib/tzinfo/definitions/Etc/Zulu.rb +0 -13
  530. data/lib/tzinfo/definitions/Europe/Amsterdam.rb +0 -228
  531. data/lib/tzinfo/definitions/Europe/Andorra.rb +0 -153
  532. data/lib/tzinfo/definitions/Europe/Astrakhan.rb +0 -84
  533. data/lib/tzinfo/definitions/Europe/Athens.rb +0 -185
  534. data/lib/tzinfo/definitions/Europe/Belfast.rb +0 -13
  535. data/lib/tzinfo/definitions/Europe/Belgrade.rb +0 -163
  536. data/lib/tzinfo/definitions/Europe/Berlin.rb +0 -188
  537. data/lib/tzinfo/definitions/Europe/Bratislava.rb +0 -13
  538. data/lib/tzinfo/definitions/Europe/Brussels.rb +0 -232
  539. data/lib/tzinfo/definitions/Europe/Bucharest.rb +0 -181
  540. data/lib/tzinfo/definitions/Europe/Budapest.rb +0 -195
  541. data/lib/tzinfo/definitions/Europe/Busingen.rb +0 -13
  542. data/lib/tzinfo/definitions/Europe/Chisinau.rb +0 -191
  543. data/lib/tzinfo/definitions/Europe/Copenhagen.rb +0 -179
  544. data/lib/tzinfo/definitions/Europe/Dublin.rb +0 -276
  545. data/lib/tzinfo/definitions/Europe/Gibraltar.rb +0 -245
  546. data/lib/tzinfo/definitions/Europe/Guernsey.rb +0 -13
  547. data/lib/tzinfo/definitions/Europe/Helsinki.rb +0 -163
  548. data/lib/tzinfo/definitions/Europe/Isle_of_Man.rb +0 -13
  549. data/lib/tzinfo/definitions/Europe/Istanbul.rb +0 -136
  550. data/lib/tzinfo/definitions/Europe/Jersey.rb +0 -13
  551. data/lib/tzinfo/definitions/Europe/Kaliningrad.rb +0 -103
  552. data/lib/tzinfo/definitions/Europe/Kiev.rb +0 -170
  553. data/lib/tzinfo/definitions/Europe/Kirov.rb +0 -83
  554. data/lib/tzinfo/definitions/Europe/Lisbon.rb +0 -270
  555. data/lib/tzinfo/definitions/Europe/Ljubljana.rb +0 -13
  556. data/lib/tzinfo/definitions/Europe/London.rb +0 -288
  557. data/lib/tzinfo/definitions/Europe/Luxembourg.rb +0 -231
  558. data/lib/tzinfo/definitions/Europe/Madrid.rb +0 -209
  559. data/lib/tzinfo/definitions/Europe/Malta.rb +0 -213
  560. data/lib/tzinfo/definitions/Europe/Mariehamn.rb +0 -13
  561. data/lib/tzinfo/definitions/Europe/Minsk.rb +0 -92
  562. data/lib/tzinfo/definitions/Europe/Monaco.rb +0 -233
  563. data/lib/tzinfo/definitions/Europe/Moscow.rb +0 -104
  564. data/lib/tzinfo/definitions/Europe/Nicosia.rb +0 -13
  565. data/lib/tzinfo/definitions/Europe/Oslo.rb +0 -185
  566. data/lib/tzinfo/definitions/Europe/Paris.rb +0 -232
  567. data/lib/tzinfo/definitions/Europe/Podgorica.rb +0 -13
  568. data/lib/tzinfo/definitions/Europe/Prague.rb +0 -190
  569. data/lib/tzinfo/definitions/Europe/Riga.rb +0 -176
  570. data/lib/tzinfo/definitions/Europe/Rome.rb +0 -215
  571. data/lib/tzinfo/definitions/Europe/Samara.rb +0 -85
  572. data/lib/tzinfo/definitions/Europe/San_Marino.rb +0 -13
  573. data/lib/tzinfo/definitions/Europe/Sarajevo.rb +0 -13
  574. data/lib/tzinfo/definitions/Europe/Saratov.rb +0 -84
  575. data/lib/tzinfo/definitions/Europe/Simferopol.rb +0 -99
  576. data/lib/tzinfo/definitions/Europe/Skopje.rb +0 -13
  577. data/lib/tzinfo/definitions/Europe/Sofia.rb +0 -173
  578. data/lib/tzinfo/definitions/Europe/Stockholm.rb +0 -165
  579. data/lib/tzinfo/definitions/Europe/Tallinn.rb +0 -172
  580. data/lib/tzinfo/definitions/Europe/Tirane.rb +0 -177
  581. data/lib/tzinfo/definitions/Europe/Tiraspol.rb +0 -13
  582. data/lib/tzinfo/definitions/Europe/Ulyanovsk.rb +0 -88
  583. data/lib/tzinfo/definitions/Europe/Uzhgorod.rb +0 -168
  584. data/lib/tzinfo/definitions/Europe/Vaduz.rb +0 -13
  585. data/lib/tzinfo/definitions/Europe/Vatican.rb +0 -13
  586. data/lib/tzinfo/definitions/Europe/Vienna.rb +0 -183
  587. data/lib/tzinfo/definitions/Europe/Vilnius.rb +0 -170
  588. data/lib/tzinfo/definitions/Europe/Volgograd.rb +0 -85
  589. data/lib/tzinfo/definitions/Europe/Warsaw.rb +0 -212
  590. data/lib/tzinfo/definitions/Europe/Zagreb.rb +0 -13
  591. data/lib/tzinfo/definitions/Europe/Zaporozhye.rb +0 -171
  592. data/lib/tzinfo/definitions/Europe/Zurich.rb +0 -165
  593. data/lib/tzinfo/definitions/Factory.rb +0 -14
  594. data/lib/tzinfo/definitions/GB.rb +0 -11
  595. data/lib/tzinfo/definitions/GB__m__Eire.rb +0 -11
  596. data/lib/tzinfo/definitions/GMT.rb +0 -11
  597. data/lib/tzinfo/definitions/GMT0.rb +0 -11
  598. data/lib/tzinfo/definitions/GMT__m__0.rb +0 -11
  599. data/lib/tzinfo/definitions/GMT__p__0.rb +0 -11
  600. data/lib/tzinfo/definitions/Greenwich.rb +0 -11
  601. data/lib/tzinfo/definitions/HST.rb +0 -14
  602. data/lib/tzinfo/definitions/Hongkong.rb +0 -11
  603. data/lib/tzinfo/definitions/Iceland.rb +0 -11
  604. data/lib/tzinfo/definitions/Indian/Antananarivo.rb +0 -13
  605. data/lib/tzinfo/definitions/Indian/Chagos.rb +0 -20
  606. data/lib/tzinfo/definitions/Indian/Christmas.rb +0 -18
  607. data/lib/tzinfo/definitions/Indian/Cocos.rb +0 -18
  608. data/lib/tzinfo/definitions/Indian/Comoro.rb +0 -13
  609. data/lib/tzinfo/definitions/Indian/Kerguelen.rb +0 -18
  610. data/lib/tzinfo/definitions/Indian/Mahe.rb +0 -18
  611. data/lib/tzinfo/definitions/Indian/Maldives.rb +0 -20
  612. data/lib/tzinfo/definitions/Indian/Mauritius.rb +0 -23
  613. data/lib/tzinfo/definitions/Indian/Mayotte.rb +0 -13
  614. data/lib/tzinfo/definitions/Indian/Reunion.rb +0 -18
  615. data/lib/tzinfo/definitions/Iran.rb +0 -11
  616. data/lib/tzinfo/definitions/Israel.rb +0 -11
  617. data/lib/tzinfo/definitions/Jamaica.rb +0 -11
  618. data/lib/tzinfo/definitions/Japan.rb +0 -11
  619. data/lib/tzinfo/definitions/Kwajalein.rb +0 -11
  620. data/lib/tzinfo/definitions/Libya.rb +0 -11
  621. data/lib/tzinfo/definitions/MET.rb +0 -177
  622. data/lib/tzinfo/definitions/MST.rb +0 -14
  623. data/lib/tzinfo/definitions/MST7MDT.rb +0 -192
  624. data/lib/tzinfo/definitions/Mexico/BajaNorte.rb +0 -13
  625. data/lib/tzinfo/definitions/Mexico/BajaSur.rb +0 -13
  626. data/lib/tzinfo/definitions/Mexico/General.rb +0 -13
  627. data/lib/tzinfo/definitions/NZ.rb +0 -11
  628. data/lib/tzinfo/definitions/NZ__m__CHAT.rb +0 -11
  629. data/lib/tzinfo/definitions/Navajo.rb +0 -11
  630. data/lib/tzinfo/definitions/PRC.rb +0 -11
  631. data/lib/tzinfo/definitions/PST8PDT.rb +0 -192
  632. data/lib/tzinfo/definitions/Pacific/Apia.rb +0 -48
  633. data/lib/tzinfo/definitions/Pacific/Auckland.rb +0 -202
  634. data/lib/tzinfo/definitions/Pacific/Bougainville.rb +0 -25
  635. data/lib/tzinfo/definitions/Pacific/Chatham.rb +0 -173
  636. data/lib/tzinfo/definitions/Pacific/Chuuk.rb +0 -25
  637. data/lib/tzinfo/definitions/Pacific/Easter.rb +0 -185
  638. data/lib/tzinfo/definitions/Pacific/Efate.rb +0 -41
  639. data/lib/tzinfo/definitions/Pacific/Enderbury.rb +0 -13
  640. data/lib/tzinfo/definitions/Pacific/Fakaofo.rb +0 -20
  641. data/lib/tzinfo/definitions/Pacific/Fiji.rb +0 -103
  642. data/lib/tzinfo/definitions/Pacific/Funafuti.rb +0 -18
  643. data/lib/tzinfo/definitions/Pacific/Galapagos.rb +0 -23
  644. data/lib/tzinfo/definitions/Pacific/Gambier.rb +0 -18
  645. data/lib/tzinfo/definitions/Pacific/Guadalcanal.rb +0 -18
  646. data/lib/tzinfo/definitions/Pacific/Guam.rb +0 -42
  647. data/lib/tzinfo/definitions/Pacific/Honolulu.rb +0 -28
  648. data/lib/tzinfo/definitions/Pacific/Johnston.rb +0 -13
  649. data/lib/tzinfo/definitions/Pacific/Kanton.rb +0 -22
  650. data/lib/tzinfo/definitions/Pacific/Kiritimati.rb +0 -22
  651. data/lib/tzinfo/definitions/Pacific/Kosrae.rb +0 -30
  652. data/lib/tzinfo/definitions/Pacific/Kwajalein.rb +0 -27
  653. data/lib/tzinfo/definitions/Pacific/Majuro.rb +0 -27
  654. data/lib/tzinfo/definitions/Pacific/Marquesas.rb +0 -18
  655. data/lib/tzinfo/definitions/Pacific/Midway.rb +0 -13
  656. data/lib/tzinfo/definitions/Pacific/Nauru.rb +0 -23
  657. data/lib/tzinfo/definitions/Pacific/Niue.rb +0 -20
  658. data/lib/tzinfo/definitions/Pacific/Norfolk.rb +0 -88
  659. data/lib/tzinfo/definitions/Pacific/Noumea.rb +0 -25
  660. data/lib/tzinfo/definitions/Pacific/Pago_Pago.rb +0 -20
  661. data/lib/tzinfo/definitions/Pacific/Palau.rb +0 -20
  662. data/lib/tzinfo/definitions/Pacific/Pitcairn.rb +0 -20
  663. data/lib/tzinfo/definitions/Pacific/Pohnpei.rb +0 -27
  664. data/lib/tzinfo/definitions/Pacific/Ponape.rb +0 -13
  665. data/lib/tzinfo/definitions/Pacific/Port_Moresby.rb +0 -20
  666. data/lib/tzinfo/definitions/Pacific/Rarotonga.rb +0 -48
  667. data/lib/tzinfo/definitions/Pacific/Saipan.rb +0 -13
  668. data/lib/tzinfo/definitions/Pacific/Samoa.rb +0 -13
  669. data/lib/tzinfo/definitions/Pacific/Tahiti.rb +0 -18
  670. data/lib/tzinfo/definitions/Pacific/Tarawa.rb +0 -18
  671. data/lib/tzinfo/definitions/Pacific/Tongatapu.rb +0 -29
  672. data/lib/tzinfo/definitions/Pacific/Truk.rb +0 -13
  673. data/lib/tzinfo/definitions/Pacific/Wake.rb +0 -18
  674. data/lib/tzinfo/definitions/Pacific/Wallis.rb +0 -18
  675. data/lib/tzinfo/definitions/Pacific/Yap.rb +0 -13
  676. data/lib/tzinfo/definitions/Poland.rb +0 -11
  677. data/lib/tzinfo/definitions/Portugal.rb +0 -11
  678. data/lib/tzinfo/definitions/ROC.rb +0 -11
  679. data/lib/tzinfo/definitions/ROK.rb +0 -11
  680. data/lib/tzinfo/definitions/Singapore.rb +0 -11
  681. data/lib/tzinfo/definitions/Turkey.rb +0 -11
  682. data/lib/tzinfo/definitions/UCT.rb +0 -11
  683. data/lib/tzinfo/definitions/US/Alaska.rb +0 -13
  684. data/lib/tzinfo/definitions/US/Aleutian.rb +0 -13
  685. data/lib/tzinfo/definitions/US/Arizona.rb +0 -13
  686. data/lib/tzinfo/definitions/US/Central.rb +0 -13
  687. data/lib/tzinfo/definitions/US/East__m__Indiana.rb +0 -13
  688. data/lib/tzinfo/definitions/US/Eastern.rb +0 -13
  689. data/lib/tzinfo/definitions/US/Hawaii.rb +0 -13
  690. data/lib/tzinfo/definitions/US/Indiana__m__Starke.rb +0 -13
  691. data/lib/tzinfo/definitions/US/Michigan.rb +0 -13
  692. data/lib/tzinfo/definitions/US/Mountain.rb +0 -13
  693. data/lib/tzinfo/definitions/US/Pacific.rb +0 -13
  694. data/lib/tzinfo/definitions/US/Samoa.rb +0 -13
  695. data/lib/tzinfo/definitions/UTC.rb +0 -11
  696. data/lib/tzinfo/definitions/Universal.rb +0 -11
  697. data/lib/tzinfo/definitions/WET.rb +0 -163
  698. data/lib/tzinfo/definitions/W__m__SU.rb +0 -11
  699. data/lib/tzinfo/definitions/Zulu.rb +0 -11
  700. data/lib/tzinfo/indexes/countries.rb +0 -930
  701. data/lib/tzinfo/indexes/timezones.rb +0 -605
  702. data/lib/tzinfo/tzdataparser.rb +0 -1287
  703. data/test/in_load_path/payload.rb +0 -1
  704. 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