activesupport 2.3.18 → 3.0.0.beta

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 (403) hide show
  1. data/CHANGELOG +30 -53
  2. data/lib/active_support.rb +43 -31
  3. data/lib/active_support/all.rb +3 -7
  4. data/lib/active_support/backtrace_cleaner.rb +24 -8
  5. data/lib/active_support/base64.rb +9 -0
  6. data/lib/active_support/benchmarkable.rb +60 -0
  7. data/lib/active_support/buffered_logger.rb +12 -9
  8. data/lib/active_support/cache.rb +75 -55
  9. data/lib/active_support/cache/compressed_mem_cache_store.rb +2 -0
  10. data/lib/active_support/cache/file_store.rb +35 -17
  11. data/lib/active_support/cache/mem_cache_store.rb +29 -20
  12. data/lib/active_support/cache/memory_store.rb +18 -17
  13. data/lib/active_support/cache/strategy/local_cache.rb +9 -1
  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.rb +2 -7
  18. data/lib/active_support/core_ext/array.rb +2 -10
  19. data/lib/active_support/core_ext/array/access.rb +39 -46
  20. data/lib/active_support/core_ext/array/conversions.rb +146 -182
  21. data/lib/active_support/core_ext/array/extract_options.rb +12 -18
  22. data/lib/active_support/core_ext/array/grouping.rb +87 -93
  23. data/lib/active_support/core_ext/array/random_access.rb +4 -40
  24. data/lib/active_support/core_ext/array/uniq_by.rb +17 -0
  25. data/lib/active_support/core_ext/array/wrap.rb +22 -0
  26. data/lib/active_support/core_ext/big_decimal.rb +1 -0
  27. data/lib/active_support/core_ext/big_decimal/conversions.rb +27 -0
  28. data/lib/active_support/core_ext/cgi.rb +0 -4
  29. data/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +16 -20
  30. data/lib/active_support/core_ext/class.rb +0 -2
  31. data/lib/active_support/core_ext/class/attribute.rb +8 -39
  32. data/lib/active_support/core_ext/class/attribute_accessors.rb +31 -35
  33. data/lib/active_support/core_ext/class/delegating_attributes.rb +34 -40
  34. data/lib/active_support/core_ext/class/inheritable_attributes.rb +100 -16
  35. data/lib/active_support/core_ext/date/acts_like.rb +8 -0
  36. data/lib/active_support/core_ext/date/calculations.rb +218 -238
  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 +83 -95
  42. data/lib/active_support/core_ext/date_time/zones.rb +17 -0
  43. data/lib/active_support/core_ext/enumerable.rb +14 -15
  44. data/lib/active_support/core_ext/exception.rb +1 -43
  45. data/lib/active_support/core_ext/file.rb +0 -4
  46. data/lib/active_support/core_ext/file/atomic.rb +34 -41
  47. data/lib/active_support/core_ext/float.rb +0 -6
  48. data/lib/active_support/core_ext/float/rounding.rb +15 -20
  49. data/lib/active_support/core_ext/hash.rb +8 -14
  50. data/lib/active_support/core_ext/hash/conversions.rb +236 -236
  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/integer.rb +1 -7
  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/kernel/reporting.rb +9 -7
  63. data/lib/active_support/core_ext/kernel/requires.rb +3 -1
  64. data/lib/active_support/core_ext/load_error.rb +16 -33
  65. data/lib/active_support/core_ext/logger.rb +3 -2
  66. data/lib/active_support/core_ext/module.rb +3 -16
  67. data/lib/active_support/core_ext/module/aliasing.rb +64 -68
  68. data/lib/active_support/core_ext/module/attr_accessor_with_default.rb +1 -1
  69. data/lib/active_support/core_ext/module/attr_internal.rb +4 -4
  70. data/lib/active_support/core_ext/module/attribute_accessors.rb +36 -41
  71. data/lib/active_support/core_ext/module/delegation.rb +1 -1
  72. data/lib/active_support/core_ext/module/deprecation.rb +9 -0
  73. data/lib/active_support/core_ext/module/introspection.rb +77 -79
  74. data/lib/active_support/core_ext/module/loading.rb +2 -0
  75. data/lib/active_support/core_ext/module/synchronization.rb +4 -1
  76. data/lib/active_support/core_ext/name_error.rb +3 -4
  77. data/lib/active_support/core_ext/numeric.rb +1 -8
  78. data/lib/active_support/core_ext/numeric/bytes.rb +35 -41
  79. data/lib/active_support/core_ext/numeric/time.rb +70 -74
  80. data/lib/active_support/core_ext/object.rb +4 -2
  81. data/lib/active_support/core_ext/object/acts_like.rb +10 -0
  82. data/lib/active_support/core_ext/object/conversions.rb +4 -15
  83. data/lib/active_support/core_ext/object/duplicable.rb +65 -0
  84. data/lib/active_support/core_ext/object/instance_variables.rb +0 -7
  85. data/lib/active_support/core_ext/object/metaclass.rb +5 -6
  86. data/lib/active_support/core_ext/object/misc.rb +2 -93
  87. data/lib/active_support/core_ext/object/returning.rb +42 -0
  88. data/lib/active_support/core_ext/object/to_param.rb +49 -0
  89. data/lib/active_support/core_ext/object/to_query.rb +27 -0
  90. data/lib/active_support/core_ext/{try.rb → object/try.rb} +4 -4
  91. data/lib/active_support/core_ext/object/with_options.rb +24 -0
  92. data/lib/active_support/core_ext/proc.rb +6 -4
  93. data/lib/active_support/core_ext/process/daemon.rb +17 -19
  94. data/lib/active_support/core_ext/range.rb +2 -9
  95. data/lib/active_support/core_ext/range/blockless_step.rb +24 -27
  96. data/lib/active_support/core_ext/range/conversions.rb +17 -23
  97. data/lib/active_support/core_ext/range/include_range.rb +18 -27
  98. data/lib/active_support/core_ext/range/overlaps.rb +6 -13
  99. data/lib/active_support/core_ext/regexp.rb +5 -0
  100. data/lib/active_support/core_ext/rexml.rb +12 -7
  101. data/lib/active_support/core_ext/string.rb +6 -19
  102. data/lib/active_support/core_ext/string/access.rb +88 -95
  103. data/lib/active_support/core_ext/string/behavior.rb +6 -12
  104. data/lib/active_support/core_ext/string/conversions.rb +19 -21
  105. data/lib/active_support/core_ext/string/exclude.rb +6 -0
  106. data/lib/active_support/core_ext/string/filters.rb +17 -23
  107. data/lib/active_support/core_ext/string/inflections.rb +146 -153
  108. data/lib/active_support/{vendor/i18n-0.4.1/i18n/core_ext/string/interpolate.rb → core_ext/string/interpolation.rb} +8 -15
  109. data/lib/active_support/core_ext/string/multibyte.rb +68 -74
  110. data/lib/active_support/core_ext/string/output_safety.rb +21 -17
  111. data/lib/active_support/core_ext/string/starts_ends_with.rb +3 -32
  112. data/lib/active_support/core_ext/string/xchar.rb +10 -3
  113. data/lib/active_support/core_ext/time/acts_like.rb +8 -0
  114. data/lib/active_support/core_ext/time/calculations.rb +276 -308
  115. data/lib/active_support/core_ext/time/conversions.rb +78 -84
  116. data/lib/active_support/core_ext/time/marshal_with_utc_flag.rb +22 -0
  117. data/lib/active_support/core_ext/time/publicize_conversion_methods.rb +10 -0
  118. data/lib/active_support/core_ext/time/zones.rb +73 -81
  119. data/lib/active_support/core_ext/uri.rb +2 -1
  120. data/lib/active_support/dependencies.rb +38 -48
  121. data/lib/active_support/dependencies/autoload.rb +49 -0
  122. data/lib/active_support/deprecation.rb +9 -195
  123. data/lib/active_support/deprecation/behaviors.rb +38 -0
  124. data/lib/active_support/deprecation/method_wrappers.rb +29 -0
  125. data/lib/active_support/deprecation/proxy_wrappers.rb +74 -0
  126. data/lib/active_support/deprecation/reporting.rb +55 -0
  127. data/lib/active_support/duration.rb +6 -2
  128. data/lib/active_support/hash_with_indifferent_access.rb +137 -0
  129. data/lib/active_support/i18n.rb +2 -0
  130. data/lib/active_support/inflections.rb +1 -1
  131. data/lib/active_support/inflector.rb +4 -406
  132. data/lib/active_support/inflector/inflections.rb +211 -0
  133. data/lib/active_support/inflector/methods.rb +139 -0
  134. data/lib/active_support/inflector/transliterate.rb +61 -0
  135. data/lib/active_support/json/backends/jsongem.rb +16 -10
  136. data/lib/active_support/json/backends/yaml.rb +72 -2
  137. data/lib/active_support/json/decoding.rb +2 -16
  138. data/lib/active_support/json/encoding.rb +153 -33
  139. data/lib/active_support/json/variable.rb +4 -3
  140. data/lib/active_support/locale/en.yml +1 -4
  141. data/lib/active_support/memoizable.rb +7 -6
  142. data/lib/active_support/message_encryptor.rb +1 -0
  143. data/lib/active_support/message_verifier.rb +12 -29
  144. data/lib/active_support/multibyte.rb +9 -4
  145. data/lib/active_support/multibyte/chars.rb +25 -17
  146. data/lib/active_support/multibyte/unicode_database.rb +5 -5
  147. data/lib/active_support/multibyte/utils.rb +1 -1
  148. data/lib/active_support/notifications.rb +77 -0
  149. data/lib/active_support/notifications/fanout.rb +69 -0
  150. data/lib/active_support/notifications/instrumenter.rb +50 -0
  151. data/lib/active_support/option_merger.rb +2 -0
  152. data/lib/active_support/ordered_hash.rb +33 -37
  153. data/lib/active_support/ordered_options.rb +3 -1
  154. data/lib/active_support/railtie.rb +64 -0
  155. data/lib/active_support/rescuable.rb +11 -6
  156. data/lib/active_support/ruby/shim.rb +19 -0
  157. data/lib/active_support/test_case.rb +8 -1
  158. data/lib/active_support/testing/assertions.rb +2 -14
  159. data/lib/active_support/testing/declarative.rb +31 -12
  160. data/lib/active_support/testing/deprecation.rb +8 -10
  161. data/lib/active_support/testing/isolation.rb +153 -0
  162. data/lib/active_support/testing/pending.rb +48 -0
  163. data/lib/active_support/testing/performance.rb +342 -339
  164. data/lib/active_support/testing/setup_and_teardown.rb +48 -31
  165. data/lib/active_support/time.rb +34 -0
  166. data/lib/active_support/time/autoload.rb +5 -0
  167. data/lib/active_support/time_with_zone.rb +18 -12
  168. data/lib/active_support/values/time_zone.rb +97 -93
  169. data/lib/active_support/version.rb +3 -3
  170. data/lib/active_support/whiny_nil.rb +1 -4
  171. data/lib/active_support/xml_mini.rb +2 -0
  172. data/lib/active_support/xml_mini/jdom.rb +13 -7
  173. data/lib/active_support/xml_mini/libxml.rb +19 -12
  174. data/lib/active_support/xml_mini/libxmlsax.rb +19 -9
  175. data/lib/active_support/xml_mini/nokogiri.rb +18 -12
  176. data/lib/active_support/xml_mini/nokogirisax.rb +15 -6
  177. data/lib/active_support/xml_mini/rexml.rb +24 -9
  178. metadata +94 -244
  179. data/lib/active_support/cache/drb_store.rb +0 -14
  180. data/lib/active_support/core_ext/array/wrapper.rb +0 -24
  181. data/lib/active_support/core_ext/base64.rb +0 -4
  182. data/lib/active_support/core_ext/base64/encoding.rb +0 -16
  183. data/lib/active_support/core_ext/bigdecimal.rb +0 -6
  184. data/lib/active_support/core_ext/bigdecimal/conversions.rb +0 -37
  185. data/lib/active_support/core_ext/blank.rb +0 -2
  186. data/lib/active_support/core_ext/class/removal.rb +0 -50
  187. data/lib/active_support/core_ext/date.rb +0 -10
  188. data/lib/active_support/core_ext/date/behavior.rb +0 -42
  189. data/lib/active_support/core_ext/date_time.rb +0 -12
  190. data/lib/active_support/core_ext/duplicable.rb +0 -43
  191. data/lib/active_support/core_ext/float/time.rb +0 -27
  192. data/lib/active_support/core_ext/integer/even_odd.rb +0 -29
  193. data/lib/active_support/core_ext/kernel/singleton_class.rb +0 -13
  194. data/lib/active_support/core_ext/module/model_naming.rb +0 -25
  195. data/lib/active_support/core_ext/module/remove_method.rb +0 -6
  196. data/lib/active_support/core_ext/numeric/conversions.rb +0 -19
  197. data/lib/active_support/core_ext/object/extending.rb +0 -80
  198. data/lib/active_support/core_ext/object/singleton_class.rb +0 -13
  199. data/lib/active_support/core_ext/pathname.rb +0 -7
  200. data/lib/active_support/core_ext/pathname/clean_within.rb +0 -14
  201. data/lib/active_support/core_ext/string/bytesize.rb +0 -5
  202. data/lib/active_support/core_ext/string/iterators.rb +0 -23
  203. data/lib/active_support/core_ext/symbol.rb +0 -14
  204. data/lib/active_support/core_ext/time.rb +0 -46
  205. data/lib/active_support/core_ext/time/behavior.rb +0 -13
  206. data/lib/active_support/json/backends/okjson.rb +0 -644
  207. data/lib/active_support/json/backends/yajl.rb +0 -40
  208. data/lib/active_support/json/encoders/date.rb +0 -22
  209. data/lib/active_support/json/encoders/date_time.rb +0 -22
  210. data/lib/active_support/json/encoders/enumerable.rb +0 -17
  211. data/lib/active_support/json/encoders/false_class.rb +0 -7
  212. data/lib/active_support/json/encoders/hash.rb +0 -56
  213. data/lib/active_support/json/encoders/nil_class.rb +0 -7
  214. data/lib/active_support/json/encoders/numeric.rb +0 -21
  215. data/lib/active_support/json/encoders/object.rb +0 -10
  216. data/lib/active_support/json/encoders/regexp.rb +0 -9
  217. data/lib/active_support/json/encoders/string.rb +0 -9
  218. data/lib/active_support/json/encoders/symbol.rb +0 -5
  219. data/lib/active_support/json/encoders/time.rb +0 -22
  220. data/lib/active_support/json/encoders/true_class.rb +0 -7
  221. data/lib/active_support/vendor.rb +0 -36
  222. data/lib/active_support/vendor/builder-2.1.2/blankslate.rb +0 -113
  223. data/lib/active_support/vendor/builder-2.1.2/builder.rb +0 -13
  224. data/lib/active_support/vendor/builder-2.1.2/builder/blankslate.rb +0 -20
  225. data/lib/active_support/vendor/builder-2.1.2/builder/css.rb +0 -250
  226. data/lib/active_support/vendor/builder-2.1.2/builder/xchar.rb +0 -115
  227. data/lib/active_support/vendor/builder-2.1.2/builder/xmlbase.rb +0 -139
  228. data/lib/active_support/vendor/builder-2.1.2/builder/xmlevents.rb +0 -63
  229. data/lib/active_support/vendor/builder-2.1.2/builder/xmlmarkup.rb +0 -328
  230. data/lib/active_support/vendor/i18n-0.4.1/i18n.rb +0 -322
  231. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend.rb +0 -20
  232. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/active_record.rb +0 -61
  233. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/active_record/missing.rb +0 -65
  234. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/active_record/store_procs.rb +0 -38
  235. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/active_record/translation.rb +0 -93
  236. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/base.rb +0 -237
  237. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/cache.rb +0 -77
  238. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/cascade.rb +0 -57
  239. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/chain.rb +0 -77
  240. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/cldr.rb +0 -100
  241. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/fallbacks.rb +0 -69
  242. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/flatten.rb +0 -113
  243. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/gettext.rb +0 -75
  244. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/interpolation_compiler.rb +0 -123
  245. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/key_value.rb +0 -102
  246. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/memoize.rb +0 -48
  247. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/metadata.rb +0 -65
  248. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/pluralization.rb +0 -57
  249. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/simple.rb +0 -87
  250. data/lib/active_support/vendor/i18n-0.4.1/i18n/backend/transliterator.rb +0 -98
  251. data/lib/active_support/vendor/i18n-0.4.1/i18n/config.rb +0 -84
  252. data/lib/active_support/vendor/i18n-0.4.1/i18n/core_ext/hash.rb +0 -29
  253. data/lib/active_support/vendor/i18n-0.4.1/i18n/exceptions.rb +0 -61
  254. data/lib/active_support/vendor/i18n-0.4.1/i18n/gettext.rb +0 -27
  255. data/lib/active_support/vendor/i18n-0.4.1/i18n/gettext/helpers.rb +0 -65
  256. data/lib/active_support/vendor/i18n-0.4.1/i18n/gettext/po_parser.rb +0 -329
  257. data/lib/active_support/vendor/i18n-0.4.1/i18n/locale.rb +0 -6
  258. data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/fallbacks.rb +0 -98
  259. data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/tag.rb +0 -28
  260. data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/tag/parents.rb +0 -24
  261. data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/tag/rfc4646.rb +0 -76
  262. data/lib/active_support/vendor/i18n-0.4.1/i18n/locale/tag/simple.rb +0 -41
  263. data/lib/active_support/vendor/i18n-0.4.1/i18n/version.rb +0 -3
  264. data/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb +0 -1107
  265. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo.rb +0 -33
  266. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/data_timezone.rb +0 -47
  267. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/data_timezone_info.rb +0 -228
  268. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Algiers.rb +0 -55
  269. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Cairo.rb +0 -219
  270. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Casablanca.rb +0 -40
  271. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Harare.rb +0 -18
  272. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Johannesburg.rb +0 -25
  273. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Monrovia.rb +0 -22
  274. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Nairobi.rb +0 -23
  275. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +0 -166
  276. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/San_Juan.rb +0 -86
  277. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Bogota.rb +0 -23
  278. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Caracas.rb +0 -23
  279. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Chicago.rb +0 -283
  280. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Chihuahua.rb +0 -136
  281. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Denver.rb +0 -204
  282. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Godthab.rb +0 -161
  283. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Guatemala.rb +0 -27
  284. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Halifax.rb +0 -274
  285. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Indiana/Indianapolis.rb +0 -149
  286. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Juneau.rb +0 -194
  287. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/La_Paz.rb +0 -22
  288. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Lima.rb +0 -35
  289. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Los_Angeles.rb +0 -232
  290. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Mazatlan.rb +0 -139
  291. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Mexico_City.rb +0 -144
  292. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Monterrey.rb +0 -131
  293. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/New_York.rb +0 -282
  294. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Phoenix.rb +0 -30
  295. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Regina.rb +0 -74
  296. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Santiago.rb +0 -205
  297. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Sao_Paulo.rb +0 -171
  298. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/St_Johns.rb +0 -288
  299. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Tijuana.rb +0 -196
  300. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Almaty.rb +0 -67
  301. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Baghdad.rb +0 -73
  302. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Baku.rb +0 -161
  303. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Bangkok.rb +0 -20
  304. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Chongqing.rb +0 -33
  305. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Colombo.rb +0 -30
  306. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Dhaka.rb +0 -27
  307. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Hong_Kong.rb +0 -87
  308. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Irkutsk.rb +0 -165
  309. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Jakarta.rb +0 -30
  310. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Jerusalem.rb +0 -163
  311. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kabul.rb +0 -20
  312. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kamchatka.rb +0 -163
  313. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Karachi.rb +0 -30
  314. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Katmandu.rb +0 -20
  315. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kolkata.rb +0 -25
  316. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Krasnoyarsk.rb +0 -163
  317. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kuala_Lumpur.rb +0 -31
  318. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kuwait.rb +0 -18
  319. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Magadan.rb +0 -163
  320. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Muscat.rb +0 -18
  321. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Novosibirsk.rb +0 -164
  322. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Rangoon.rb +0 -24
  323. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Riyadh.rb +0 -18
  324. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Seoul.rb +0 -34
  325. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Shanghai.rb +0 -35
  326. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Singapore.rb +0 -33
  327. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Taipei.rb +0 -59
  328. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tashkent.rb +0 -47
  329. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tbilisi.rb +0 -78
  330. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tehran.rb +0 -121
  331. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tokyo.rb +0 -30
  332. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Ulaanbaatar.rb +0 -65
  333. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Urumqi.rb +0 -33
  334. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Vladivostok.rb +0 -164
  335. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yakutsk.rb +0 -163
  336. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yekaterinburg.rb +0 -165
  337. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yerevan.rb +0 -165
  338. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/Azores.rb +0 -270
  339. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/Cape_Verde.rb +0 -23
  340. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/South_Georgia.rb +0 -18
  341. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Adelaide.rb +0 -187
  342. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Brisbane.rb +0 -35
  343. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Darwin.rb +0 -29
  344. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Hobart.rb +0 -193
  345. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Melbourne.rb +0 -185
  346. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Perth.rb +0 -37
  347. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Sydney.rb +0 -185
  348. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Etc/UTC.rb +0 -16
  349. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Amsterdam.rb +0 -228
  350. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Athens.rb +0 -185
  351. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Belgrade.rb +0 -163
  352. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Berlin.rb +0 -188
  353. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Bratislava.rb +0 -13
  354. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Brussels.rb +0 -232
  355. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Bucharest.rb +0 -181
  356. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Budapest.rb +0 -197
  357. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Copenhagen.rb +0 -179
  358. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Dublin.rb +0 -276
  359. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Helsinki.rb +0 -163
  360. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Istanbul.rb +0 -218
  361. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Kiev.rb +0 -168
  362. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Lisbon.rb +0 -268
  363. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Ljubljana.rb +0 -13
  364. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/London.rb +0 -288
  365. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Madrid.rb +0 -211
  366. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Minsk.rb +0 -170
  367. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Moscow.rb +0 -181
  368. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Paris.rb +0 -232
  369. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Prague.rb +0 -187
  370. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Riga.rb +0 -176
  371. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Rome.rb +0 -215
  372. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Sarajevo.rb +0 -13
  373. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Skopje.rb +0 -13
  374. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Sofia.rb +0 -173
  375. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Stockholm.rb +0 -165
  376. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Tallinn.rb +0 -172
  377. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Vienna.rb +0 -183
  378. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Vilnius.rb +0 -170
  379. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Warsaw.rb +0 -212
  380. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Zagreb.rb +0 -13
  381. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Auckland.rb +0 -202
  382. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Fiji.rb +0 -23
  383. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Guam.rb +0 -22
  384. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Honolulu.rb +0 -28
  385. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Majuro.rb +0 -20
  386. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Midway.rb +0 -25
  387. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Noumea.rb +0 -25
  388. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Pago_Pago.rb +0 -26
  389. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Port_Moresby.rb +0 -20
  390. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Tongatapu.rb +0 -27
  391. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/info_timezone.rb +0 -52
  392. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/linked_timezone.rb +0 -51
  393. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/linked_timezone_info.rb +0 -44
  394. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/offset_rationals.rb +0 -98
  395. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/ruby_core_support.rb +0 -56
  396. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/time_or_datetime.rb +0 -292
  397. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone.rb +0 -508
  398. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_definition.rb +0 -56
  399. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_info.rb +0 -40
  400. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_offset_info.rb +0 -94
  401. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_period.rb +0 -198
  402. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_transition_info.rb +0 -129
  403. data/lib/activesupport.rb +0 -2
@@ -1,90 +1,84 @@
1
- module ActiveSupport #:nodoc:
2
- module CoreExtensions #:nodoc:
3
- module Time #:nodoc:
4
- # Converting times to formatted strings, dates, and datetimes.
5
- module Conversions
6
- DATE_FORMATS = {
7
- :db => "%Y-%m-%d %H:%M:%S",
8
- :number => "%Y%m%d%H%M%S",
9
- :time => "%H:%M",
10
- :short => "%d %b %H:%M",
11
- :long => "%B %d, %Y %H:%M",
12
- :long_ordinal => lambda { |time| time.strftime("%B #{time.day.ordinalize}, %Y %H:%M") },
13
- :rfc822 => lambda { |time| time.strftime("%a, %d %b %Y %H:%M:%S #{time.formatted_offset(false)}") }
14
- }
1
+ require 'active_support/inflector'
2
+ require 'active_support/values/time_zone'
15
3
 
16
- def self.included(base) #:nodoc:
17
- base.class_eval do
18
- alias_method :to_default_s, :to_s
19
- alias_method :to_s, :to_formatted_s
20
- end
21
- end
4
+ class Time
5
+ DATE_FORMATS = {
6
+ :db => "%Y-%m-%d %H:%M:%S",
7
+ :number => "%Y%m%d%H%M%S",
8
+ :time => "%H:%M",
9
+ :short => "%d %b %H:%M",
10
+ :long => "%B %d, %Y %H:%M",
11
+ :long_ordinal => lambda { |time| time.strftime("%B #{ActiveSupport::Inflector.ordinalize(time.day)}, %Y %H:%M") },
12
+ :rfc822 => lambda { |time| time.strftime("%a, %d %b %Y %H:%M:%S #{time.formatted_offset(false)}") }
13
+ }
22
14
 
23
- # Converts to a formatted string. See DATE_FORMATS for builtin formats.
24
- #
25
- # This method is aliased to <tt>to_s</tt>.
26
- #
27
- # time = Time.now # => Thu Jan 18 06:10:17 CST 2007
28
- #
29
- # time.to_formatted_s(:time) # => "06:10:17"
30
- # time.to_s(:time) # => "06:10:17"
31
- #
32
- # time.to_formatted_s(:db) # => "2007-01-18 06:10:17"
33
- # time.to_formatted_s(:number) # => "20070118061017"
34
- # time.to_formatted_s(:short) # => "18 Jan 06:10"
35
- # time.to_formatted_s(:long) # => "January 18, 2007 06:10"
36
- # time.to_formatted_s(:long_ordinal) # => "January 18th, 2007 06:10"
37
- # time.to_formatted_s(:rfc822) # => "Thu, 18 Jan 2007 06:10:17 -0600"
38
- #
39
- # == Adding your own time formats to +to_formatted_s+
40
- # You can add your own formats to the Time::DATE_FORMATS hash.
41
- # Use the format name as the hash key and either a strftime string
42
- # or Proc instance that takes a time argument as the value.
43
- #
44
- # # config/initializers/time_formats.rb
45
- # Time::DATE_FORMATS[:month_and_year] = "%B %Y"
46
- # Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") }
47
- def to_formatted_s(format = :default)
48
- return to_default_s unless formatter = DATE_FORMATS[format]
49
- formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
50
- end
51
-
52
- # Returns the UTC offset as an +HH:MM formatted string.
53
- #
54
- # Time.local(2000).formatted_offset # => "-06:00"
55
- # Time.local(2000).formatted_offset(false) # => "-0600"
56
- def formatted_offset(colon = true, alternate_utc_string = nil)
57
- utc? && alternate_utc_string || utc_offset.to_utc_offset_s(colon)
58
- end
15
+ # Converts to a formatted string. See DATE_FORMATS for builtin formats.
16
+ #
17
+ # This method is aliased to <tt>to_s</tt>.
18
+ #
19
+ # time = Time.now # => Thu Jan 18 06:10:17 CST 2007
20
+ #
21
+ # time.to_formatted_s(:time) # => "06:10:17"
22
+ # time.to_s(:time) # => "06:10:17"
23
+ #
24
+ # time.to_formatted_s(:db) # => "2007-01-18 06:10:17"
25
+ # time.to_formatted_s(:number) # => "20070118061017"
26
+ # time.to_formatted_s(:short) # => "18 Jan 06:10"
27
+ # time.to_formatted_s(:long) # => "January 18, 2007 06:10"
28
+ # time.to_formatted_s(:long_ordinal) # => "January 18th, 2007 06:10"
29
+ # time.to_formatted_s(:rfc822) # => "Thu, 18 Jan 2007 06:10:17 -0600"
30
+ #
31
+ # == Adding your own time formats to +to_formatted_s+
32
+ # You can add your own formats to the Time::DATE_FORMATS hash.
33
+ # Use the format name as the hash key and either a strftime string
34
+ # or Proc instance that takes a time argument as the value.
35
+ #
36
+ # # config/initializers/time_formats.rb
37
+ # Time::DATE_FORMATS[:month_and_year] = "%B %Y"
38
+ # Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") }
39
+ def to_formatted_s(format = :default)
40
+ if formatter = DATE_FORMATS[format]
41
+ formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
42
+ else
43
+ to_default_s
44
+ end
45
+ end
46
+ alias_method :to_default_s, :to_s
47
+ alias_method :to_s, :to_formatted_s
48
+
49
+ # Returns the UTC offset as an +HH:MM formatted string.
50
+ #
51
+ # Time.local(2000).formatted_offset # => "-06:00"
52
+ # Time.local(2000).formatted_offset(false) # => "-0600"
53
+ def formatted_offset(colon = true, alternate_utc_string = nil)
54
+ utc? && alternate_utc_string || ActiveSupport::TimeZone.seconds_to_utc_offset(utc_offset, colon)
55
+ end
59
56
 
60
- # Converts a Time object to a Date, dropping hour, minute, and second precision.
61
- #
62
- # my_time = Time.now # => Mon Nov 12 22:59:51 -0500 2007
63
- # my_time.to_date # => Mon, 12 Nov 2007
64
- #
65
- # your_time = Time.parse("1/13/2009 1:13:03 P.M.") # => Tue Jan 13 13:13:03 -0500 2009
66
- # your_time.to_date # => Tue, 13 Jan 2009
67
- def to_date
68
- ::Date.new(year, month, day)
69
- end
57
+ # Converts a Time object to a Date, dropping hour, minute, and second precision.
58
+ #
59
+ # my_time = Time.now # => Mon Nov 12 22:59:51 -0500 2007
60
+ # my_time.to_date # => Mon, 12 Nov 2007
61
+ #
62
+ # your_time = Time.parse("1/13/2009 1:13:03 P.M.") # => Tue Jan 13 13:13:03 -0500 2009
63
+ # your_time.to_date # => Tue, 13 Jan 2009
64
+ def to_date
65
+ ::Date.new(year, month, day)
66
+ end unless method_defined?(:to_date)
70
67
 
71
- # A method to keep Time, Date and DateTime instances interchangeable on conversions.
72
- # In this case, it simply returns +self+.
73
- def to_time
74
- self
75
- end
68
+ # A method to keep Time, Date and DateTime instances interchangeable on conversions.
69
+ # In this case, it simply returns +self+.
70
+ def to_time
71
+ self
72
+ end unless method_defined?(:to_time)
76
73
 
77
- # Converts a Time instance to a Ruby DateTime instance, preserving UTC offset.
78
- #
79
- # my_time = Time.now # => Mon Nov 12 23:04:21 -0500 2007
80
- # my_time.to_datetime # => Mon, 12 Nov 2007 23:04:21 -0500
81
- #
82
- # your_time = Time.parse("1/13/2009 1:13:03 P.M.") # => Tue Jan 13 13:13:03 -0500 2009
83
- # your_time.to_datetime # => Tue, 13 Jan 2009 13:13:03 -0500
84
- def to_datetime
85
- ::DateTime.civil(year, month, day, hour, min, sec, Rational(utc_offset, 86400))
86
- end
87
- end
88
- end
89
- end
74
+ # Converts a Time instance to a Ruby DateTime instance, preserving UTC offset.
75
+ #
76
+ # my_time = Time.now # => Mon Nov 12 23:04:21 -0500 2007
77
+ # my_time.to_datetime # => Mon, 12 Nov 2007 23:04:21 -0500
78
+ #
79
+ # your_time = Time.parse("1/13/2009 1:13:03 P.M.") # => Tue Jan 13 13:13:03 -0500 2009
80
+ # your_time.to_datetime # => Tue, 13 Jan 2009 13:13:03 -0500
81
+ def to_datetime
82
+ ::DateTime.civil(year, month, day, hour, min, sec, Rational(utc_offset, 86400))
83
+ end unless method_defined?(:to_datetime)
90
84
  end
@@ -0,0 +1,22 @@
1
+ # Pre-1.9 versions of Ruby have a bug with marshaling Time instances, where utc instances are
2
+ # unmarshalled in the local zone, instead of utc. We're layering behavior on the _dump and _load
3
+ # methods so that utc instances can be flagged on dump, and coerced back to utc on load.
4
+ if RUBY_VERSION < '1.9'
5
+ class Time
6
+ class << self
7
+ alias_method :_original_load, :_load
8
+ def _load(marshaled_time)
9
+ time = _original_load(marshaled_time)
10
+ utc = time.instance_variable_get('@marshal_with_utc_coercion')
11
+ utc ? time.utc : time
12
+ end
13
+ end
14
+
15
+ alias_method :_original_dump, :_dump
16
+ def _dump(*args)
17
+ obj = frozen? ? dup : self
18
+ obj.instance_variable_set('@marshal_with_utc_coercion', utc?)
19
+ obj._original_dump(*args)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ require 'date'
2
+
3
+ class Time
4
+ # Ruby 1.8-cvs and early 1.9 series define private Time#to_date
5
+ %w(to_date to_datetime).each do |method|
6
+ if private_instance_methods.include?(method) || private_instance_methods.include?(method.to_sym)
7
+ public method
8
+ end
9
+ end
10
+ end
@@ -1,86 +1,78 @@
1
- module ActiveSupport #:nodoc:
2
- module CoreExtensions #:nodoc:
3
- module Time #:nodoc:
4
- module Zones
5
- def self.included(base) #:nodoc:
6
- base.extend(ClassMethods) if base == ::Time # i.e., don't include class methods in DateTime
7
- end
8
-
9
- module ClassMethods
10
- attr_accessor :zone_default
11
-
12
- # Returns the TimeZone for the current request, if this has been set (via Time.zone=).
13
- # If <tt>Time.zone</tt> has not been set for the current request, returns the TimeZone specified in <tt>config.time_zone</tt>.
14
- def zone
15
- Thread.current[:time_zone] || zone_default
16
- end
1
+ require 'active_support/time_with_zone'
2
+
3
+ class Time
4
+ class << self
5
+ attr_accessor :zone_default
6
+
7
+ # Returns the TimeZone for the current request, if this has been set (via Time.zone=).
8
+ # If <tt>Time.zone</tt> has not been set for the current request, returns the TimeZone specified in <tt>config.time_zone</tt>.
9
+ def zone
10
+ Thread.current[:time_zone] || zone_default
11
+ end
17
12
 
18
- # Sets <tt>Time.zone</tt> to a TimeZone object for the current request/thread.
19
- #
20
- # This method accepts any of the following:
21
- #
22
- # * A Rails TimeZone object.
23
- # * An identifier for a Rails TimeZone object (e.g., "Eastern Time (US & Canada)", <tt>-5.hours</tt>).
24
- # * A TZInfo::Timezone object.
25
- # * An identifier for a TZInfo::Timezone object (e.g., "America/New_York").
26
- #
27
- # Here's an example of how you might set <tt>Time.zone</tt> on a per request basis -- <tt>current_user.time_zone</tt>
28
- # just needs to return a string identifying the user's preferred TimeZone:
29
- #
30
- # class ApplicationController < ActionController::Base
31
- # before_filter :set_time_zone
32
- #
33
- # def set_time_zone
34
- # Time.zone = current_user.time_zone
35
- # end
36
- # end
37
- def zone=(time_zone)
38
- Thread.current[:time_zone] = get_zone(time_zone)
39
- end
40
-
41
- # Allows override of <tt>Time.zone</tt> locally inside supplied block; resets <tt>Time.zone</tt> to existing value when done.
42
- def use_zone(time_zone)
43
- old_zone, ::Time.zone = ::Time.zone, get_zone(time_zone)
44
- yield
45
- ensure
46
- ::Time.zone = old_zone
47
- end
48
-
49
- # Returns <tt>Time.zone.now</tt> when <tt>config.time_zone</tt> is set, otherwise just returns <tt>Time.now</tt>.
50
- def current
51
- ::Time.zone_default ? ::Time.zone.now : ::Time.now
52
- end
53
-
54
- private
55
- def get_zone(time_zone)
56
- return time_zone if time_zone.nil? || time_zone.is_a?(TimeZone)
57
- # lookup timezone based on identifier (unless we've been passed a TZInfo::Timezone)
58
- unless time_zone.respond_to?(:period_for_local)
59
- time_zone = TimeZone[time_zone] || TZInfo::Timezone.get(time_zone) rescue nil
60
- end
61
- # Return if a TimeZone instance, or wrap in a TimeZone instance if a TZInfo::Timezone
62
- if time_zone
63
- time_zone.is_a?(TimeZone) ? time_zone : TimeZone.create(time_zone.name, nil, time_zone)
64
- end
65
- end
13
+ # Sets <tt>Time.zone</tt> to a TimeZone object for the current request/thread.
14
+ #
15
+ # This method accepts any of the following:
16
+ #
17
+ # * A Rails TimeZone object.
18
+ # * An identifier for a Rails TimeZone object (e.g., "Eastern Time (US & Canada)", <tt>-5.hours</tt>).
19
+ # * A TZInfo::Timezone object.
20
+ # * An identifier for a TZInfo::Timezone object (e.g., "America/New_York").
21
+ #
22
+ # Here's an example of how you might set <tt>Time.zone</tt> on a per request basis -- <tt>current_user.time_zone</tt>
23
+ # just needs to return a string identifying the user's preferred TimeZone:
24
+ #
25
+ # class ApplicationController < ActionController::Base
26
+ # before_filter :set_time_zone
27
+ #
28
+ # def set_time_zone
29
+ # Time.zone = current_user.time_zone
30
+ # end
31
+ # end
32
+ def zone=(time_zone)
33
+ Thread.current[:time_zone] = get_zone(time_zone)
34
+ end
35
+
36
+ # Allows override of <tt>Time.zone</tt> locally inside supplied block; resets <tt>Time.zone</tt> to existing value when done.
37
+ def use_zone(time_zone)
38
+ old_zone, ::Time.zone = ::Time.zone, get_zone(time_zone)
39
+ yield
40
+ ensure
41
+ ::Time.zone = old_zone
42
+ end
43
+
44
+ # Returns <tt>Time.zone.now</tt> when <tt>config.time_zone</tt> is set, otherwise just returns <tt>Time.now</tt>.
45
+ def current
46
+ ::Time.zone_default ? ::Time.zone.now : ::Time.now
47
+ end
48
+
49
+ private
50
+ def get_zone(time_zone)
51
+ return time_zone if time_zone.nil? || time_zone.is_a?(ActiveSupport::TimeZone)
52
+ # lookup timezone based on identifier (unless we've been passed a TZInfo::Timezone)
53
+ unless time_zone.respond_to?(:period_for_local)
54
+ time_zone = ActiveSupport::TimeZone[time_zone] || TZInfo::Timezone.get(time_zone) rescue nil
66
55
  end
67
-
68
- # Returns the simultaneous time in <tt>Time.zone</tt>.
69
- #
70
- # Time.zone = 'Hawaii' # => 'Hawaii'
71
- # Time.utc(2000).in_time_zone # => Fri, 31 Dec 1999 14:00:00 HST -10:00
72
- #
73
- # This method is similar to Time#localtime, except that it uses <tt>Time.zone</tt> as the local zone
74
- # instead of the operating system's time zone.
75
- #
76
- # You can also pass in a TimeZone instance or string that identifies a TimeZone as an argument,
77
- # and the conversion will be based on that zone instead of <tt>Time.zone</tt>.
78
- #
79
- # Time.utc(2000).in_time_zone('Alaska') # => Fri, 31 Dec 1999 15:00:00 AKST -09:00
80
- def in_time_zone(zone = ::Time.zone)
81
- ActiveSupport::TimeWithZone.new(utc? ? self : getutc, ::Time.__send__(:get_zone, zone))
56
+ # Return if a TimeZone instance, or wrap in a TimeZone instance if a TZInfo::Timezone
57
+ if time_zone
58
+ time_zone.is_a?(ActiveSupport::TimeZone) ? time_zone : ActiveSupport::TimeZone.create(time_zone.name, nil, time_zone)
82
59
  end
83
60
  end
84
- end
85
61
  end
86
- end
62
+
63
+ # Returns the simultaneous time in <tt>Time.zone</tt>.
64
+ #
65
+ # Time.zone = 'Hawaii' # => 'Hawaii'
66
+ # Time.utc(2000).in_time_zone # => Fri, 31 Dec 1999 14:00:00 HST -10:00
67
+ #
68
+ # This method is similar to Time#localtime, except that it uses <tt>Time.zone</tt> as the local zone
69
+ # instead of the operating system's time zone.
70
+ #
71
+ # You can also pass in a TimeZone instance or string that identifies a TimeZone as an argument,
72
+ # and the conversion will be based on that zone instead of <tt>Time.zone</tt>.
73
+ #
74
+ # Time.utc(2000).in_time_zone('Alaska') # => Fri, 31 Dec 1999 15:00:00 AKST -09:00
75
+ def in_time_zone(zone = ::Time.zone)
76
+ ActiveSupport::TimeWithZone.new(utc? ? self : getutc, ::Time.__send__(:get_zone, zone))
77
+ end
78
+ end
@@ -4,7 +4,8 @@ if RUBY_VERSION >= '1.9'
4
4
  str = "\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E" # Ni-ho-nn-go in UTF-8, means Japanese.
5
5
  str.force_encoding(Encoding::UTF_8) if str.respond_to?(:force_encoding)
6
6
 
7
- unless str == URI.unescape(URI.escape(str))
7
+ parser = URI::Parser.new
8
+ unless str == parser.unescape(parser.escape(str))
8
9
  URI::Parser.class_eval do
9
10
  remove_method :unescape
10
11
  def unescape(str, escaped = @regexp[:ESCAPED])
@@ -1,4 +1,13 @@
1
+ require 'set'
1
2
  require 'thread'
3
+ require 'active_support/core_ext/module/aliasing'
4
+ require 'active_support/core_ext/module/attribute_accessors'
5
+ require 'active_support/core_ext/module/introspection'
6
+ require 'active_support/core_ext/object/blank'
7
+ require 'active_support/core_ext/load_error'
8
+ require 'active_support/core_ext/name_error'
9
+ require 'active_support/core_ext/string/starts_ends_with'
10
+ require 'active_support/inflector'
2
11
 
3
12
  module ActiveSupport #:nodoc:
4
13
  module Dependencies #:nodoc:
@@ -18,42 +27,18 @@ module ActiveSupport #:nodoc:
18
27
 
19
28
  # Should we load files or require them?
20
29
  mattr_accessor :mechanism
21
- self.mechanism = :load
30
+ self.mechanism = ENV['NO_RELOAD'] ? :require : :load
22
31
 
23
32
  # The set of directories from which we may automatically load files. Files
24
33
  # under these directories will be reloaded on each request in development mode,
25
- # unless the directory also appears in autoload_once_paths.
26
- mattr_accessor :autoload_paths
27
- self.autoload_paths = []
28
-
29
- # Deprecated, use autoload_paths.
30
- def self.load_paths
31
- ActiveSupport::Deprecation.warn("ActiveSupport::Dependencies.load_paths is deprecated, please use autoload_paths instead", caller)
32
- autoload_paths
33
- end
34
-
35
- # Deprecated, use autoload_paths=.
36
- def self.load_paths=(paths)
37
- ActiveSupport::Deprecation.warn("ActiveSupport::Dependencies.load_paths= is deprecated, please use autoload_paths= instead", caller)
38
- self.autoload_paths = paths
39
- end
34
+ # unless the directory also appears in load_once_paths.
35
+ mattr_accessor :load_paths
36
+ self.load_paths = []
40
37
 
41
38
  # The set of directories from which automatically loaded constants are loaded
42
- # only once. All directories in this set must also be present in +autoload_paths+.
43
- mattr_accessor :autoload_once_paths
44
- self.autoload_once_paths = []
45
-
46
- # Deprecated, use autoload_once_paths.
47
- def self.load_once_paths
48
- ActiveSupport::Deprecation.warn("ActiveSupport::Dependencies.load_once_paths is deprecated and removed in Rails 3, please use autoload_once_paths instead", caller)
49
- autoload_once_paths
50
- end
51
-
52
- # Deprecated, use autoload_once_paths=.
53
- def self.load_once_paths=(paths)
54
- ActiveSupport::Deprecation.warn("ActiveSupport::Dependencies.load_once_paths= is deprecated and removed in Rails 3, please use autoload_once_paths= instead", caller)
55
- self.autoload_once_paths = paths
56
- end
39
+ # only once. All directories in this set must also be present in +load_paths+.
40
+ mattr_accessor :load_once_paths
41
+ self.load_once_paths = []
57
42
 
58
43
  # An array of qualified constant names that have been loaded. Adding a name to
59
44
  # this array will cause it to be unloaded the next time Dependencies are cleared.
@@ -158,8 +143,8 @@ module ActiveSupport #:nodoc:
158
143
  Dependencies.require_or_load(file_name)
159
144
  end
160
145
 
161
- def require_dependency(file_name)
162
- Dependencies.depend_on(file_name)
146
+ def require_dependency(file_name, message = "No such file to load -- %s")
147
+ Dependencies.depend_on(file_name, false, message)
163
148
  end
164
149
 
165
150
  def require_association(file_name)
@@ -245,11 +230,16 @@ module ActiveSupport #:nodoc:
245
230
  mechanism == :load
246
231
  end
247
232
 
248
- def depend_on(file_name, swallow_load_errors = false)
233
+ def depend_on(file_name, swallow_load_errors = false, message = "No such file to load -- %s.rb")
249
234
  path = search_for_file(file_name)
250
235
  require_or_load(path || file_name)
251
- rescue LoadError
252
- raise unless swallow_load_errors
236
+ rescue LoadError => load_error
237
+ unless swallow_load_errors
238
+ if file_name = load_error.message[/ -- (.*?)(\.rb)?$/, 1]
239
+ raise LoadError.new(message % file_name).copy_blame!(load_error)
240
+ end
241
+ raise
242
+ end
253
243
  end
254
244
 
255
245
  def associate_with(file_name)
@@ -331,7 +321,7 @@ module ActiveSupport #:nodoc:
331
321
 
332
322
  # Given +path+, a filesystem path to a ruby file, return an array of constant
333
323
  # paths which would cause Dependencies to attempt to load this file.
334
- def loadable_constants_for_path(path, bases = autoload_paths)
324
+ def loadable_constants_for_path(path, bases = load_paths)
335
325
  path = $1 if path =~ /\A(.*)\.rb\Z/
336
326
  expanded_path = File.expand_path(path)
337
327
 
@@ -349,13 +339,13 @@ module ActiveSupport #:nodoc:
349
339
  next
350
340
  end
351
341
  [ nesting_camel ]
352
- end.flatten.compact.uniq
342
+ end.compact.flatten.compact.uniq
353
343
  end
354
344
 
355
- # Search for a file in autoload_paths matching the provided suffix.
345
+ # Search for a file in load_paths matching the provided suffix.
356
346
  def search_for_file(path_suffix)
357
- path_suffix = path_suffix + '.rb' unless path_suffix.ends_with? '.rb'
358
- autoload_paths.each do |root|
347
+ path_suffix = "#{path_suffix}.rb" unless path_suffix =~ /\.rb\Z/
348
+ load_paths.each do |root|
359
349
  path = File.join(root, path_suffix)
360
350
  return path if File.file? path
361
351
  end
@@ -365,14 +355,14 @@ module ActiveSupport #:nodoc:
365
355
  # Does the provided path_suffix correspond to an autoloadable module?
366
356
  # Instead of returning a boolean, the autoload base for this module is returned.
367
357
  def autoloadable_module?(path_suffix)
368
- autoload_paths.each do |load_path|
358
+ load_paths.each do |load_path|
369
359
  return load_path if File.directory? File.join(load_path, path_suffix)
370
360
  end
371
361
  nil
372
362
  end
373
363
 
374
364
  def load_once_path?(path)
375
- autoload_once_paths.any? { |base| path.starts_with? base }
365
+ load_once_paths.any? { |base| path.starts_with? base }
376
366
  end
377
367
 
378
368
  # Attempt to autoload the provided module name by searching for a directory
@@ -384,7 +374,7 @@ module ActiveSupport #:nodoc:
384
374
  return nil unless base_path = autoloadable_module?(path_suffix)
385
375
  mod = Module.new
386
376
  into.const_set const_name, mod
387
- autoloaded_constants << qualified_name unless autoload_once_paths.include?(base_path)
377
+ autoloaded_constants << qualified_name unless load_once_paths.include?(base_path)
388
378
  return mod
389
379
  end
390
380
 
@@ -436,7 +426,7 @@ module ActiveSupport #:nodoc:
436
426
  # If we have an anonymous module, all we can do is attempt to load from Object.
437
427
  from_mod = Object if from_mod.name.blank?
438
428
 
439
- unless qualified_const_defined?(from_mod.name) && from_mod.name.constantize.object_id == from_mod.object_id
429
+ unless qualified_const_defined?(from_mod.name) && Inflector.constantize(from_mod.name).object_id == from_mod.object_id
440
430
  raise ArgumentError, "A copy of #{from_mod} has been removed from the module tree but is still active!"
441
431
  end
442
432
 
@@ -527,7 +517,7 @@ module ActiveSupport #:nodoc:
527
517
 
528
518
  # Handle the case where the module has yet to be defined.
529
519
  initial_constants = if qualified_const_defined?(mod_name)
530
- mod_name.constantize.local_constant_names
520
+ Inflector.constantize(mod_name).local_constant_names
531
521
  else
532
522
  []
533
523
  end
@@ -552,7 +542,7 @@ module ActiveSupport #:nodoc:
552
542
  # Module still doesn't exist? Treat it as if it has no constants.
553
543
  next [] unless qualified_const_defined?(mod_name)
554
544
 
555
- mod = mod_name.constantize
545
+ mod = Inflector.constantize(mod_name)
556
546
  next [] unless mod.is_a? Module
557
547
  new_constants = mod.local_constant_names - prior_constants
558
548
 
@@ -622,7 +612,7 @@ module ActiveSupport #:nodoc:
622
612
  if names.size == 1 # It's under Object
623
613
  parent = Object
624
614
  else
625
- parent = (names[0..-2] * '::').constantize
615
+ parent = Inflector.constantize(names[0..-2] * '::')
626
616
  end
627
617
 
628
618
  log "removing constant #{const}"