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,107 +1,98 @@
1
- module ActiveSupport #:nodoc:
2
- module CoreExtensions #:nodoc:
3
- module Date #:nodoc:
4
- # Converting dates to formatted strings, times, and datetimes.
5
- module Conversions
6
- DATE_FORMATS = {
7
- :short => "%e %b",
8
- :long => "%B %e, %Y",
9
- :db => "%Y-%m-%d",
10
- :number => "%Y%m%d",
11
- :long_ordinal => lambda { |date| date.strftime("%B #{date.day.ordinalize}, %Y") }, # => "April 25th, 2007"
12
- :rfc822 => "%e %b %Y"
13
- }
1
+ require 'date'
2
+ require 'active_support/inflector'
14
3
 
15
- def self.included(base) #:nodoc:
16
- base.instance_eval do
17
- alias_method :to_default_s, :to_s
18
- alias_method :to_s, :to_formatted_s
19
- alias_method :default_inspect, :inspect
20
- alias_method :inspect, :readable_inspect
4
+ class Date
5
+ DATE_FORMATS = {
6
+ :short => "%e %b",
7
+ :long => "%B %e, %Y",
8
+ :db => "%Y-%m-%d",
9
+ :number => "%Y%m%d",
10
+ :long_ordinal => lambda { |date| date.strftime("%B #{ActiveSupport::Inflector.ordinalize(date.day)}, %Y") }, # => "April 25th, 2007"
11
+ :rfc822 => "%e %b %Y"
12
+ }
21
13
 
22
- # Ruby 1.9 has Date#to_time which converts to localtime only.
23
- remove_method :to_time if base.instance_methods.include?(:to_time)
14
+ # Ruby 1.9 has Date#to_time which converts to localtime only.
15
+ remove_method :to_time if instance_methods.include?(:to_time)
24
16
 
25
- # Ruby 1.9 has Date#xmlschema which converts to a string without the time component.
26
- remove_method :xmlschema if base.instance_methods.include?(:xmlschema)
27
- end
28
- end
17
+ # Ruby 1.9 has Date#xmlschema which converts to a string without the time component.
18
+ remove_method :xmlschema if instance_methods.include?(:xmlschema)
29
19
 
30
- # Convert to a formatted string. See DATE_FORMATS for predefined formats.
31
- #
32
- # This method is aliased to <tt>to_s</tt>.
33
- #
34
- # ==== Examples
35
- # date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007
36
- #
37
- # date.to_formatted_s(:db) # => "2007-11-10"
38
- # date.to_s(:db) # => "2007-11-10"
39
- #
40
- # date.to_formatted_s(:short) # => "10 Nov"
41
- # date.to_formatted_s(:long) # => "November 10, 2007"
42
- # date.to_formatted_s(:long_ordinal) # => "November 10th, 2007"
43
- # date.to_formatted_s(:rfc822) # => "10 Nov 2007"
44
- #
45
- # == Adding your own time formats to to_formatted_s
46
- # You can add your own formats to the Date::DATE_FORMATS hash.
47
- # Use the format name as the hash key and either a strftime string
48
- # or Proc instance that takes a date argument as the value.
49
- #
50
- # # config/initializers/time_formats.rb
51
- # Date::DATE_FORMATS[:month_and_year] = "%B %Y"
52
- # Date::DATE_FORMATS[:short_ordinal] = lambda { |date| date.strftime("%B #{date.day.ordinalize}") }
53
- def to_formatted_s(format = :default)
54
- if formatter = DATE_FORMATS[format]
55
- if formatter.respond_to?(:call)
56
- formatter.call(self).to_s
57
- else
58
- strftime(formatter)
59
- end
60
- else
61
- to_default_s
62
- end
63
- end
20
+ # Convert to a formatted string. See DATE_FORMATS for predefined formats.
21
+ #
22
+ # This method is aliased to <tt>to_s</tt>.
23
+ #
24
+ # ==== Examples
25
+ # date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007
26
+ #
27
+ # date.to_formatted_s(:db) # => "2007-11-10"
28
+ # date.to_s(:db) # => "2007-11-10"
29
+ #
30
+ # date.to_formatted_s(:short) # => "10 Nov"
31
+ # date.to_formatted_s(:long) # => "November 10, 2007"
32
+ # date.to_formatted_s(:long_ordinal) # => "November 10th, 2007"
33
+ # date.to_formatted_s(:rfc822) # => "10 Nov 2007"
34
+ #
35
+ # == Adding your own time formats to to_formatted_s
36
+ # You can add your own formats to the Date::DATE_FORMATS hash.
37
+ # Use the format name as the hash key and either a strftime string
38
+ # or Proc instance that takes a date argument as the value.
39
+ #
40
+ # # config/initializers/time_formats.rb
41
+ # Date::DATE_FORMATS[:month_and_year] = "%B %Y"
42
+ # Date::DATE_FORMATS[:short_ordinal] = lambda { |date| date.strftime("%B #{date.day.ordinalize}") }
43
+ def to_formatted_s(format = :default)
44
+ if formatter = DATE_FORMATS[format]
45
+ if formatter.respond_to?(:call)
46
+ formatter.call(self).to_s
47
+ else
48
+ strftime(formatter)
49
+ end
50
+ else
51
+ to_default_s
52
+ end
53
+ end
54
+ alias_method :to_default_s, :to_s
55
+ alias_method :to_s, :to_formatted_s
64
56
 
65
- # Overrides the default inspect method with a human readable one, e.g., "Mon, 21 Feb 2005"
66
- def readable_inspect
67
- strftime("%a, %d %b %Y")
68
- end
57
+ # Overrides the default inspect method with a human readable one, e.g., "Mon, 21 Feb 2005"
58
+ def readable_inspect
59
+ strftime("%a, %d %b %Y")
60
+ end
61
+ alias_method :default_inspect, :inspect
62
+ alias_method :inspect, :readable_inspect
69
63
 
70
- # A method to keep Time, Date and DateTime instances interchangeable on conversions.
71
- # In this case, it simply returns +self+.
72
- def to_date
73
- self
74
- end if RUBY_VERSION < '1.9'
64
+ # A method to keep Time, Date and DateTime instances interchangeable on conversions.
65
+ # In this case, it simply returns +self+.
66
+ def to_date
67
+ self
68
+ end if RUBY_VERSION < '1.9'
75
69
 
76
- # Converts a Date instance to a Time, where the time is set to the beginning of the day.
77
- # The timezone can be either :local or :utc (default :local).
78
- #
79
- # ==== Examples
80
- # date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007
81
- #
82
- # date.to_time # => Sat Nov 10 00:00:00 0800 2007
83
- # date.to_time(:local) # => Sat Nov 10 00:00:00 0800 2007
84
- #
85
- # date.to_time(:utc) # => Sat Nov 10 00:00:00 UTC 2007
86
- def to_time(form = :local)
87
- ::Time.send("#{form}_time", year, month, day)
88
- end
70
+ # Converts a Date instance to a Time, where the time is set to the beginning of the day.
71
+ # The timezone can be either :local or :utc (default :local).
72
+ #
73
+ # ==== Examples
74
+ # date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007
75
+ #
76
+ # date.to_time # => Sat Nov 10 00:00:00 0800 2007
77
+ # date.to_time(:local) # => Sat Nov 10 00:00:00 0800 2007
78
+ #
79
+ # date.to_time(:utc) # => Sat Nov 10 00:00:00 UTC 2007
80
+ def to_time(form = :local)
81
+ ::Time.send("#{form}_time", year, month, day)
82
+ end
89
83
 
90
- # Converts a Date instance to a DateTime, where the time is set to the beginning of the day
91
- # and UTC offset is set to 0.
92
- #
93
- # ==== Examples
94
- # date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007
95
- #
96
- # date.to_datetime # => Sat, 10 Nov 2007 00:00:00 0000
97
- def to_datetime
98
- ::DateTime.civil(year, month, day, 0, 0, 0, 0)
99
- end if RUBY_VERSION < '1.9'
84
+ # Converts a Date instance to a DateTime, where the time is set to the beginning of the day
85
+ # and UTC offset is set to 0.
86
+ #
87
+ # ==== Examples
88
+ # date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007
89
+ #
90
+ # date.to_datetime # => Sat, 10 Nov 2007 00:00:00 0000
91
+ def to_datetime
92
+ ::DateTime.civil(year, month, day, 0, 0, 0, 0)
93
+ end if RUBY_VERSION < '1.9'
100
94
 
101
- def xmlschema
102
- to_time.xmlschema
103
- end
104
- end
105
- end
95
+ def xmlschema
96
+ to_time.xmlschema
106
97
  end
107
98
  end
@@ -0,0 +1,31 @@
1
+ # Date memoizes some instance methods using metaprogramming to wrap
2
+ # the methods with one that caches the result in an instance variable.
3
+ #
4
+ # If a Date is frozen but the memoized method hasn't been called, the
5
+ # first call will result in a frozen object error since the memo
6
+ # instance variable is uninitialized.
7
+ #
8
+ # Work around by eagerly memoizing before freezing.
9
+ #
10
+ # Ruby 1.9 uses a preinitialized instance variable so it's unaffected.
11
+ # This hack is as close as we can get to feature detection:
12
+ if RUBY_VERSION < '1.9'
13
+ require 'date'
14
+ begin
15
+ ::Date.today.freeze.jd
16
+ rescue => frozen_object_error
17
+ if frozen_object_error.message =~ /frozen/
18
+ class Date #:nodoc:
19
+ def freeze
20
+ self.class.private_instance_methods(false).each do |m|
21
+ if m.to_s =~ /\A__\d+__\Z/
22
+ instance_variable_set(:"@#{m}", [send(m)])
23
+ end
24
+ end
25
+
26
+ super
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,13 @@
1
+ require 'active_support/core_ext/object/acts_like'
2
+
3
+ class DateTime
4
+ # Duck-types as a Date-like class. See Object#acts_like?.
5
+ def acts_like_date?
6
+ true
7
+ end
8
+
9
+ # Duck-types as a Time-like class. See Object#acts_like?.
10
+ def acts_like_time?
11
+ true
12
+ end
13
+ end
@@ -1,126 +1,113 @@
1
- require 'rational'
2
-
3
- module ActiveSupport #:nodoc:
4
- module CoreExtensions #:nodoc:
5
- module DateTime #:nodoc:
6
- # Enables the use of time calculations within DateTime itself
7
- module Calculations
8
- def self.included(base) #:nodoc:
9
- base.extend ClassMethods
10
-
11
- base.class_eval do
12
- alias_method :compare_without_coercion, :<=>
13
- alias_method :<=>, :compare_with_coercion
14
- end
15
- end
16
-
17
- module ClassMethods
18
- # DateTimes aren't aware of DST rules, so use a consistent non-DST offset when creating a DateTime with an offset in the local zone
19
- def local_offset
20
- ::Time.local(2007).utc_offset.to_r / 86400
21
- end
1
+ require 'rational' unless RUBY_VERSION >= '1.9.2'
2
+ require 'active_support/core_ext/object/acts_like'
3
+
4
+ class DateTime
5
+ class << self
6
+ # DateTimes aren't aware of DST rules, so use a consistent non-DST offset when creating a DateTime with an offset in the local zone
7
+ def local_offset
8
+ ::Time.local(2007).utc_offset.to_r / 86400
9
+ end
22
10
 
23
- def current
24
- ::Time.zone_default ? ::Time.zone.now.to_datetime : ::Time.now.to_datetime
25
- end
26
- end
11
+ def current
12
+ ::Time.zone_default ? ::Time.zone.now.to_datetime : ::Time.now.to_datetime
13
+ end
14
+ end
27
15
 
28
- # Tells whether the DateTime object's datetime lies in the past
29
- def past?
30
- self < ::DateTime.current
31
- end
16
+ # Tells whether the DateTime object's datetime lies in the past
17
+ def past?
18
+ self < ::DateTime.current
19
+ end
32
20
 
33
- # Tells whether the DateTime object's datetime lies in the future
34
- def future?
35
- self > ::DateTime.current
36
- end
21
+ # Tells whether the DateTime object's datetime lies in the future
22
+ def future?
23
+ self > ::DateTime.current
24
+ end
37
25
 
38
- # Seconds since midnight: DateTime.now.seconds_since_midnight
39
- def seconds_since_midnight
40
- self.sec + (self.min * 60) + (self.hour * 3600)
41
- end
26
+ # Seconds since midnight: DateTime.now.seconds_since_midnight
27
+ def seconds_since_midnight
28
+ sec + (min * 60) + (hour * 3600)
29
+ end
42
30
 
43
- # Returns a new DateTime where one or more of the elements have been changed according to the +options+ parameter. The time options
44
- # (hour, minute, sec) reset cascadingly, so if only the hour is passed, then minute and sec is set to 0. If the hour and
45
- # minute is passed, then sec is set to 0.
46
- def change(options)
47
- ::DateTime.civil(
48
- options[:year] || self.year,
49
- options[:month] || self.month,
50
- options[:day] || self.day,
51
- options[:hour] || self.hour,
52
- options[:min] || (options[:hour] ? 0 : self.min),
53
- options[:sec] || ((options[:hour] || options[:min]) ? 0 : self.sec),
54
- options[:offset] || self.offset,
55
- options[:start] || self.start
56
- )
57
- end
31
+ # Returns a new DateTime where one or more of the elements have been changed according to the +options+ parameter. The time options
32
+ # (hour, minute, sec) reset cascadingly, so if only the hour is passed, then minute and sec is set to 0. If the hour and
33
+ # minute is passed, then sec is set to 0.
34
+ def change(options)
35
+ ::DateTime.civil(
36
+ options[:year] || year,
37
+ options[:month] || month,
38
+ options[:day] || day,
39
+ options[:hour] || hour,
40
+ options[:min] || (options[:hour] ? 0 : min),
41
+ options[:sec] || ((options[:hour] || options[:min]) ? 0 : sec),
42
+ options[:offset] || offset,
43
+ options[:start] || start
44
+ )
45
+ end
58
46
 
59
- # Uses Date to provide precise Time calculations for years, months, and days.
60
- # The +options+ parameter takes a hash with any of these keys: <tt>:years</tt>,
61
- # <tt>:months</tt>, <tt>:weeks</tt>, <tt>:days</tt>, <tt>:hours</tt>,
62
- # <tt>:minutes</tt>, <tt>:seconds</tt>.
63
- def advance(options)
64
- d = to_date.advance(options)
65
- datetime_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day)
66
- seconds_to_advance = (options[:seconds] || 0) + (options[:minutes] || 0) * 60 + (options[:hours] || 0) * 3600
67
- seconds_to_advance == 0 ? datetime_advanced_by_date : datetime_advanced_by_date.since(seconds_to_advance)
68
- end
47
+ # Uses Date to provide precise Time calculations for years, months, and days.
48
+ # The +options+ parameter takes a hash with any of these keys: <tt>:years</tt>,
49
+ # <tt>:months</tt>, <tt>:weeks</tt>, <tt>:days</tt>, <tt>:hours</tt>,
50
+ # <tt>:minutes</tt>, <tt>:seconds</tt>.
51
+ def advance(options)
52
+ d = to_date.advance(options)
53
+ datetime_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day)
54
+ seconds_to_advance = (options[:seconds] || 0) + (options[:minutes] || 0) * 60 + (options[:hours] || 0) * 3600
55
+ seconds_to_advance == 0 ? datetime_advanced_by_date : datetime_advanced_by_date.since(seconds_to_advance)
56
+ end
69
57
 
70
- # Returns a new DateTime representing the time a number of seconds ago
71
- # Do not use this method in combination with x.months, use months_ago instead!
72
- def ago(seconds)
73
- self.since(-seconds)
74
- end
58
+ # Returns a new DateTime representing the time a number of seconds ago
59
+ # Do not use this method in combination with x.months, use months_ago instead!
60
+ def ago(seconds)
61
+ since(-seconds)
62
+ end
75
63
 
76
- # Returns a new DateTime representing the time a number of seconds since the instance time
77
- # Do not use this method in combination with x.months, use months_since instead!
78
- def since(seconds)
79
- self + Rational(seconds.round, 86400)
80
- end
81
- alias :in :since
64
+ # Returns a new DateTime representing the time a number of seconds since the instance time
65
+ # Do not use this method in combination with x.months, use months_since instead!
66
+ def since(seconds)
67
+ self + Rational(seconds.round, 86400)
68
+ end
69
+ alias :in :since
82
70
 
83
- # Returns a new DateTime representing the start of the day (0:00)
84
- def beginning_of_day
85
- change(:hour => 0)
86
- end
87
- alias :midnight :beginning_of_day
88
- alias :at_midnight :beginning_of_day
89
- alias :at_beginning_of_day :beginning_of_day
71
+ # Returns a new DateTime representing the start of the day (0:00)
72
+ def beginning_of_day
73
+ change(:hour => 0)
74
+ end
75
+ alias :midnight :beginning_of_day
76
+ alias :at_midnight :beginning_of_day
77
+ alias :at_beginning_of_day :beginning_of_day
90
78
 
91
- # Returns a new DateTime representing the end of the day (23:59:59)
92
- def end_of_day
93
- change(:hour => 23, :min => 59, :sec => 59)
94
- end
79
+ # Returns a new DateTime representing the end of the day (23:59:59)
80
+ def end_of_day
81
+ change(:hour => 23, :min => 59, :sec => 59)
82
+ end
95
83
 
96
- # Adjusts DateTime to UTC by adding its offset value; offset is set to 0
97
- #
98
- # Example:
99
- #
100
- # DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)) # => Mon, 21 Feb 2005 10:11:12 -0600
101
- # DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)).utc # => Mon, 21 Feb 2005 16:11:12 +0000
102
- def utc
103
- new_offset(0)
104
- end
105
- alias_method :getutc, :utc
84
+ # Adjusts DateTime to UTC by adding its offset value; offset is set to 0
85
+ #
86
+ # Example:
87
+ #
88
+ # DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)) # => Mon, 21 Feb 2005 10:11:12 -0600
89
+ # DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24)).utc # => Mon, 21 Feb 2005 16:11:12 +0000
90
+ def utc
91
+ new_offset(0)
92
+ end
93
+ alias_method :getutc, :utc
106
94
 
107
- # Returns true if offset == 0
108
- def utc?
109
- offset == 0
110
- end
95
+ # Returns true if offset == 0
96
+ def utc?
97
+ offset == 0
98
+ end
111
99
 
112
- # Returns the offset value in seconds
113
- def utc_offset
114
- (offset * 86400).to_i
115
- end
100
+ # Returns the offset value in seconds
101
+ def utc_offset
102
+ (offset * 86400).to_i
103
+ end
116
104
 
117
- # Layers additional behavior on DateTime#<=> so that Time and ActiveSupport::TimeWithZone instances can be compared with a DateTime
118
- def compare_with_coercion(other)
119
- other = other.comparable_time if other.respond_to?(:comparable_time)
120
- other = other.to_datetime unless other.acts_like?(:date)
121
- compare_without_coercion(other)
122
- end
123
- end
124
- end
105
+ # Layers additional behavior on DateTime#<=> so that Time and ActiveSupport::TimeWithZone instances can be compared with a DateTime
106
+ def compare_with_coercion(other)
107
+ other = other.comparable_time if other.respond_to?(:comparable_time)
108
+ other = other.to_datetime unless other.acts_like?(:date)
109
+ compare_without_coercion(other)
125
110
  end
111
+ alias_method :compare_without_coercion, :<=>
112
+ alias_method :<=>, :compare_with_coercion
126
113
  end
@@ -1,96 +1,96 @@
1
- module ActiveSupport #:nodoc:
2
- module CoreExtensions #:nodoc:
3
- module DateTime #:nodoc:
4
- # Converting datetimes to formatted strings, dates, and times.
5
- module Conversions
6
- def self.append_features(base) #:nodoc:
7
- base.class_eval do
8
- alias_method :default_inspect, :inspect
9
- alias_method :to_default_s, :to_s unless (instance_methods(false) & [:to_s, 'to_s']).empty?
1
+ require 'active_support/inflector'
2
+ require 'active_support/core_ext/time/conversions'
10
3
 
11
- # Ruby 1.9 has DateTime#to_time which internally relies on Time. We define our own #to_time which allows
12
- # DateTimes outside the range of what can be created with Time.
13
- remove_method :to_time if instance_methods.include?(:to_time)
14
- end
4
+ class DateTime
5
+ # Ruby 1.9 has DateTime#to_time which internally relies on Time. We define our own #to_time which allows
6
+ # DateTimes outside the range of what can be created with Time.
7
+ remove_method :to_time if instance_methods.include?(:to_time)
15
8
 
16
- super
9
+ # Convert to a formatted string. See Time::DATE_FORMATS for predefined formats.
10
+ #
11
+ # This method is aliased to <tt>to_s</tt>.
12
+ #
13
+ # === Examples
14
+ # datetime = DateTime.civil(2007, 12, 4, 0, 0, 0, 0) # => Tue, 04 Dec 2007 00:00:00 +0000
15
+ #
16
+ # datetime.to_formatted_s(:db) # => "2007-12-04 00:00:00"
17
+ # datetime.to_s(:db) # => "2007-12-04 00:00:00"
18
+ # datetime.to_s(:number) # => "20071204000000"
19
+ # datetime.to_formatted_s(:short) # => "04 Dec 00:00"
20
+ # datetime.to_formatted_s(:long) # => "December 04, 2007 00:00"
21
+ # datetime.to_formatted_s(:long_ordinal) # => "December 4th, 2007 00:00"
22
+ # datetime.to_formatted_s(:rfc822) # => "Tue, 04 Dec 2007 00:00:00 +0000"
23
+ #
24
+ # == Adding your own datetime formats to to_formatted_s
25
+ # DateTime formats are shared with Time. You can add your own to the
26
+ # Time::DATE_FORMATS hash. Use the format name as the hash key and
27
+ # either a strftime string or Proc instance that takes a time or
28
+ # datetime argument as the value.
29
+ #
30
+ # # config/initializers/time_formats.rb
31
+ # Time::DATE_FORMATS[:month_and_year] = "%B %Y"
32
+ # Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") }
33
+ def to_formatted_s(format = :default)
34
+ if formatter = ::Time::DATE_FORMATS[format]
35
+ formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
36
+ else
37
+ to_default_s
38
+ end
39
+ end
40
+ alias_method :to_default_s, :to_s unless (instance_methods(false) & [:to_s, 'to_s']).empty?
41
+ alias_method :to_s, :to_formatted_s
17
42
 
18
- base.class_eval do
19
- alias_method :to_s, :to_formatted_s
20
- alias_method :inspect, :readable_inspect
21
- end
22
- end
43
+ # Returns the +utc_offset+ as an +HH:MM formatted string. Examples:
44
+ #
45
+ # datetime = DateTime.civil(2000, 1, 1, 0, 0, 0, Rational(-6, 24))
46
+ # datetime.formatted_offset # => "-06:00"
47
+ # datetime.formatted_offset(false) # => "-0600"
48
+ def formatted_offset(colon = true, alternate_utc_string = nil)
49
+ utc? && alternate_utc_string || ActiveSupport::TimeZone.seconds_to_utc_offset(utc_offset, colon)
50
+ end
51
+
52
+ # Overrides the default inspect method with a human readable one, e.g., "Mon, 21 Feb 2005 14:30:00 +0000"
53
+ def readable_inspect
54
+ to_s(:rfc822)
55
+ end
56
+ alias_method :default_inspect, :inspect
57
+ alias_method :inspect, :readable_inspect
23
58
 
24
- # Convert to a formatted string. See Time::DATE_FORMATS for predefined formats.
25
- #
26
- # This method is aliased to <tt>to_s</tt>.
27
- #
28
- # === Examples
29
- # datetime = DateTime.civil(2007, 12, 4, 0, 0, 0, 0) # => Tue, 04 Dec 2007 00:00:00 +0000
30
- #
31
- # datetime.to_formatted_s(:db) # => "2007-12-04 00:00:00"
32
- # datetime.to_s(:db) # => "2007-12-04 00:00:00"
33
- # datetime.to_s(:number) # => "20071204000000"
34
- # datetime.to_formatted_s(:short) # => "04 Dec 00:00"
35
- # datetime.to_formatted_s(:long) # => "December 04, 2007 00:00"
36
- # datetime.to_formatted_s(:long_ordinal) # => "December 4th, 2007 00:00"
37
- # datetime.to_formatted_s(:rfc822) # => "Tue, 04 Dec 2007 00:00:00 +0000"
38
- #
39
- # == Adding your own datetime formats to to_formatted_s
40
- # DateTime formats are shared with Time. You can add your own to the
41
- # Time::DATE_FORMATS hash. Use the format name as the hash key and
42
- # either a strftime string or Proc instance that takes a time or
43
- # datetime argument as the value.
44
- #
45
- # # config/initializers/time_formats.rb
46
- # Time::DATE_FORMATS[:month_and_year] = "%B %Y"
47
- # Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") }
48
- def to_formatted_s(format = :default)
49
- return to_default_s unless formatter = ::Time::DATE_FORMATS[format]
50
- formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
51
- end
59
+ # Converts self to a Ruby Date object; time portion is discarded
60
+ def to_date
61
+ ::Date.new(year, month, day)
62
+ end unless method_defined?(:to_date)
52
63
 
53
- # Returns the +utc_offset+ as an +HH:MM formatted string. Examples:
54
- #
55
- # datetime = DateTime.civil(2000, 1, 1, 0, 0, 0, Rational(-6, 24))
56
- # datetime.formatted_offset # => "-06:00"
57
- # datetime.formatted_offset(false) # => "-0600"
58
- def formatted_offset(colon = true, alternate_utc_string = nil)
59
- utc? && alternate_utc_string || utc_offset.to_utc_offset_s(colon)
60
- end
61
-
62
- # Overrides the default inspect method with a human readable one, e.g., "Mon, 21 Feb 2005 14:30:00 +0000"
63
- def readable_inspect
64
- to_s(:rfc822)
65
- end
64
+ # Attempts to convert self to a Ruby Time object; returns self if out of range of Ruby Time class
65
+ # If self has an offset other than 0, self will just be returned unaltered, since there's no clean way to map it to a Time
66
+ def to_time
67
+ self.offset == 0 ? ::Time.utc_time(year, month, day, hour, min, sec) : self
68
+ end
66
69
 
67
- # Converts self to a Ruby Date object; time portion is discarded
68
- def to_date
69
- ::Date.new(year, month, day)
70
- end
70
+ # To be able to keep Times, Dates and DateTimes interchangeable on conversions
71
+ def to_datetime
72
+ self
73
+ end unless method_defined?(:to_datetime)
71
74
 
72
- # Attempts to convert self to a Ruby Time object; returns self if out of range of Ruby Time class
73
- # If self has an offset other than 0, self will just be returned unaltered, since there's no clean way to map it to a Time
74
- def to_time
75
- self.offset == 0 ? ::Time.utc_time(year, month, day, hour, min, sec) : self
76
- end
75
+ # Converts datetime to an appropriate format for use in XML
76
+ def xmlschema
77
+ strftime("%Y-%m-%dT%H:%M:%S%Z")
78
+ end unless method_defined?(:xmlschema)
79
+
80
+ # Converts self to a floating-point number of seconds since the Unix epoch
81
+ def to_f
82
+ seconds_since_unix_epoch.to_f
83
+ end
84
+
85
+ # Converts self to an integer number of seconds since the Unix epoch
86
+ def to_i
87
+ seconds_since_unix_epoch.to_i
88
+ end
77
89
 
78
- # To be able to keep Times, Dates and DateTimes interchangeable on conversions
79
- def to_datetime
80
- self
81
- end
90
+ private
82
91
 
83
- # Converts datetime to an appropriate format for use in XML
84
- def xmlschema
85
- strftime("%Y-%m-%dT%H:%M:%S%Z")
86
- end if RUBY_VERSION < '1.9'
87
-
88
- # Converts self to a floating-point number of seconds since the Unix epoch
89
- def to_f
90
- days_since_unix_epoch = self - ::DateTime.civil(1970)
91
- (days_since_unix_epoch * 86_400).to_f
92
- end
93
- end
94
- end
92
+ def seconds_since_unix_epoch
93
+ seconds_per_day = 86_400
94
+ (self - ::DateTime.civil(1970)) * seconds_per_day
95
95
  end
96
96
  end