activesupport 2.0.5 → 2.1.0

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

Potentially problematic release.


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

Files changed (236) hide show
  1. data/CHANGELOG +183 -5
  2. data/lib/active_support.rb +6 -2
  3. data/lib/active_support/base64.rb +5 -0
  4. data/lib/active_support/basic_object.rb +23 -4
  5. data/lib/active_support/buffered_logger.rb +17 -3
  6. data/lib/active_support/cache.rb +145 -0
  7. data/lib/active_support/cache/compressed_mem_cache_store.rb +15 -0
  8. data/lib/active_support/cache/drb_store.rb +15 -0
  9. data/lib/active_support/cache/file_store.rb +70 -0
  10. data/lib/active_support/cache/mem_cache_store.rb +100 -0
  11. data/lib/active_support/cache/memory_store.rb +38 -0
  12. data/lib/active_support/callbacks.rb +275 -0
  13. data/lib/active_support/core_ext/array/access.rb +2 -4
  14. data/lib/active_support/core_ext/array/conversions.rb +89 -5
  15. data/lib/active_support/core_ext/array/extract_options.rb +2 -1
  16. data/lib/active_support/core_ext/array/grouping.rb +3 -8
  17. data/lib/active_support/core_ext/array/random_access.rb +1 -1
  18. data/lib/active_support/core_ext/base64.rb +4 -0
  19. data/lib/active_support/core_ext/base64/encoding.rb +13 -0
  20. data/lib/active_support/core_ext/benchmark.rb +12 -0
  21. data/lib/active_support/core_ext/bigdecimal.rb +4 -0
  22. data/lib/active_support/core_ext/bigdecimal/conversions.rb +39 -4
  23. data/lib/active_support/core_ext/blank.rb +5 -2
  24. data/lib/active_support/core_ext/class/attribute_accessors.rb +7 -1
  25. data/lib/active_support/core_ext/class/delegating_attributes.rb +7 -1
  26. data/lib/active_support/core_ext/class/inheritable_attributes.rb +1 -1
  27. data/lib/active_support/core_ext/class/removal.rb +26 -0
  28. data/lib/active_support/core_ext/date/calculations.rb +28 -1
  29. data/lib/active_support/core_ext/date/conversions.rb +1 -0
  30. data/lib/active_support/core_ext/date_time.rb +2 -0
  31. data/lib/active_support/core_ext/date_time/calculations.rb +37 -2
  32. data/lib/active_support/core_ext/date_time/conversions.rb +27 -14
  33. data/lib/active_support/core_ext/enumerable.rb +16 -9
  34. data/lib/active_support/core_ext/exception.rb +8 -0
  35. data/lib/active_support/core_ext/file.rb +6 -6
  36. data/lib/active_support/core_ext/hash/conversions.rb +26 -8
  37. data/lib/active_support/core_ext/hash/indifferent_access.rb +35 -0
  38. data/lib/active_support/core_ext/hash/reverse_merge.rb +4 -1
  39. data/lib/active_support/core_ext/integer/even_odd.rb +10 -5
  40. data/lib/active_support/core_ext/integer/inflections.rb +0 -1
  41. data/lib/active_support/core_ext/kernel/daemonizing.rb +2 -10
  42. data/lib/active_support/core_ext/kernel/reporting.rb +8 -0
  43. data/lib/active_support/core_ext/module/attr_internal.rb +4 -3
  44. data/lib/active_support/core_ext/module/attribute_accessors.rb +11 -1
  45. data/lib/active_support/core_ext/module/delegation.rb +5 -3
  46. data/lib/active_support/core_ext/module/inclusion.rb +19 -0
  47. data/lib/active_support/core_ext/module/introspection.rb +50 -16
  48. data/lib/active_support/core_ext/module/loading.rb +10 -0
  49. data/lib/active_support/core_ext/numeric.rb +3 -1
  50. data/lib/active_support/core_ext/numeric/conversions.rb +19 -0
  51. data/lib/active_support/core_ext/object/instance_variables.rb +52 -0
  52. data/lib/active_support/core_ext/object/misc.rb +1 -1
  53. data/lib/active_support/core_ext/process.rb +1 -0
  54. data/lib/active_support/core_ext/process/daemon.rb +25 -0
  55. data/lib/active_support/core_ext/range/conversions.rb +5 -1
  56. data/lib/active_support/core_ext/range/include_range.rb +8 -0
  57. data/lib/active_support/core_ext/range/overlaps.rb +3 -0
  58. data/lib/active_support/core_ext/string.rb +5 -10
  59. data/lib/active_support/core_ext/string/access.rb +72 -48
  60. data/lib/active_support/core_ext/string/conversions.rb +4 -4
  61. data/lib/active_support/core_ext/string/filters.rb +26 -0
  62. data/lib/active_support/core_ext/string/inflections.rb +56 -64
  63. data/lib/active_support/core_ext/string/iterators.rb +4 -0
  64. data/lib/active_support/core_ext/string/starts_ends_with.rb +12 -4
  65. data/lib/active_support/core_ext/string/unicode.rb +14 -7
  66. data/lib/active_support/core_ext/symbol.rb +1 -1
  67. data/lib/active_support/core_ext/time.rb +2 -0
  68. data/lib/active_support/core_ext/time/calculations.rb +75 -23
  69. data/lib/active_support/core_ext/time/conversions.rb +22 -35
  70. data/lib/active_support/core_ext/time/zones.rb +86 -0
  71. data/lib/active_support/dependencies.rb +92 -80
  72. data/lib/active_support/deprecation.rb +2 -16
  73. data/lib/active_support/duration.rb +4 -4
  74. data/lib/active_support/gzip.rb +25 -0
  75. data/lib/active_support/inflector.rb +92 -69
  76. data/lib/active_support/json.rb +17 -25
  77. data/lib/active_support/json/decoding.rb +1 -1
  78. data/lib/active_support/json/encoders/date.rb +11 -2
  79. data/lib/active_support/json/encoders/date_time.rb +11 -2
  80. data/lib/active_support/json/encoders/enumerable.rb +2 -2
  81. data/lib/active_support/json/encoders/hash.rb +3 -6
  82. data/lib/active_support/json/encoders/object.rb +1 -1
  83. data/lib/active_support/json/encoders/string.rb +8 -2
  84. data/lib/active_support/json/encoders/time.rb +11 -2
  85. data/lib/active_support/json/encoding.rb +0 -1
  86. data/lib/active_support/multibyte/chars.rb +8 -6
  87. data/lib/active_support/multibyte/handlers/utf8_handler.rb +11 -11
  88. data/lib/active_support/ordered_hash.rb +43 -0
  89. data/lib/active_support/ordered_options.rb +0 -38
  90. data/lib/active_support/test_case.rb +10 -2
  91. data/lib/active_support/testing/default.rb +3 -6
  92. data/lib/active_support/testing/setup_and_teardown.rb +93 -0
  93. data/lib/active_support/time_with_zone.rb +283 -0
  94. data/lib/active_support/values/time_zone.rb +336 -123
  95. data/lib/active_support/vendor.rb +12 -0
  96. data/lib/active_support/vendor/memcache-client-1.5.0/memcache.rb +849 -0
  97. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo.rb +33 -0
  98. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/data_timezone.rb +47 -0
  99. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/data_timezone_info.rb +226 -0
  100. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Africa/Algiers.rb +55 -0
  101. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Africa/Cairo.rb +219 -0
  102. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Africa/Casablanca.rb +38 -0
  103. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Africa/Harare.rb +18 -0
  104. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Africa/Johannesburg.rb +25 -0
  105. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Africa/Monrovia.rb +22 -0
  106. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Africa/Nairobi.rb +23 -0
  107. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +166 -0
  108. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Argentina/San_Juan.rb +170 -0
  109. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Bogota.rb +23 -0
  110. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Caracas.rb +23 -0
  111. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Chicago.rb +283 -0
  112. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Chihuahua.rb +136 -0
  113. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Denver.rb +204 -0
  114. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Godthab.rb +161 -0
  115. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Guatemala.rb +27 -0
  116. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Halifax.rb +274 -0
  117. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Indiana/Indianapolis.rb +149 -0
  118. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Juneau.rb +194 -0
  119. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/La_Paz.rb +22 -0
  120. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Lima.rb +35 -0
  121. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Los_Angeles.rb +232 -0
  122. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Mazatlan.rb +139 -0
  123. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Mexico_City.rb +144 -0
  124. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Monterrey.rb +131 -0
  125. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/New_York.rb +282 -0
  126. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Phoenix.rb +30 -0
  127. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Regina.rb +74 -0
  128. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Santiago.rb +205 -0
  129. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/St_Johns.rb +288 -0
  130. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/America/Tijuana.rb +196 -0
  131. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Almaty.rb +67 -0
  132. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Baghdad.rb +73 -0
  133. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Baku.rb +161 -0
  134. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Bangkok.rb +20 -0
  135. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Chongqing.rb +33 -0
  136. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Dhaka.rb +27 -0
  137. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Hong_Kong.rb +87 -0
  138. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Irkutsk.rb +165 -0
  139. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Jakarta.rb +30 -0
  140. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Jerusalem.rb +163 -0
  141. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Kabul.rb +20 -0
  142. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Kamchatka.rb +163 -0
  143. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Karachi.rb +28 -0
  144. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Katmandu.rb +20 -0
  145. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Kolkata.rb +25 -0
  146. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Krasnoyarsk.rb +163 -0
  147. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Kuala_Lumpur.rb +31 -0
  148. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Kuwait.rb +18 -0
  149. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Magadan.rb +163 -0
  150. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Muscat.rb +18 -0
  151. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Novosibirsk.rb +164 -0
  152. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Rangoon.rb +24 -0
  153. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Riyadh.rb +18 -0
  154. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Seoul.rb +34 -0
  155. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Shanghai.rb +35 -0
  156. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Singapore.rb +33 -0
  157. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Taipei.rb +59 -0
  158. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Tashkent.rb +47 -0
  159. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Tbilisi.rb +78 -0
  160. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Tehran.rb +121 -0
  161. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Tokyo.rb +30 -0
  162. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Ulaanbaatar.rb +65 -0
  163. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Urumqi.rb +33 -0
  164. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Vladivostok.rb +164 -0
  165. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Yakutsk.rb +163 -0
  166. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Yekaterinburg.rb +165 -0
  167. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Asia/Yerevan.rb +165 -0
  168. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Atlantic/Azores.rb +270 -0
  169. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Atlantic/Cape_Verde.rb +23 -0
  170. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Atlantic/South_Georgia.rb +18 -0
  171. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Australia/Adelaide.rb +187 -0
  172. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Australia/Brisbane.rb +35 -0
  173. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Australia/Darwin.rb +29 -0
  174. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Australia/Hobart.rb +193 -0
  175. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Australia/Melbourne.rb +185 -0
  176. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Australia/Perth.rb +37 -0
  177. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Australia/Sydney.rb +185 -0
  178. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Etc/UTC.rb +16 -0
  179. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Amsterdam.rb +228 -0
  180. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Athens.rb +185 -0
  181. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Belgrade.rb +163 -0
  182. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Berlin.rb +188 -0
  183. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Bratislava.rb +13 -0
  184. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Brussels.rb +232 -0
  185. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Bucharest.rb +181 -0
  186. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Budapest.rb +197 -0
  187. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Copenhagen.rb +179 -0
  188. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Dublin.rb +276 -0
  189. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Helsinki.rb +163 -0
  190. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Istanbul.rb +218 -0
  191. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Kiev.rb +168 -0
  192. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Lisbon.rb +268 -0
  193. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Ljubljana.rb +13 -0
  194. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/London.rb +288 -0
  195. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Madrid.rb +211 -0
  196. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Minsk.rb +170 -0
  197. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Moscow.rb +181 -0
  198. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Paris.rb +232 -0
  199. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Prague.rb +187 -0
  200. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Riga.rb +176 -0
  201. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Rome.rb +215 -0
  202. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Sarajevo.rb +13 -0
  203. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Skopje.rb +13 -0
  204. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Sofia.rb +173 -0
  205. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Stockholm.rb +165 -0
  206. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Tallinn.rb +172 -0
  207. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Vienna.rb +183 -0
  208. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Vilnius.rb +170 -0
  209. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Warsaw.rb +212 -0
  210. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Europe/Zagreb.rb +13 -0
  211. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Pacific/Auckland.rb +202 -0
  212. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Pacific/Fiji.rb +23 -0
  213. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Pacific/Guam.rb +22 -0
  214. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Pacific/Honolulu.rb +28 -0
  215. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Pacific/Majuro.rb +20 -0
  216. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Pacific/Midway.rb +25 -0
  217. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Pacific/Noumea.rb +25 -0
  218. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Pacific/Pago_Pago.rb +26 -0
  219. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Pacific/Port_Moresby.rb +20 -0
  220. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/definitions/Pacific/Tongatapu.rb +27 -0
  221. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/info_timezone.rb +52 -0
  222. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/linked_timezone.rb +51 -0
  223. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/linked_timezone_info.rb +44 -0
  224. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/offset_rationals.rb +95 -0
  225. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/time_or_datetime.rb +292 -0
  226. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/timezone.rb +508 -0
  227. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/timezone_definition.rb +56 -0
  228. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/timezone_info.rb +40 -0
  229. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/timezone_offset_info.rb +94 -0
  230. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/timezone_period.rb +198 -0
  231. data/lib/active_support/vendor/tzinfo-0.3.8/tzinfo/timezone_transition_info.rb +138 -0
  232. data/lib/active_support/version.rb +2 -2
  233. data/lib/active_support/whiny_nil.rb +30 -10
  234. metadata +175 -5
  235. data/lib/active_support/core_ext/rexml.rb +0 -38
  236. data/lib/active_support/testing.rb +0 -1
@@ -0,0 +1,33 @@
1
+ #--
2
+ # Copyright (c) 2005-2006 Philip Ross
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in all
12
+ # copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #++
22
+
23
+ # Add the directory containing this file to the start of the load path if it
24
+ # isn't there already.
25
+ $:.unshift(File.dirname(__FILE__)) unless
26
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
27
+
28
+ require 'tzinfo/timezone'
29
+ # require 'tzinfo/country'
30
+ # require 'tzinfo/tzdataparser'
31
+ # require 'tzinfo/timezone_proxy'
32
+ require 'tzinfo/data_timezone'
33
+ require 'tzinfo/linked_timezone'
@@ -0,0 +1,47 @@
1
+ #--
2
+ # Copyright (c) 2006 Philip Ross
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in all
12
+ # copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #++
22
+
23
+ require 'tzinfo/info_timezone'
24
+
25
+ module TZInfo
26
+
27
+ # A Timezone based on a DataTimezoneInfo.
28
+ class DataTimezone < InfoTimezone #:nodoc:
29
+
30
+ # Returns the TimezonePeriod for the given UTC time. utc can either be
31
+ # a DateTime, Time or integer timestamp (Time.to_i). Any timezone
32
+ # information in utc is ignored (it is treated as a UTC time).
33
+ #
34
+ # If no TimezonePeriod could be found, PeriodNotFound is raised.
35
+ def period_for_utc(utc)
36
+ info.period_for_utc(utc)
37
+ end
38
+
39
+ # Returns the set of TimezonePeriod instances that are valid for the given
40
+ # local time as an array. If you just want a single period, use
41
+ # period_for_local instead and specify how abiguities should be resolved.
42
+ # Raises PeriodNotFound if no periods are found for the given time.
43
+ def periods_for_local(local)
44
+ info.periods_for_local(local)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,226 @@
1
+ #--
2
+ # Copyright (c) 2006 Philip Ross
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in all
12
+ # copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #++
22
+
23
+ require 'tzinfo/time_or_datetime'
24
+ require 'tzinfo/timezone_info'
25
+ require 'tzinfo/timezone_offset_info'
26
+ require 'tzinfo/timezone_period'
27
+ require 'tzinfo/timezone_transition_info'
28
+
29
+ module TZInfo
30
+ # Thrown if no offsets have been defined when calling period_for_utc or
31
+ # periods_for_local. Indicates an error in the timezone data.
32
+ class NoOffsetsDefined < StandardError
33
+ end
34
+
35
+ # Represents a (non-linked) timezone defined in a data module.
36
+ class DataTimezoneInfo < TimezoneInfo #:nodoc:
37
+
38
+ # Constructs a new TimezoneInfo with its identifier.
39
+ def initialize(identifier)
40
+ super(identifier)
41
+ @offsets = {}
42
+ @transitions = []
43
+ end
44
+
45
+ # Defines a offset. The id uniquely identifies this offset within the
46
+ # timezone. utc_offset and std_offset define the offset in seconds of
47
+ # standard time from UTC and daylight savings from standard time
48
+ # respectively. abbreviation describes the timezone offset (e.g. GMT, BST,
49
+ # EST or EDT).
50
+ #
51
+ # The first offset to be defined is treated as the offset that applies
52
+ # until the first transition. This will usually be in Local Mean Time (LMT).
53
+ #
54
+ # ArgumentError will be raised if the id is already defined.
55
+ def offset(id, utc_offset, std_offset, abbreviation)
56
+ raise ArgumentError, 'Offset already defined' if @offsets.has_key?(id)
57
+
58
+ offset = TimezoneOffsetInfo.new(utc_offset, std_offset, abbreviation)
59
+ @offsets[id] = offset
60
+ @previous_offset = offset unless @previous_offset
61
+ end
62
+
63
+ # Defines a transition. Transitions must be defined in chronological order.
64
+ # ArgumentError will be raised if a transition is added out of order.
65
+ # offset_id refers to an id defined with offset. ArgumentError will be
66
+ # raised if the offset_id cannot be found. numerator_or_time and
67
+ # denomiator specify the time the transition occurs as. See
68
+ # TimezoneTransitionInfo for more detail about specifying times.
69
+ def transition(year, month, offset_id, numerator_or_time, denominator = nil)
70
+ offset = @offsets[offset_id]
71
+ raise ArgumentError, 'Offset not found' unless offset
72
+
73
+ if @transitions_index
74
+ if year < @last_year || (year == @last_year && month < @last_month)
75
+ raise ArgumentError, 'Transitions must be increasing date order'
76
+ end
77
+
78
+ # Record the position of the first transition with this index.
79
+ index = transition_index(year, month)
80
+ @transitions_index[index] ||= @transitions.length
81
+
82
+ # Fill in any gaps
83
+ (index - 1).downto(0) do |i|
84
+ break if @transitions_index[i]
85
+ @transitions_index[i] = @transitions.length
86
+ end
87
+ else
88
+ @transitions_index = [@transitions.length]
89
+ @start_year = year
90
+ @start_month = month
91
+ end
92
+
93
+ @transitions << TimezoneTransitionInfo.new(offset, @previous_offset,
94
+ numerator_or_time, denominator)
95
+ @last_year = year
96
+ @last_month = month
97
+ @previous_offset = offset
98
+ end
99
+
100
+ # Returns the TimezonePeriod for the given UTC time.
101
+ # Raises NoOffsetsDefined if no offsets have been defined.
102
+ def period_for_utc(utc)
103
+ unless @transitions.empty?
104
+ utc = TimeOrDateTime.wrap(utc)
105
+ index = transition_index(utc.year, utc.mon)
106
+
107
+ start_transition = nil
108
+ start = transition_before_end(index)
109
+ if start
110
+ start.downto(0) do |i|
111
+ if @transitions[i].at <= utc
112
+ start_transition = @transitions[i]
113
+ break
114
+ end
115
+ end
116
+ end
117
+
118
+ end_transition = nil
119
+ start = transition_after_start(index)
120
+ if start
121
+ start.upto(@transitions.length - 1) do |i|
122
+ if @transitions[i].at > utc
123
+ end_transition = @transitions[i]
124
+ break
125
+ end
126
+ end
127
+ end
128
+
129
+ if start_transition || end_transition
130
+ TimezonePeriod.new(start_transition, end_transition)
131
+ else
132
+ # Won't happen since there are transitions. Must always find one
133
+ # transition that is either >= or < the specified time.
134
+ raise 'No transitions found in search'
135
+ end
136
+ else
137
+ raise NoOffsetsDefined, 'No offsets have been defined' unless @previous_offset
138
+ TimezonePeriod.new(nil, nil, @previous_offset)
139
+ end
140
+ end
141
+
142
+ # Returns the set of TimezonePeriods for the given local time as an array.
143
+ # Results returned are ordered by increasing UTC start date.
144
+ # Returns an empty array if no periods are found for the given time.
145
+ # Raises NoOffsetsDefined if no offsets have been defined.
146
+ def periods_for_local(local)
147
+ unless @transitions.empty?
148
+ local = TimeOrDateTime.wrap(local)
149
+ index = transition_index(local.year, local.mon)
150
+
151
+ result = []
152
+
153
+ start_index = transition_after_start(index - 1)
154
+ if start_index && @transitions[start_index].local_end > local
155
+ if start_index > 0
156
+ if @transitions[start_index - 1].local_start <= local
157
+ result << TimezonePeriod.new(@transitions[start_index - 1], @transitions[start_index])
158
+ end
159
+ else
160
+ result << TimezonePeriod.new(nil, @transitions[start_index])
161
+ end
162
+ end
163
+
164
+ end_index = transition_before_end(index + 1)
165
+
166
+ if end_index
167
+ start_index = end_index unless start_index
168
+
169
+ start_index.upto(transition_before_end(index + 1)) do |i|
170
+ if @transitions[i].local_start <= local
171
+ if i + 1 < @transitions.length
172
+ if @transitions[i + 1].local_end > local
173
+ result << TimezonePeriod.new(@transitions[i], @transitions[i + 1])
174
+ end
175
+ else
176
+ result << TimezonePeriod.new(@transitions[i], nil)
177
+ end
178
+ end
179
+ end
180
+ end
181
+
182
+ result
183
+ else
184
+ raise NoOffsetsDefined, 'No offsets have been defined' unless @previous_offset
185
+ [TimezonePeriod.new(nil, nil, @previous_offset)]
186
+ end
187
+ end
188
+
189
+ private
190
+ # Returns the index into the @transitions_index array for a given year
191
+ # and month.
192
+ def transition_index(year, month)
193
+ index = (year - @start_year) * 2
194
+ index += 1 if month > 6
195
+ index -= 1 if @start_month > 6
196
+ index
197
+ end
198
+
199
+ # Returns the index into @transitions of the first transition that occurs
200
+ # on or after the start of the given index into @transitions_index.
201
+ # Returns nil if there are no such transitions.
202
+ def transition_after_start(index)
203
+ if index >= @transitions_index.length
204
+ nil
205
+ else
206
+ index = 0 if index < 0
207
+ @transitions_index[index]
208
+ end
209
+ end
210
+
211
+ # Returns the index into @transitions of the first transition that occurs
212
+ # before the end of the given index into @transitions_index.
213
+ # Returns nil if there are no such transitions.
214
+ def transition_before_end(index)
215
+ index = index + 1
216
+
217
+ if index <= 0
218
+ nil
219
+ elsif index >= @transitions_index.length
220
+ @transitions.length - 1
221
+ else
222
+ @transitions_index[index] - 1
223
+ end
224
+ end
225
+ end
226
+ end
@@ -0,0 +1,55 @@
1
+ require 'tzinfo/timezone_definition'
2
+
3
+ module TZInfo
4
+ module Definitions
5
+ module Africa
6
+ module Algiers
7
+ include TimezoneDefinition
8
+
9
+ timezone 'Africa/Algiers' do |tz|
10
+ tz.offset :o0, 732, 0, :LMT
11
+ tz.offset :o1, 561, 0, :PMT
12
+ tz.offset :o2, 0, 0, :WET
13
+ tz.offset :o3, 0, 3600, :WEST
14
+ tz.offset :o4, 3600, 0, :CET
15
+ tz.offset :o5, 3600, 3600, :CEST
16
+
17
+ tz.transition 1891, 3, :o1, 2170625843, 900
18
+ tz.transition 1911, 3, :o2, 69670267013, 28800
19
+ tz.transition 1916, 6, :o3, 58104707, 24
20
+ tz.transition 1916, 10, :o2, 58107323, 24
21
+ tz.transition 1917, 3, :o3, 58111499, 24
22
+ tz.transition 1917, 10, :o2, 58116227, 24
23
+ tz.transition 1918, 3, :o3, 58119899, 24
24
+ tz.transition 1918, 10, :o2, 58124963, 24
25
+ tz.transition 1919, 3, :o3, 58128467, 24
26
+ tz.transition 1919, 10, :o2, 58133699, 24
27
+ tz.transition 1920, 2, :o3, 58136867, 24
28
+ tz.transition 1920, 10, :o2, 58142915, 24
29
+ tz.transition 1921, 3, :o3, 58146323, 24
30
+ tz.transition 1921, 6, :o2, 58148699, 24
31
+ tz.transition 1939, 9, :o3, 58308443, 24
32
+ tz.transition 1939, 11, :o2, 4859173, 2
33
+ tz.transition 1940, 2, :o4, 29156215, 12
34
+ tz.transition 1944, 4, :o5, 58348405, 24
35
+ tz.transition 1944, 10, :o4, 4862743, 2
36
+ tz.transition 1945, 4, :o5, 58357141, 24
37
+ tz.transition 1945, 9, :o4, 58361147, 24
38
+ tz.transition 1946, 10, :o2, 58370411, 24
39
+ tz.transition 1956, 1, :o4, 4871003, 2
40
+ tz.transition 1963, 4, :o2, 58515203, 24
41
+ tz.transition 1971, 4, :o3, 41468400
42
+ tz.transition 1971, 9, :o2, 54774000
43
+ tz.transition 1977, 5, :o3, 231724800
44
+ tz.transition 1977, 10, :o4, 246236400
45
+ tz.transition 1978, 3, :o5, 259545600
46
+ tz.transition 1978, 9, :o4, 275274000
47
+ tz.transition 1979, 10, :o2, 309740400
48
+ tz.transition 1980, 4, :o3, 325468800
49
+ tz.transition 1980, 10, :o2, 341802000
50
+ tz.transition 1981, 5, :o4, 357523200
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,219 @@
1
+ require 'tzinfo/timezone_definition'
2
+
3
+ module TZInfo
4
+ module Definitions
5
+ module Africa
6
+ module Cairo
7
+ include TimezoneDefinition
8
+
9
+ timezone 'Africa/Cairo' do |tz|
10
+ tz.offset :o0, 7500, 0, :LMT
11
+ tz.offset :o1, 7200, 0, :EET
12
+ tz.offset :o2, 7200, 3600, :EEST
13
+
14
+ tz.transition 1900, 9, :o1, 695604503, 288
15
+ tz.transition 1940, 7, :o2, 29157905, 12
16
+ tz.transition 1940, 9, :o1, 19439227, 8
17
+ tz.transition 1941, 4, :o2, 29161193, 12
18
+ tz.transition 1941, 9, :o1, 19442027, 8
19
+ tz.transition 1942, 3, :o2, 29165405, 12
20
+ tz.transition 1942, 10, :o1, 19445275, 8
21
+ tz.transition 1943, 3, :o2, 29169785, 12
22
+ tz.transition 1943, 10, :o1, 19448235, 8
23
+ tz.transition 1944, 3, :o2, 29174177, 12
24
+ tz.transition 1944, 10, :o1, 19451163, 8
25
+ tz.transition 1945, 4, :o2, 29178737, 12
26
+ tz.transition 1945, 10, :o1, 19454083, 8
27
+ tz.transition 1957, 5, :o2, 29231621, 12
28
+ tz.transition 1957, 9, :o1, 19488899, 8
29
+ tz.transition 1958, 4, :o2, 29235893, 12
30
+ tz.transition 1958, 9, :o1, 19491819, 8
31
+ tz.transition 1959, 4, :o2, 58480547, 24
32
+ tz.transition 1959, 9, :o1, 4873683, 2
33
+ tz.transition 1960, 4, :o2, 58489331, 24
34
+ tz.transition 1960, 9, :o1, 4874415, 2
35
+ tz.transition 1961, 4, :o2, 58498091, 24
36
+ tz.transition 1961, 9, :o1, 4875145, 2
37
+ tz.transition 1962, 4, :o2, 58506851, 24
38
+ tz.transition 1962, 9, :o1, 4875875, 2
39
+ tz.transition 1963, 4, :o2, 58515611, 24
40
+ tz.transition 1963, 9, :o1, 4876605, 2
41
+ tz.transition 1964, 4, :o2, 58524395, 24
42
+ tz.transition 1964, 9, :o1, 4877337, 2
43
+ tz.transition 1965, 4, :o2, 58533155, 24
44
+ tz.transition 1965, 9, :o1, 4878067, 2
45
+ tz.transition 1966, 4, :o2, 58541915, 24
46
+ tz.transition 1966, 10, :o1, 4878799, 2
47
+ tz.transition 1967, 4, :o2, 58550675, 24
48
+ tz.transition 1967, 10, :o1, 4879529, 2
49
+ tz.transition 1968, 4, :o2, 58559459, 24
50
+ tz.transition 1968, 10, :o1, 4880261, 2
51
+ tz.transition 1969, 4, :o2, 58568219, 24
52
+ tz.transition 1969, 10, :o1, 4880991, 2
53
+ tz.transition 1970, 4, :o2, 10364400
54
+ tz.transition 1970, 10, :o1, 23587200
55
+ tz.transition 1971, 4, :o2, 41900400
56
+ tz.transition 1971, 10, :o1, 55123200
57
+ tz.transition 1972, 4, :o2, 73522800
58
+ tz.transition 1972, 10, :o1, 86745600
59
+ tz.transition 1973, 4, :o2, 105058800
60
+ tz.transition 1973, 10, :o1, 118281600
61
+ tz.transition 1974, 4, :o2, 136594800
62
+ tz.transition 1974, 10, :o1, 149817600
63
+ tz.transition 1975, 4, :o2, 168130800
64
+ tz.transition 1975, 10, :o1, 181353600
65
+ tz.transition 1976, 4, :o2, 199753200
66
+ tz.transition 1976, 10, :o1, 212976000
67
+ tz.transition 1977, 4, :o2, 231289200
68
+ tz.transition 1977, 10, :o1, 244512000
69
+ tz.transition 1978, 4, :o2, 262825200
70
+ tz.transition 1978, 10, :o1, 276048000
71
+ tz.transition 1979, 4, :o2, 294361200
72
+ tz.transition 1979, 10, :o1, 307584000
73
+ tz.transition 1980, 4, :o2, 325983600
74
+ tz.transition 1980, 10, :o1, 339206400
75
+ tz.transition 1981, 4, :o2, 357519600
76
+ tz.transition 1981, 10, :o1, 370742400
77
+ tz.transition 1982, 7, :o2, 396399600
78
+ tz.transition 1982, 10, :o1, 402278400
79
+ tz.transition 1983, 7, :o2, 426812400
80
+ tz.transition 1983, 10, :o1, 433814400
81
+ tz.transition 1984, 4, :o2, 452214000
82
+ tz.transition 1984, 10, :o1, 465436800
83
+ tz.transition 1985, 4, :o2, 483750000
84
+ tz.transition 1985, 10, :o1, 496972800
85
+ tz.transition 1986, 4, :o2, 515286000
86
+ tz.transition 1986, 10, :o1, 528508800
87
+ tz.transition 1987, 4, :o2, 546822000
88
+ tz.transition 1987, 10, :o1, 560044800
89
+ tz.transition 1988, 4, :o2, 578444400
90
+ tz.transition 1988, 10, :o1, 591667200
91
+ tz.transition 1989, 5, :o2, 610412400
92
+ tz.transition 1989, 10, :o1, 623203200
93
+ tz.transition 1990, 4, :o2, 641516400
94
+ tz.transition 1990, 10, :o1, 654739200
95
+ tz.transition 1991, 4, :o2, 673052400
96
+ tz.transition 1991, 10, :o1, 686275200
97
+ tz.transition 1992, 4, :o2, 704674800
98
+ tz.transition 1992, 10, :o1, 717897600
99
+ tz.transition 1993, 4, :o2, 736210800
100
+ tz.transition 1993, 10, :o1, 749433600
101
+ tz.transition 1994, 4, :o2, 767746800
102
+ tz.transition 1994, 10, :o1, 780969600
103
+ tz.transition 1995, 4, :o2, 799020000
104
+ tz.transition 1995, 9, :o1, 812322000
105
+ tz.transition 1996, 4, :o2, 830469600
106
+ tz.transition 1996, 9, :o1, 843771600
107
+ tz.transition 1997, 4, :o2, 861919200
108
+ tz.transition 1997, 9, :o1, 875221200
109
+ tz.transition 1998, 4, :o2, 893368800
110
+ tz.transition 1998, 9, :o1, 906670800
111
+ tz.transition 1999, 4, :o2, 925423200
112
+ tz.transition 1999, 9, :o1, 938725200
113
+ tz.transition 2000, 4, :o2, 956872800
114
+ tz.transition 2000, 9, :o1, 970174800
115
+ tz.transition 2001, 4, :o2, 988322400
116
+ tz.transition 2001, 9, :o1, 1001624400
117
+ tz.transition 2002, 4, :o2, 1019772000
118
+ tz.transition 2002, 9, :o1, 1033074000
119
+ tz.transition 2003, 4, :o2, 1051221600
120
+ tz.transition 2003, 9, :o1, 1064523600
121
+ tz.transition 2004, 4, :o2, 1083276000
122
+ tz.transition 2004, 9, :o1, 1096578000
123
+ tz.transition 2005, 4, :o2, 1114725600
124
+ tz.transition 2005, 9, :o1, 1128027600
125
+ tz.transition 2006, 4, :o2, 1146175200
126
+ tz.transition 2006, 9, :o1, 1158872400
127
+ tz.transition 2007, 4, :o2, 1177624800
128
+ tz.transition 2007, 9, :o1, 1189112400
129
+ tz.transition 2008, 4, :o2, 1209074400
130
+ tz.transition 2008, 8, :o1, 1219957200
131
+ tz.transition 2009, 4, :o2, 1240524000
132
+ tz.transition 2009, 8, :o1, 1251406800
133
+ tz.transition 2010, 4, :o2, 1272578400
134
+ tz.transition 2010, 8, :o1, 1282856400
135
+ tz.transition 2011, 4, :o2, 1304028000
136
+ tz.transition 2011, 8, :o1, 1314306000
137
+ tz.transition 2012, 4, :o2, 1335477600
138
+ tz.transition 2012, 8, :o1, 1346360400
139
+ tz.transition 2013, 4, :o2, 1366927200
140
+ tz.transition 2013, 8, :o1, 1377810000
141
+ tz.transition 2014, 4, :o2, 1398376800
142
+ tz.transition 2014, 8, :o1, 1409259600
143
+ tz.transition 2015, 4, :o2, 1429826400
144
+ tz.transition 2015, 8, :o1, 1440709200
145
+ tz.transition 2016, 4, :o2, 1461880800
146
+ tz.transition 2016, 8, :o1, 1472158800
147
+ tz.transition 2017, 4, :o2, 1493330400
148
+ tz.transition 2017, 8, :o1, 1504213200
149
+ tz.transition 2018, 4, :o2, 1524780000
150
+ tz.transition 2018, 8, :o1, 1535662800
151
+ tz.transition 2019, 4, :o2, 1556229600
152
+ tz.transition 2019, 8, :o1, 1567112400
153
+ tz.transition 2020, 4, :o2, 1587679200
154
+ tz.transition 2020, 8, :o1, 1598562000
155
+ tz.transition 2021, 4, :o2, 1619733600
156
+ tz.transition 2021, 8, :o1, 1630011600
157
+ tz.transition 2022, 4, :o2, 1651183200
158
+ tz.transition 2022, 8, :o1, 1661461200
159
+ tz.transition 2023, 4, :o2, 1682632800
160
+ tz.transition 2023, 8, :o1, 1693515600
161
+ tz.transition 2024, 4, :o2, 1714082400
162
+ tz.transition 2024, 8, :o1, 1724965200
163
+ tz.transition 2025, 4, :o2, 1745532000
164
+ tz.transition 2025, 8, :o1, 1756414800
165
+ tz.transition 2026, 4, :o2, 1776981600
166
+ tz.transition 2026, 8, :o1, 1787864400
167
+ tz.transition 2027, 4, :o2, 1809036000
168
+ tz.transition 2027, 8, :o1, 1819314000
169
+ tz.transition 2028, 4, :o2, 1840485600
170
+ tz.transition 2028, 8, :o1, 1851368400
171
+ tz.transition 2029, 4, :o2, 1871935200
172
+ tz.transition 2029, 8, :o1, 1882818000
173
+ tz.transition 2030, 4, :o2, 1903384800
174
+ tz.transition 2030, 8, :o1, 1914267600
175
+ tz.transition 2031, 4, :o2, 1934834400
176
+ tz.transition 2031, 8, :o1, 1945717200
177
+ tz.transition 2032, 4, :o2, 1966888800
178
+ tz.transition 2032, 8, :o1, 1977166800
179
+ tz.transition 2033, 4, :o2, 1998338400
180
+ tz.transition 2033, 8, :o1, 2008616400
181
+ tz.transition 2034, 4, :o2, 2029788000
182
+ tz.transition 2034, 8, :o1, 2040670800
183
+ tz.transition 2035, 4, :o2, 2061237600
184
+ tz.transition 2035, 8, :o1, 2072120400
185
+ tz.transition 2036, 4, :o2, 2092687200
186
+ tz.transition 2036, 8, :o1, 2103570000
187
+ tz.transition 2037, 4, :o2, 2124136800
188
+ tz.transition 2037, 8, :o1, 2135019600
189
+ tz.transition 2038, 4, :o2, 29586521, 12
190
+ tz.transition 2038, 8, :o1, 19725299, 8
191
+ tz.transition 2039, 4, :o2, 29590889, 12
192
+ tz.transition 2039, 8, :o1, 19728211, 8
193
+ tz.transition 2040, 4, :o2, 29595257, 12
194
+ tz.transition 2040, 8, :o1, 19731179, 8
195
+ tz.transition 2041, 4, :o2, 29599625, 12
196
+ tz.transition 2041, 8, :o1, 19734091, 8
197
+ tz.transition 2042, 4, :o2, 29603993, 12
198
+ tz.transition 2042, 8, :o1, 19737003, 8
199
+ tz.transition 2043, 4, :o2, 29608361, 12
200
+ tz.transition 2043, 8, :o1, 19739915, 8
201
+ tz.transition 2044, 4, :o2, 29612813, 12
202
+ tz.transition 2044, 8, :o1, 19742827, 8
203
+ tz.transition 2045, 4, :o2, 29617181, 12
204
+ tz.transition 2045, 8, :o1, 19745795, 8
205
+ tz.transition 2046, 4, :o2, 29621549, 12
206
+ tz.transition 2046, 8, :o1, 19748707, 8
207
+ tz.transition 2047, 4, :o2, 29625917, 12
208
+ tz.transition 2047, 8, :o1, 19751619, 8
209
+ tz.transition 2048, 4, :o2, 29630285, 12
210
+ tz.transition 2048, 8, :o1, 19754531, 8
211
+ tz.transition 2049, 4, :o2, 29634737, 12
212
+ tz.transition 2049, 8, :o1, 19757443, 8
213
+ tz.transition 2050, 4, :o2, 29639105, 12
214
+ tz.transition 2050, 8, :o1, 19760355, 8
215
+ end
216
+ end
217
+ end
218
+ end
219
+ end