activesupport 2.3.5 → 3.0.0.beta3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. data/CHANGELOG +66 -9
  2. data/lib/active_support/all.rb +2 -7
  3. data/lib/active_support/backtrace_cleaner.rb +31 -9
  4. data/lib/active_support/base64.rb +9 -0
  5. data/lib/active_support/basic_object.rb +7 -10
  6. data/lib/active_support/benchmarkable.rb +60 -0
  7. data/lib/active_support/buffered_logger.rb +14 -9
  8. data/lib/active_support/cache/compressed_mem_cache_store.rb +2 -0
  9. data/lib/active_support/cache/file_store.rb +35 -17
  10. data/lib/active_support/cache/mem_cache_store.rb +32 -23
  11. data/lib/active_support/cache/memory_store.rb +17 -10
  12. data/lib/active_support/cache/strategy/local_cache.rb +9 -1
  13. data/lib/active_support/cache.rb +75 -55
  14. data/lib/active_support/callbacks.rb +490 -169
  15. data/lib/active_support/concern.rb +29 -0
  16. data/lib/active_support/configurable.rb +35 -0
  17. data/lib/active_support/core_ext/array/access.rb +39 -46
  18. data/lib/active_support/core_ext/array/conversions.rb +145 -182
  19. data/lib/active_support/core_ext/array/extract_options.rb +26 -17
  20. data/lib/active_support/core_ext/array/grouping.rb +87 -93
  21. data/lib/active_support/core_ext/array/random_access.rb +4 -10
  22. data/lib/active_support/core_ext/array/uniq_by.rb +17 -0
  23. data/lib/active_support/core_ext/array/wrap.rb +22 -0
  24. data/lib/active_support/core_ext/array.rb +2 -10
  25. data/lib/active_support/core_ext/big_decimal/conversions.rb +27 -0
  26. data/lib/active_support/core_ext/big_decimal.rb +1 -0
  27. data/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +16 -20
  28. data/lib/active_support/core_ext/cgi.rb +0 -4
  29. data/lib/active_support/core_ext/class/attribute.rb +70 -0
  30. data/lib/active_support/core_ext/class/attribute_accessors.rb +40 -31
  31. data/lib/active_support/core_ext/class/delegating_attributes.rb +37 -40
  32. data/lib/active_support/core_ext/class/inheritable_attributes.rb +100 -11
  33. data/lib/active_support/core_ext/class/subclasses.rb +55 -0
  34. data/lib/active_support/core_ext/class.rb +1 -1
  35. data/lib/active_support/core_ext/date/acts_like.rb +8 -0
  36. data/lib/active_support/core_ext/date/calculations.rb +218 -228
  37. data/lib/active_support/core_ext/date/conversions.rb +87 -96
  38. data/lib/active_support/core_ext/date/freeze.rb +31 -0
  39. data/lib/active_support/core_ext/date_time/acts_like.rb +13 -0
  40. data/lib/active_support/core_ext/date_time/calculations.rb +97 -110
  41. data/lib/active_support/core_ext/date_time/conversions.rb +85 -85
  42. data/lib/active_support/core_ext/date_time/zones.rb +17 -0
  43. data/lib/active_support/core_ext/enumerable.rb +18 -13
  44. data/lib/active_support/core_ext/exception.rb +1 -43
  45. data/lib/active_support/core_ext/file/atomic.rb +35 -40
  46. data/lib/active_support/core_ext/file/path.rb +5 -0
  47. data/lib/active_support/core_ext/file.rb +0 -4
  48. data/lib/active_support/core_ext/float/rounding.rb +15 -20
  49. data/lib/active_support/core_ext/float.rb +0 -6
  50. data/lib/active_support/core_ext/hash/conversions.rb +255 -229
  51. data/lib/active_support/core_ext/hash/deep_merge.rb +12 -19
  52. data/lib/active_support/core_ext/hash/diff.rb +11 -17
  53. data/lib/active_support/core_ext/hash/except.rb +21 -22
  54. data/lib/active_support/core_ext/hash/indifferent_access.rb +8 -137
  55. data/lib/active_support/core_ext/hash/keys.rb +38 -45
  56. data/lib/active_support/core_ext/hash/reverse_merge.rb +25 -32
  57. data/lib/active_support/core_ext/hash/slice.rb +35 -37
  58. data/lib/active_support/core_ext/hash.rb +8 -14
  59. data/lib/active_support/core_ext/integer/inflections.rb +10 -16
  60. data/lib/active_support/core_ext/integer/multiple.rb +6 -0
  61. data/lib/active_support/core_ext/integer/time.rb +36 -42
  62. data/lib/active_support/core_ext/integer.rb +1 -7
  63. data/lib/active_support/core_ext/kernel/debugger.rb +1 -1
  64. data/lib/active_support/core_ext/kernel/reporting.rb +9 -7
  65. data/lib/active_support/core_ext/kernel/requires.rb +3 -1
  66. data/lib/active_support/core_ext/kernel/singleton_class.rb +13 -0
  67. data/lib/active_support/core_ext/kernel.rb +1 -1
  68. data/lib/active_support/core_ext/load_error.rb +16 -32
  69. data/lib/active_support/core_ext/logger.rb +3 -2
  70. data/lib/active_support/core_ext/module/aliasing.rb +64 -68
  71. data/lib/active_support/core_ext/module/anonymous.rb +24 -0
  72. data/lib/active_support/core_ext/module/attr_accessor_with_default.rb +1 -1
  73. data/lib/active_support/core_ext/module/attr_internal.rb +4 -4
  74. data/lib/active_support/core_ext/module/attribute_accessors.rb +48 -42
  75. data/lib/active_support/core_ext/module/delegation.rb +22 -11
  76. data/lib/active_support/core_ext/module/deprecation.rb +9 -0
  77. data/lib/active_support/core_ext/module/introspection.rb +77 -79
  78. data/lib/active_support/core_ext/module/method_names.rb +14 -0
  79. data/lib/active_support/core_ext/module/reachable.rb +10 -0
  80. data/lib/active_support/core_ext/module/remove_method.rb +6 -0
  81. data/lib/active_support/core_ext/module/synchronization.rb +4 -1
  82. data/lib/active_support/core_ext/module.rb +7 -18
  83. data/lib/active_support/core_ext/name_error.rb +3 -4
  84. data/lib/active_support/core_ext/numeric/bytes.rb +35 -41
  85. data/lib/active_support/core_ext/numeric/time.rb +70 -74
  86. data/lib/active_support/core_ext/numeric.rb +1 -8
  87. data/lib/active_support/core_ext/object/acts_like.rb +10 -0
  88. data/lib/active_support/core_ext/object/blank.rb +20 -2
  89. data/lib/active_support/core_ext/object/conversions.rb +4 -15
  90. data/lib/active_support/core_ext/object/duplicable.rb +65 -0
  91. data/lib/active_support/core_ext/object/extending.rb +8 -77
  92. data/lib/active_support/core_ext/object/instance_variables.rb +0 -7
  93. data/lib/active_support/core_ext/object/misc.rb +2 -90
  94. data/lib/active_support/core_ext/object/returning.rb +42 -0
  95. data/lib/active_support/core_ext/object/to_param.rb +49 -0
  96. data/lib/active_support/core_ext/object/to_query.rb +27 -0
  97. data/lib/active_support/core_ext/{try.rb → object/try.rb} +4 -4
  98. data/lib/active_support/core_ext/object/with_options.rb +24 -0
  99. data/lib/active_support/core_ext/object.rb +10 -2
  100. data/lib/active_support/core_ext/proc.rb +3 -1
  101. data/lib/active_support/core_ext/process/daemon.rb +17 -19
  102. data/lib/active_support/core_ext/range/blockless_step.rb +24 -27
  103. data/lib/active_support/core_ext/range/conversions.rb +17 -23
  104. data/lib/active_support/core_ext/range/include_range.rb +18 -27
  105. data/lib/active_support/core_ext/range/overlaps.rb +6 -13
  106. data/lib/active_support/core_ext/range.rb +2 -9
  107. data/lib/active_support/core_ext/regexp.rb +5 -0
  108. data/lib/active_support/core_ext/rexml.rb +12 -7
  109. data/lib/active_support/core_ext/string/access.rb +88 -95
  110. data/lib/active_support/core_ext/string/behavior.rb +6 -12
  111. data/lib/active_support/core_ext/string/conversions.rb +20 -21
  112. data/lib/active_support/core_ext/string/exclude.rb +6 -0
  113. data/lib/active_support/core_ext/string/filters.rb +17 -23
  114. data/lib/active_support/core_ext/string/inflections.rb +147 -154
  115. data/lib/active_support/core_ext/string/interpolation.rb +1 -0
  116. data/lib/active_support/core_ext/string/multibyte.rb +68 -74
  117. data/lib/active_support/core_ext/string/output_safety.rb +105 -44
  118. data/lib/active_support/core_ext/string/starts_ends_with.rb +3 -34
  119. data/lib/active_support/core_ext/string/xchar.rb +10 -3
  120. data/lib/active_support/core_ext/string.rb +6 -20
  121. data/lib/active_support/core_ext/time/acts_like.rb +8 -0
  122. data/lib/active_support/core_ext/time/calculations.rb +276 -299
  123. data/lib/active_support/core_ext/time/conversions.rb +79 -84
  124. data/lib/active_support/core_ext/time/marshal.rb +56 -0
  125. data/lib/active_support/core_ext/time/publicize_conversion_methods.rb +10 -0
  126. data/lib/active_support/core_ext/time/zones.rb +73 -81
  127. data/lib/active_support/core_ext/uri.rb +2 -1
  128. data/lib/active_support/core_ext.rb +2 -7
  129. data/lib/active_support/dependencies/autoload.rb +50 -0
  130. data/lib/active_support/dependencies.rb +168 -197
  131. data/lib/active_support/deprecation/behaviors.rb +38 -0
  132. data/lib/active_support/deprecation/method_wrappers.rb +29 -0
  133. data/lib/active_support/deprecation/proxy_wrappers.rb +74 -0
  134. data/lib/active_support/deprecation/reporting.rb +56 -0
  135. data/lib/active_support/deprecation.rb +9 -187
  136. data/lib/active_support/duration.rb +6 -2
  137. data/lib/active_support/hash_with_indifferent_access.rb +141 -0
  138. data/lib/active_support/i18n.rb +3 -0
  139. data/lib/active_support/inflections.rb +1 -1
  140. data/lib/active_support/inflector/inflections.rb +211 -0
  141. data/lib/active_support/inflector/methods.rb +141 -0
  142. data/lib/active_support/inflector/transliterate.rb +77 -0
  143. data/lib/active_support/inflector.rb +4 -403
  144. data/lib/active_support/json/backends/jsongem.rb +16 -10
  145. data/lib/active_support/json/backends/yajl.rb +40 -0
  146. data/lib/active_support/json/backends/yaml.rb +14 -8
  147. data/lib/active_support/json/decoding.rb +17 -1
  148. data/lib/active_support/json/encoding.rb +164 -35
  149. data/lib/active_support/json/variable.rb +4 -3
  150. data/lib/active_support/lazy_load_hooks.rb +17 -0
  151. data/lib/active_support/memoizable.rb +8 -5
  152. data/lib/active_support/message_encryptor.rb +1 -0
  153. data/lib/active_support/message_verifier.rb +12 -29
  154. data/lib/active_support/multibyte/chars.rb +88 -31
  155. data/lib/active_support/multibyte/unicode_database.rb +5 -5
  156. data/lib/active_support/multibyte/utils.rb +6 -7
  157. data/lib/active_support/multibyte.rb +11 -6
  158. data/lib/active_support/notifications/fanout.rb +83 -0
  159. data/lib/active_support/notifications/instrumenter.rb +50 -0
  160. data/lib/active_support/notifications.rb +81 -0
  161. data/lib/active_support/option_merger.rb +2 -0
  162. data/lib/active_support/ordered_hash.rb +28 -11
  163. data/lib/active_support/ordered_options.rb +9 -1
  164. data/lib/active_support/railtie.rb +64 -0
  165. data/lib/active_support/rescuable.rb +11 -6
  166. data/lib/active_support/ruby/shim.rb +21 -0
  167. data/lib/active_support/test_case.rb +10 -8
  168. data/lib/active_support/testing/assertions.rb +17 -0
  169. data/lib/active_support/testing/declarative.rb +31 -12
  170. data/lib/active_support/testing/deprecation.rb +8 -10
  171. data/lib/active_support/testing/isolation.rb +153 -0
  172. data/lib/active_support/testing/pending.rb +48 -0
  173. data/lib/active_support/testing/performance.rb +342 -339
  174. data/lib/active_support/testing/setup_and_teardown.rb +48 -31
  175. data/lib/active_support/time/autoload.rb +5 -0
  176. data/lib/active_support/time.rb +34 -0
  177. data/lib/active_support/time_with_zone.rb +18 -12
  178. data/lib/active_support/values/time_zone.rb +51 -68
  179. data/lib/active_support/version.rb +5 -4
  180. data/lib/active_support/whiny_nil.rb +5 -9
  181. data/lib/active_support/xml_mini/jdom.rb +13 -7
  182. data/lib/active_support/xml_mini/libxml.rb +38 -91
  183. data/lib/active_support/xml_mini/libxmlsax.rb +85 -0
  184. data/lib/active_support/xml_mini/nokogiri.rb +40 -31
  185. data/lib/active_support/xml_mini/nokogirisax.rb +83 -0
  186. data/lib/active_support/xml_mini/rexml.rb +30 -9
  187. data/lib/active_support/xml_mini.rb +2 -0
  188. data/lib/active_support.rb +46 -30
  189. metadata +136 -215
  190. data/lib/active_support/cache/drb_store.rb +0 -14
  191. data/lib/active_support/core_ext/array/wrapper.rb +0 -24
  192. data/lib/active_support/core_ext/base64/encoding.rb +0 -16
  193. data/lib/active_support/core_ext/base64.rb +0 -4
  194. data/lib/active_support/core_ext/bigdecimal/conversions.rb +0 -37
  195. data/lib/active_support/core_ext/bigdecimal.rb +0 -6
  196. data/lib/active_support/core_ext/blank.rb +0 -2
  197. data/lib/active_support/core_ext/class/removal.rb +0 -50
  198. data/lib/active_support/core_ext/date/behavior.rb +0 -42
  199. data/lib/active_support/core_ext/date.rb +0 -10
  200. data/lib/active_support/core_ext/date_time.rb +0 -12
  201. data/lib/active_support/core_ext/duplicable.rb +0 -43
  202. data/lib/active_support/core_ext/float/time.rb +0 -27
  203. data/lib/active_support/core_ext/integer/even_odd.rb +0 -29
  204. data/lib/active_support/core_ext/kernel/daemonizing.rb +0 -7
  205. data/lib/active_support/core_ext/module/inclusion.rb +0 -30
  206. data/lib/active_support/core_ext/module/loading.rb +0 -23
  207. data/lib/active_support/core_ext/module/model_naming.rb +0 -25
  208. data/lib/active_support/core_ext/numeric/conversions.rb +0 -19
  209. data/lib/active_support/core_ext/object/metaclass.rb +0 -13
  210. data/lib/active_support/core_ext/pathname/clean_within.rb +0 -14
  211. data/lib/active_support/core_ext/pathname.rb +0 -7
  212. data/lib/active_support/core_ext/string/bytesize.rb +0 -5
  213. data/lib/active_support/core_ext/string/iterators.rb +0 -23
  214. data/lib/active_support/core_ext/symbol.rb +0 -14
  215. data/lib/active_support/core_ext/time/behavior.rb +0 -13
  216. data/lib/active_support/core_ext/time.rb +0 -42
  217. data/lib/active_support/json/encoders/date.rb +0 -22
  218. data/lib/active_support/json/encoders/date_time.rb +0 -22
  219. data/lib/active_support/json/encoders/enumerable.rb +0 -17
  220. data/lib/active_support/json/encoders/false_class.rb +0 -7
  221. data/lib/active_support/json/encoders/hash.rb +0 -56
  222. data/lib/active_support/json/encoders/nil_class.rb +0 -7
  223. data/lib/active_support/json/encoders/numeric.rb +0 -21
  224. data/lib/active_support/json/encoders/object.rb +0 -10
  225. data/lib/active_support/json/encoders/regexp.rb +0 -9
  226. data/lib/active_support/json/encoders/string.rb +0 -9
  227. data/lib/active_support/json/encoders/symbol.rb +0 -5
  228. data/lib/active_support/json/encoders/time.rb +0 -22
  229. data/lib/active_support/json/encoders/true_class.rb +0 -7
  230. data/lib/active_support/vendor/builder-2.1.2/blankslate.rb +0 -113
  231. data/lib/active_support/vendor/builder-2.1.2/builder/blankslate.rb +0 -20
  232. data/lib/active_support/vendor/builder-2.1.2/builder/css.rb +0 -250
  233. data/lib/active_support/vendor/builder-2.1.2/builder/xchar.rb +0 -115
  234. data/lib/active_support/vendor/builder-2.1.2/builder/xmlbase.rb +0 -139
  235. data/lib/active_support/vendor/builder-2.1.2/builder/xmlevents.rb +0 -63
  236. data/lib/active_support/vendor/builder-2.1.2/builder/xmlmarkup.rb +0 -328
  237. data/lib/active_support/vendor/builder-2.1.2/builder.rb +0 -13
  238. data/lib/active_support/vendor/i18n-0.1.3/MIT-LICENSE +0 -20
  239. data/lib/active_support/vendor/i18n-0.1.3/README.textile +0 -20
  240. data/lib/active_support/vendor/i18n-0.1.3/Rakefile +0 -5
  241. data/lib/active_support/vendor/i18n-0.1.3/i18n.gemspec +0 -27
  242. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n/backend/simple.rb +0 -214
  243. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n/exceptions.rb +0 -53
  244. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n.rb +0 -199
  245. data/lib/active_support/vendor/i18n-0.1.3/test/all.rb +0 -5
  246. data/lib/active_support/vendor/i18n-0.1.3/test/i18n_exceptions_test.rb +0 -99
  247. data/lib/active_support/vendor/i18n-0.1.3/test/i18n_test.rb +0 -124
  248. data/lib/active_support/vendor/i18n-0.1.3/test/locale/en.rb +0 -1
  249. data/lib/active_support/vendor/i18n-0.1.3/test/locale/en.yml +0 -3
  250. data/lib/active_support/vendor/i18n-0.1.3/test/simple_backend_test.rb +0 -567
  251. data/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb +0 -1107
  252. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/data_timezone.rb +0 -47
  253. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/data_timezone_info.rb +0 -228
  254. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Algiers.rb +0 -55
  255. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Cairo.rb +0 -219
  256. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Casablanca.rb +0 -40
  257. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Harare.rb +0 -18
  258. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Johannesburg.rb +0 -25
  259. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Monrovia.rb +0 -22
  260. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Nairobi.rb +0 -23
  261. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +0 -166
  262. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/San_Juan.rb +0 -86
  263. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Bogota.rb +0 -23
  264. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Caracas.rb +0 -23
  265. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Chicago.rb +0 -283
  266. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Chihuahua.rb +0 -136
  267. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Denver.rb +0 -204
  268. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Godthab.rb +0 -161
  269. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Guatemala.rb +0 -27
  270. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Halifax.rb +0 -274
  271. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Indiana/Indianapolis.rb +0 -149
  272. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Juneau.rb +0 -194
  273. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/La_Paz.rb +0 -22
  274. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Lima.rb +0 -35
  275. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Los_Angeles.rb +0 -232
  276. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Mazatlan.rb +0 -139
  277. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Mexico_City.rb +0 -144
  278. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Monterrey.rb +0 -131
  279. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/New_York.rb +0 -282
  280. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Phoenix.rb +0 -30
  281. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Regina.rb +0 -74
  282. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Santiago.rb +0 -205
  283. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Sao_Paulo.rb +0 -171
  284. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/St_Johns.rb +0 -288
  285. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Tijuana.rb +0 -196
  286. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Almaty.rb +0 -67
  287. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Baghdad.rb +0 -73
  288. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Baku.rb +0 -161
  289. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Bangkok.rb +0 -20
  290. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Chongqing.rb +0 -33
  291. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Colombo.rb +0 -30
  292. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Dhaka.rb +0 -27
  293. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Hong_Kong.rb +0 -87
  294. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Irkutsk.rb +0 -165
  295. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Jakarta.rb +0 -30
  296. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Jerusalem.rb +0 -163
  297. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kabul.rb +0 -20
  298. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kamchatka.rb +0 -163
  299. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Karachi.rb +0 -30
  300. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Katmandu.rb +0 -20
  301. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kolkata.rb +0 -25
  302. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Krasnoyarsk.rb +0 -163
  303. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kuala_Lumpur.rb +0 -31
  304. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kuwait.rb +0 -18
  305. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Magadan.rb +0 -163
  306. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Muscat.rb +0 -18
  307. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Novosibirsk.rb +0 -164
  308. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Rangoon.rb +0 -24
  309. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Riyadh.rb +0 -18
  310. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Seoul.rb +0 -34
  311. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Shanghai.rb +0 -35
  312. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Singapore.rb +0 -33
  313. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Taipei.rb +0 -59
  314. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tashkent.rb +0 -47
  315. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tbilisi.rb +0 -78
  316. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tehran.rb +0 -121
  317. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tokyo.rb +0 -30
  318. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Ulaanbaatar.rb +0 -65
  319. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Urumqi.rb +0 -33
  320. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Vladivostok.rb +0 -164
  321. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yakutsk.rb +0 -163
  322. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yekaterinburg.rb +0 -165
  323. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yerevan.rb +0 -165
  324. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/Azores.rb +0 -270
  325. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/Cape_Verde.rb +0 -23
  326. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/South_Georgia.rb +0 -18
  327. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Adelaide.rb +0 -187
  328. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Brisbane.rb +0 -35
  329. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Darwin.rb +0 -29
  330. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Hobart.rb +0 -193
  331. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Melbourne.rb +0 -185
  332. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Perth.rb +0 -37
  333. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Sydney.rb +0 -185
  334. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Etc/UTC.rb +0 -16
  335. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Amsterdam.rb +0 -228
  336. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Athens.rb +0 -185
  337. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Belgrade.rb +0 -163
  338. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Berlin.rb +0 -188
  339. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Bratislava.rb +0 -13
  340. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Brussels.rb +0 -232
  341. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Bucharest.rb +0 -181
  342. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Budapest.rb +0 -197
  343. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Copenhagen.rb +0 -179
  344. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Dublin.rb +0 -276
  345. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Helsinki.rb +0 -163
  346. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Istanbul.rb +0 -218
  347. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Kiev.rb +0 -168
  348. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Lisbon.rb +0 -268
  349. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Ljubljana.rb +0 -13
  350. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/London.rb +0 -288
  351. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Madrid.rb +0 -211
  352. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Minsk.rb +0 -170
  353. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Moscow.rb +0 -181
  354. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Paris.rb +0 -232
  355. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Prague.rb +0 -187
  356. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Riga.rb +0 -176
  357. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Rome.rb +0 -215
  358. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Sarajevo.rb +0 -13
  359. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Skopje.rb +0 -13
  360. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Sofia.rb +0 -173
  361. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Stockholm.rb +0 -165
  362. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Tallinn.rb +0 -172
  363. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Vienna.rb +0 -183
  364. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Vilnius.rb +0 -170
  365. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Warsaw.rb +0 -212
  366. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Zagreb.rb +0 -13
  367. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Auckland.rb +0 -202
  368. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Fiji.rb +0 -23
  369. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Guam.rb +0 -22
  370. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Honolulu.rb +0 -28
  371. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Majuro.rb +0 -20
  372. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Midway.rb +0 -25
  373. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Noumea.rb +0 -25
  374. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Pago_Pago.rb +0 -26
  375. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Port_Moresby.rb +0 -20
  376. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Tongatapu.rb +0 -27
  377. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/info_timezone.rb +0 -52
  378. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/linked_timezone.rb +0 -51
  379. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/linked_timezone_info.rb +0 -44
  380. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/offset_rationals.rb +0 -98
  381. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/ruby_core_support.rb +0 -56
  382. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/time_or_datetime.rb +0 -292
  383. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone.rb +0 -508
  384. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_definition.rb +0 -56
  385. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_info.rb +0 -40
  386. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_offset_info.rb +0 -94
  387. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_period.rb +0 -198
  388. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_transition_info.rb +0 -129
  389. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo.rb +0 -33
  390. data/lib/active_support/vendor.rb +0 -28
  391. data/lib/activesupport.rb +0 -2
@@ -1,18 +1,26 @@
1
- require 'active_support/callbacks'
2
-
3
1
  module ActiveSupport
4
2
  module Testing
5
3
  module SetupAndTeardown
6
- def self.included(base)
7
- base.class_eval do
8
- include ActiveSupport::Callbacks
9
- define_callbacks :setup, :teardown
4
+ extend ActiveSupport::Concern
10
5
 
11
- if defined?(MiniTest::Assertions) && TestCase < MiniTest::Assertions
12
- include ForMiniTest
13
- else
14
- include ForClassicTestUnit
15
- end
6
+ included do
7
+ include ActiveSupport::Callbacks
8
+ define_callbacks :setup, :teardown
9
+
10
+ if defined?(MiniTest::Assertions) && TestCase < MiniTest::Assertions
11
+ include ForMiniTest
12
+ else
13
+ include ForClassicTestUnit
14
+ end
15
+ end
16
+
17
+ module ClassMethods
18
+ def setup(*args, &block)
19
+ set_callback(:setup, :before, *args, &block)
20
+ end
21
+
22
+ def teardown(*args, &block)
23
+ set_callback(:teardown, :after, *args, &block)
16
24
  end
17
25
  end
18
26
 
@@ -20,15 +28,16 @@ module ActiveSupport
20
28
  def run(runner)
21
29
  result = '.'
22
30
  begin
23
- run_callbacks :setup
24
- result = super
31
+ _run_setup_callbacks do
32
+ result = super
33
+ end
25
34
  rescue Exception => e
26
- result = runner.puke(self.class, self.name, e)
35
+ result = runner.puke(self.class, method_name, e)
27
36
  ensure
28
37
  begin
29
- run_callbacks :teardown, :enumerator => :reverse_each
38
+ _run_teardown_callbacks
30
39
  rescue Exception => e
31
- result = runner.puke(self.class, self.name, e)
40
+ result = runner.puke(self.class, method_name, e)
32
41
  end
33
42
  end
34
43
  result
@@ -44,23 +53,17 @@ module ActiveSupport
44
53
  def run(result)
45
54
  return if @method_name.to_s == "default_test"
46
55
 
47
- if using_mocha = respond_to?(:mocha_verify)
48
- assertion_counter_klass = if defined?(Mocha::TestCaseAdapter::AssertionCounter)
49
- Mocha::TestCaseAdapter::AssertionCounter
50
- else
51
- Mocha::Integration::TestUnit::AssertionCounter
52
- end
53
- assertion_counter = assertion_counter_klass.new(result)
54
- end
55
-
56
+ mocha_counter = retrieve_mocha_counter(result)
56
57
  yield(Test::Unit::TestCase::STARTED, name)
57
58
  @_result = result
59
+
58
60
  begin
59
61
  begin
60
- run_callbacks :setup
61
- setup
62
- __send__(@method_name)
63
- mocha_verify(assertion_counter) if using_mocha
62
+ _run_setup_callbacks do
63
+ setup
64
+ __send__(@method_name)
65
+ mocha_verify(mocha_counter) if mocha_counter
66
+ end
64
67
  rescue Mocha::ExpectationError => e
65
68
  add_failure(e.message, e.backtrace)
66
69
  rescue Test::Unit::AssertionFailedError => e
@@ -71,7 +74,7 @@ module ActiveSupport
71
74
  ensure
72
75
  begin
73
76
  teardown
74
- run_callbacks :teardown, :enumerator => :reverse_each
77
+ _run_teardown_callbacks
75
78
  rescue Test::Unit::AssertionFailedError => e
76
79
  add_failure(e.message, e.backtrace)
77
80
  rescue Exception => e
@@ -80,12 +83,26 @@ module ActiveSupport
80
83
  end
81
84
  end
82
85
  ensure
83
- mocha_teardown if using_mocha
86
+ mocha_teardown if mocha_counter
84
87
  end
88
+
85
89
  result.add_run
86
90
  yield(Test::Unit::TestCase::FINISHED, name)
87
91
  end
92
+
93
+ protected
94
+
95
+ def retrieve_mocha_counter(result) #:nodoc:
96
+ if using_mocha = respond_to?(:mocha_verify)
97
+ if defined?(Mocha::TestCaseAdapter::AssertionCounter)
98
+ Mocha::TestCaseAdapter::AssertionCounter.new(result)
99
+ else
100
+ Mocha::Integration::TestUnit::AssertionCounter.new(result)
101
+ end
102
+ end
103
+ end
88
104
  end
105
+
89
106
  end
90
107
  end
91
108
  end
@@ -0,0 +1,5 @@
1
+ module ActiveSupport
2
+ autoload :Duration, 'active_support/duration'
3
+ autoload :TimeWithZone, 'active_support/time_with_zone'
4
+ autoload :TimeZone, 'active_support/values/time_zone'
5
+ end
@@ -0,0 +1,34 @@
1
+ require 'active_support'
2
+
3
+ module ActiveSupport
4
+ autoload :Duration, 'active_support/duration'
5
+ autoload :TimeWithZone, 'active_support/time_with_zone'
6
+ autoload :TimeZone, 'active_support/values/time_zone'
7
+
8
+ on_load_all do
9
+ [Duration, TimeWithZone, TimeZone]
10
+ end
11
+ end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ require 'active_support/core_ext/time/publicize_conversion_methods'
17
+ require 'active_support/core_ext/time/marshal'
18
+ require 'active_support/core_ext/time/acts_like'
19
+ require 'active_support/core_ext/time/calculations'
20
+ require 'active_support/core_ext/time/conversions'
21
+ require 'active_support/core_ext/time/zones'
22
+
23
+ require 'active_support/core_ext/date/acts_like'
24
+ require 'active_support/core_ext/date/freeze'
25
+ require 'active_support/core_ext/date/calculations'
26
+ require 'active_support/core_ext/date/conversions'
27
+
28
+ require 'active_support/core_ext/date_time/acts_like'
29
+ require 'active_support/core_ext/date_time/calculations'
30
+ require 'active_support/core_ext/date_time/conversions'
31
+ require 'active_support/core_ext/date_time/zones'
32
+
33
+ require 'active_support/core_ext/integer/time'
34
+ require 'active_support/core_ext/numeric/time'
@@ -1,4 +1,5 @@
1
- require 'tzinfo'
1
+ require "active_support/values/time_zone"
2
+ require 'active_support/core_ext/object/acts_like'
2
3
 
3
4
  module ActiveSupport
4
5
  # A Time-like class that can represent a time in any time zone. Necessary because standard Ruby Time instances are
@@ -15,7 +16,7 @@ module ActiveSupport
15
16
  # Time.zone.now # => Sun, 18 May 2008 13:07:55 EDT -04:00
16
17
  # Time.utc(2007, 2, 10, 20, 30, 45).in_time_zone # => Sat, 10 Feb 2007 15:30:45 EST -05:00
17
18
  #
18
- # See TimeZone and ActiveSupport::CoreExtensions::Time::Zones for further documentation for these methods.
19
+ # See Time and TimeZone for further documentation of these methods.
19
20
  #
20
21
  # TimeWithZone instances implement the same API as Ruby Time instances, so that Time and TimeWithZone instances are interchangable. Examples:
21
22
  #
@@ -31,6 +32,10 @@ module ActiveSupport
31
32
  # t.is_a?(Time) # => true
32
33
  # t.is_a?(ActiveSupport::TimeWithZone) # => true
33
34
  class TimeWithZone
35
+ def self.name
36
+ 'Time' # Report class name as 'Time' to thwart type checking
37
+ end
38
+
34
39
  include Comparable
35
40
  attr_reader :time_zone
36
41
 
@@ -87,7 +92,7 @@ module ActiveSupport
87
92
  alias_method :gmtoff, :utc_offset
88
93
 
89
94
  def formatted_offset(colon = true, alternate_utc_string = nil)
90
- utc? && alternate_utc_string || utc_offset.to_utc_offset_s(colon)
95
+ utc? && alternate_utc_string || TimeZone.seconds_to_utc_offset(utc_offset, colon)
91
96
  end
92
97
 
93
98
  # Time uses +zone+ to display the time zone abbreviation, so we're duck-typing it.
@@ -108,9 +113,9 @@ module ActiveSupport
108
113
  end
109
114
  alias_method :iso8601, :xmlschema
110
115
 
111
- # Coerces the date to a string for JSON encoding.
112
- #
113
- # ISO 8601 format is used if ActiveSupport::JSON::Encoding.use_standard_json_time_format is set.
116
+ # Coerces the date to a string for JSON encoding. The default format is ISO 8601. You can get
117
+ # %Y/%m/%d %H:%M:%S +offset style by setting ActiveSupport::JSON::Encoding.use_standard_json_time_format
118
+ # to false.
114
119
  #
115
120
  # ==== Examples
116
121
  #
@@ -149,8 +154,9 @@ module ActiveSupport
149
154
  # <tt>:db</tt> format outputs time in UTC; all others output time in local.
150
155
  # Uses TimeWithZone's +strftime+, so <tt>%Z</tt> and <tt>%z</tt> work correctly.
151
156
  def to_s(format = :default)
152
- return utc.to_s(format) if format == :db
153
- if formatter = ::Time::DATE_FORMATS[format]
157
+ if format == :db
158
+ utc.to_s(format)
159
+ elsif formatter = ::Time::DATE_FORMATS[format]
154
160
  formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
155
161
  else
156
162
  "#{time.strftime("%Y-%m-%d %H:%M:%S")} #{formatted_offset(false, 'UTC')}" # mimicking Ruby 1.9 Time#to_s format
@@ -239,10 +245,10 @@ module ActiveSupport
239
245
  end
240
246
 
241
247
  %w(year mon month day mday wday yday hour min sec to_date).each do |method_name|
242
- class_eval <<-EOV
243
- def #{method_name} # def year
244
- time.#{method_name} # time.year
245
- end # end
248
+ class_eval <<-EOV, __FILE__, __LINE__ + 1
249
+ def #{method_name} # def month
250
+ time.#{method_name} # time.month
251
+ end # end
246
252
  EOV
247
253
  end
248
254
 
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/object/blank'
2
+
1
3
  # The TimeZone class serves as a wrapper around TZInfo::Timezone instances. It allows us to do the following:
2
4
  #
3
5
  # * Limit the set of zones provided by TZInfo to a meaningful subset of 142 zones.
@@ -53,13 +55,13 @@ module ActiveSupport
53
55
  "Newfoundland" => "America/St_Johns",
54
56
  "Brasilia" => "America/Sao_Paulo",
55
57
  "Buenos Aires" => "America/Argentina/Buenos_Aires",
56
- "Georgetown" => "America/Argentina/San_Juan",
58
+ "Georgetown" => "America/Guyana",
57
59
  "Greenland" => "America/Godthab",
58
60
  "Mid-Atlantic" => "Atlantic/South_Georgia",
59
61
  "Azores" => "Atlantic/Azores",
60
62
  "Cape Verde Is." => "Atlantic/Cape_Verde",
61
63
  "Dublin" => "Europe/Dublin",
62
- "Edinburgh" => "Europe/Dublin",
64
+ "Edinburgh" => "Europe/London",
63
65
  "Lisbon" => "Europe/Lisbon",
64
66
  "London" => "Europe/London",
65
67
  "Casablanca" => "Africa/Casablanca",
@@ -88,7 +90,7 @@ module ActiveSupport
88
90
  "Bucharest" => "Europe/Bucharest",
89
91
  "Cairo" => "Africa/Cairo",
90
92
  "Helsinki" => "Europe/Helsinki",
91
- "Kyev" => "Europe/Kiev",
93
+ "Kyiv" => "Europe/Kiev",
92
94
  "Riga" => "Europe/Riga",
93
95
  "Sofia" => "Europe/Sofia",
94
96
  "Tallinn" => "Europe/Tallinn",
@@ -121,7 +123,7 @@ module ActiveSupport
121
123
  "Kolkata" => "Asia/Kolkata",
122
124
  "Mumbai" => "Asia/Kolkata",
123
125
  "New Delhi" => "Asia/Kolkata",
124
- "Kathmandu" => "Asia/Katmandu",
126
+ "Kathmandu" => "Asia/Kathmandu",
125
127
  "Astana" => "Asia/Dhaka",
126
128
  "Dhaka" => "Asia/Dhaka",
127
129
  "Sri Jayawardenepura" => "Asia/Colombo",
@@ -170,6 +172,21 @@ module ActiveSupport
170
172
  MAPPING.freeze
171
173
  end
172
174
 
175
+ UTC_OFFSET_WITH_COLON = '%s%02d:%02d'
176
+ UTC_OFFSET_WITHOUT_COLON = UTC_OFFSET_WITH_COLON.sub(':', '')
177
+
178
+ # Assumes self represents an offset from UTC in seconds (as returned from Time#utc_offset)
179
+ # and turns this into an +HH:MM formatted string. Example:
180
+ #
181
+ # TimeZone.seconds_to_utc_offset(-21_600) # => "-06:00"
182
+ def self.seconds_to_utc_offset(seconds, colon = true)
183
+ format = colon ? UTC_OFFSET_WITH_COLON : UTC_OFFSET_WITHOUT_COLON
184
+ sign = (seconds < 0 ? '-' : '+')
185
+ hours = seconds.abs / 3600
186
+ minutes = (seconds.abs % 3600) / 60
187
+ format % [sign, hours, minutes]
188
+ end
189
+
173
190
  include Comparable
174
191
  attr_reader :name
175
192
 
@@ -177,20 +194,26 @@ module ActiveSupport
177
194
  # offset is the number of seconds that this time zone is offset from UTC
178
195
  # (GMT). Seconds were chosen as the offset unit because that is the unit that
179
196
  # Ruby uses to represent time zone offsets (see Time#utc_offset).
180
- def initialize(name, utc_offset, tzinfo = nil)
197
+ def initialize(name, utc_offset = nil, tzinfo = nil)
181
198
  @name = name
182
199
  @utc_offset = utc_offset
183
200
  @tzinfo = tzinfo
201
+ @current_period = nil
184
202
  end
185
203
 
186
204
  def utc_offset
187
- @utc_offset ||= tzinfo.current_period.utc_offset
205
+ if @utc_offset
206
+ @utc_offset
207
+ else
208
+ @current_period ||= tzinfo.current_period
209
+ @current_period.utc_offset
210
+ end
188
211
  end
189
212
 
190
213
  # Returns the offset of this time zone as a formatted string, of the
191
214
  # format "+HH:MM".
192
215
  def formatted_offset(colon=true, alternate_utc_string = nil)
193
- utc_offset == 0 && alternate_utc_string || utc_offset.to_utc_offset_s(colon)
216
+ utc_offset == 0 && alternate_utc_string || self.class.seconds_to_utc_offset(utc_offset, colon)
194
217
  end
195
218
 
196
219
  # Compare this time zone to the parameter. The two are comapred first on
@@ -286,75 +309,29 @@ module ActiveSupport
286
309
  tzinfo.period_for_local(time, dst)
287
310
  end
288
311
 
289
- # TODO: Preload instead of lazy load for thread safety
290
312
  def tzinfo
291
- require 'tzinfo' unless defined?(TZInfo)
292
- @tzinfo ||= TZInfo::Timezone.get(MAPPING[name])
313
+ @tzinfo ||= TimeZone.find_tzinfo(name)
314
+ end
315
+
316
+ # TODO: Preload instead of lazy load for thread safety
317
+ def self.find_tzinfo(name)
318
+ require 'tzinfo' unless defined?(::TZInfo)
319
+ ::TZInfo::Timezone.get(MAPPING[name] || name)
320
+ rescue TZInfo::InvalidTimezoneIdentifier
321
+ nil
293
322
  end
294
323
 
295
324
  unless const_defined?(:ZONES)
296
325
  ZONES = []
297
326
  ZONES_MAP = {}
298
- [[-39_600, "International Date Line West", "Midway Island", "Samoa" ],
299
- [-36_000, "Hawaii" ],
300
- [-32_400, "Alaska" ],
301
- [-28_800, "Pacific Time (US & Canada)", "Tijuana" ],
302
- [-25_200, "Mountain Time (US & Canada)", "Chihuahua", "Mazatlan",
303
- "Arizona" ],
304
- [-21_600, "Central Time (US & Canada)", "Saskatchewan", "Guadalajara",
305
- "Mexico City", "Monterrey", "Central America" ],
306
- [-18_000, "Eastern Time (US & Canada)", "Indiana (East)", "Bogota",
307
- "Lima", "Quito" ],
308
- [-16_200, "Caracas" ],
309
- [-14_400, "Atlantic Time (Canada)", "La Paz", "Santiago" ],
310
- [-12_600, "Newfoundland" ],
311
- [-10_800, "Brasilia", "Buenos Aires", "Georgetown", "Greenland" ],
312
- [ -7_200, "Mid-Atlantic" ],
313
- [ -3_600, "Azores", "Cape Verde Is." ],
314
- [ 0, "Dublin", "Edinburgh", "Lisbon", "London", "Casablanca",
315
- "Monrovia", "UTC" ],
316
- [ 3_600, "Belgrade", "Bratislava", "Budapest", "Ljubljana", "Prague",
317
- "Sarajevo", "Skopje", "Warsaw", "Zagreb", "Brussels",
318
- "Copenhagen", "Madrid", "Paris", "Amsterdam", "Berlin",
319
- "Bern", "Rome", "Stockholm", "Vienna",
320
- "West Central Africa" ],
321
- [ 7_200, "Bucharest", "Cairo", "Helsinki", "Kyev", "Riga", "Sofia",
322
- "Tallinn", "Vilnius", "Athens", "Istanbul", "Minsk",
323
- "Jerusalem", "Harare", "Pretoria" ],
324
- [ 10_800, "Moscow", "St. Petersburg", "Volgograd", "Kuwait", "Riyadh",
325
- "Nairobi", "Baghdad" ],
326
- [ 12_600, "Tehran" ],
327
- [ 14_400, "Abu Dhabi", "Muscat", "Baku", "Tbilisi", "Yerevan" ],
328
- [ 16_200, "Kabul" ],
329
- [ 18_000, "Ekaterinburg", "Islamabad", "Karachi", "Tashkent" ],
330
- [ 19_800, "Chennai", "Kolkata", "Mumbai", "New Delhi", "Sri Jayawardenepura" ],
331
- [ 20_700, "Kathmandu" ],
332
- [ 21_600, "Astana", "Dhaka", "Almaty",
333
- "Novosibirsk" ],
334
- [ 23_400, "Rangoon" ],
335
- [ 25_200, "Bangkok", "Hanoi", "Jakarta", "Krasnoyarsk" ],
336
- [ 28_800, "Beijing", "Chongqing", "Hong Kong", "Urumqi",
337
- "Kuala Lumpur", "Singapore", "Taipei", "Perth", "Irkutsk",
338
- "Ulaan Bataar" ],
339
- [ 32_400, "Seoul", "Osaka", "Sapporo", "Tokyo", "Yakutsk" ],
340
- [ 34_200, "Darwin", "Adelaide" ],
341
- [ 36_000, "Canberra", "Melbourne", "Sydney", "Brisbane", "Hobart",
342
- "Vladivostok", "Guam", "Port Moresby" ],
343
- [ 39_600, "Magadan", "Solomon Is.", "New Caledonia" ],
344
- [ 43_200, "Fiji", "Kamchatka", "Marshall Is.", "Auckland",
345
- "Wellington" ],
346
- [ 46_800, "Nuku'alofa" ]].
347
- each do |offset, *places|
348
- places.each do |place|
349
- place.freeze
350
- zone = new(place, offset)
351
- ZONES << zone
352
- ZONES_MAP[place] = zone
353
- end
327
+ MAPPING.each_key do |place|
328
+ place.freeze
329
+ zone = new(place)
330
+ ZONES << zone
331
+ ZONES_MAP[place] = zone
354
332
  end
355
333
  ZONES.sort!
356
334
  ZONES.freeze
357
- ZONES_MAP.freeze
358
335
 
359
336
  US_ZONES = ZONES.find_all { |z| z.name =~ /US|Arizona|Indiana|Hawaii|Alaska/ }
360
337
  US_ZONES.freeze
@@ -385,7 +362,7 @@ module ActiveSupport
385
362
  def [](arg)
386
363
  case arg
387
364
  when String
388
- ZONES_MAP[arg]
365
+ ZONES_MAP[arg] ||= lookup(arg)
389
366
  when Numeric, ActiveSupport::Duration
390
367
  arg *= 3600 if arg.abs <= 13
391
368
  all.find { |z| z.utc_offset == arg.to_i }
@@ -399,6 +376,12 @@ module ActiveSupport
399
376
  def us_zones
400
377
  US_ZONES
401
378
  end
379
+
380
+ private
381
+
382
+ def lookup(name)
383
+ (tzinfo = find_tzinfo(name)) && create(tzinfo.name.freeze)
384
+ end
402
385
  end
403
386
  end
404
387
  end
@@ -1,9 +1,10 @@
1
1
  module ActiveSupport
2
2
  module VERSION #:nodoc:
3
- MAJOR = 2
4
- MINOR = 3
5
- TINY = 5
3
+ MAJOR = 3
4
+ MINOR = 0
5
+ TINY = 0
6
+ BUILD = "beta3"
6
7
 
7
- STRING = [MAJOR, MINOR, TINY].join('.')
8
+ STRING = [MAJOR, MINOR, TINY, BUILD].join('.')
8
9
  end
9
10
  end
@@ -11,7 +11,7 @@
11
11
  # classes in NilClass::WHINERS the error message suggests which could be the
12
12
  # actual intended class:
13
13
  #
14
- # $ script/runner nil.destroy
14
+ # $ rails runner nil.destroy
15
15
  # ...
16
16
  # You might have expected an instance of ActiveRecord::Base.
17
17
  # ...
@@ -25,17 +25,16 @@
25
25
  # By default it is on in development and test modes, and it is off in production
26
26
  # mode.
27
27
  class NilClass
28
- WHINERS = [::Array]
29
- WHINERS << ::ActiveRecord::Base if defined? ::ActiveRecord
30
-
31
28
  METHOD_CLASS_MAP = Hash.new
32
29
 
33
- WHINERS.each do |klass|
30
+ def self.add_whiner(klass)
34
31
  methods = klass.public_instance_methods - public_instance_methods
35
32
  class_name = klass.name
36
33
  methods.each { |method| METHOD_CLASS_MAP[method.to_sym] = class_name }
37
34
  end
38
35
 
36
+ add_whiner ::Array
37
+
39
38
  # Raises a RuntimeError when you attempt to call +id+ on +nil+.
40
39
  def id
41
40
  raise RuntimeError, "Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id", caller
@@ -43,10 +42,7 @@ class NilClass
43
42
 
44
43
  private
45
44
  def method_missing(method, *args, &block)
46
- # Ruby 1.9.2: disallow explicit coercion via method_missing.
47
- if method == :to_ary || method == :to_str
48
- super
49
- elsif klass = METHOD_CLASS_MAP[method]
45
+ if klass = METHOD_CLASS_MAP[method]
50
46
  raise_nil_warning_for klass, method, caller
51
47
  else
52
48
  super
@@ -3,6 +3,8 @@ raise "JRuby is required to use the JDOM backend for XmlMini" unless RUBY_PLATFO
3
3
  require 'jruby'
4
4
  include Java
5
5
 
6
+ require 'active_support/core_ext/object/blank'
7
+
6
8
  import javax.xml.parsers.DocumentBuilder unless defined? DocumentBuilder
7
9
  import javax.xml.parsers.DocumentBuilderFactory unless defined? DocumentBuilderFactory
8
10
  import java.io.StringReader unless defined? StringReader
@@ -24,15 +26,19 @@ module ActiveSupport
24
26
  node_type_map = {}
25
27
  NODE_TYPE_NAMES.each { |type| node_type_map[Node.send(type)] = type }
26
28
 
27
- # Parse an XML Document string into a simple hash using Java's jdom.
28
- # string::
29
- # XML Document string to parse
30
- def parse(string)
31
- if string.blank?
29
+ # Parse an XML Document string or IO into a simple hash using Java's jdom.
30
+ # data::
31
+ # XML Document string or IO to parse
32
+ def parse(data)
33
+ if data.respond_to?(:read)
34
+ data = data.read
35
+ end
36
+
37
+ if data.blank?
32
38
  {}
33
39
  else
34
40
  @dbf = DocumentBuilderFactory.new_instance
35
- xml_string_reader = StringReader.new(string)
41
+ xml_string_reader = StringReader.new(data)
36
42
  xml_input_source = InputSource.new(xml_string_reader)
37
43
  doc = @dbf.new_document_builder.parse(xml_input_source)
38
44
  merge_element!({}, doc.document_element)
@@ -74,7 +80,7 @@ module ActiveSupport
74
80
  # Merge all the texts of an element into the hash
75
81
  #
76
82
  # hash::
77
- # Hash to add the converted emement to.
83
+ # Hash to add the converted element to.
78
84
  # element::
79
85
  # XML element whose texts are to me merged into the hash
80
86
  def merge_texts!(hash, element)