activesupport_csi 2.3.5.p6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (349) hide show
  1. data/CHANGELOG +1330 -0
  2. data/README +43 -0
  3. data/lib/active_support/all.rb +8 -0
  4. data/lib/active_support/backtrace_cleaner.rb +72 -0
  5. data/lib/active_support/base64.rb +33 -0
  6. data/lib/active_support/basic_object.rb +24 -0
  7. data/lib/active_support/buffered_logger.rb +127 -0
  8. data/lib/active_support/cache/compressed_mem_cache_store.rb +20 -0
  9. data/lib/active_support/cache/drb_store.rb +14 -0
  10. data/lib/active_support/cache/file_store.rb +72 -0
  11. data/lib/active_support/cache/mem_cache_store.rb +143 -0
  12. data/lib/active_support/cache/memory_store.rb +52 -0
  13. data/lib/active_support/cache/strategy/local_cache.rb +104 -0
  14. data/lib/active_support/cache/synchronized_memory_store.rb +47 -0
  15. data/lib/active_support/cache.rb +248 -0
  16. data/lib/active_support/callbacks.rb +279 -0
  17. data/lib/active_support/core_ext/array/access.rb +53 -0
  18. data/lib/active_support/core_ext/array/conversions.rb +197 -0
  19. data/lib/active_support/core_ext/array/extract_options.rb +20 -0
  20. data/lib/active_support/core_ext/array/grouping.rb +106 -0
  21. data/lib/active_support/core_ext/array/random_access.rb +12 -0
  22. data/lib/active_support/core_ext/array/wrapper.rb +24 -0
  23. data/lib/active_support/core_ext/array.rb +15 -0
  24. data/lib/active_support/core_ext/base64/encoding.rb +16 -0
  25. data/lib/active_support/core_ext/base64.rb +4 -0
  26. data/lib/active_support/core_ext/benchmark.rb +19 -0
  27. data/lib/active_support/core_ext/bigdecimal/conversions.rb +37 -0
  28. data/lib/active_support/core_ext/bigdecimal.rb +6 -0
  29. data/lib/active_support/core_ext/blank.rb +2 -0
  30. data/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +23 -0
  31. data/lib/active_support/core_ext/cgi.rb +5 -0
  32. data/lib/active_support/core_ext/class/attribute_accessors.rb +54 -0
  33. data/lib/active_support/core_ext/class/delegating_attributes.rb +47 -0
  34. data/lib/active_support/core_ext/class/inheritable_attributes.rb +140 -0
  35. data/lib/active_support/core_ext/class/removal.rb +50 -0
  36. data/lib/active_support/core_ext/class.rb +4 -0
  37. data/lib/active_support/core_ext/date/behavior.rb +42 -0
  38. data/lib/active_support/core_ext/date/calculations.rb +231 -0
  39. data/lib/active_support/core_ext/date/conversions.rb +107 -0
  40. data/lib/active_support/core_ext/date.rb +10 -0
  41. data/lib/active_support/core_ext/date_time/calculations.rb +126 -0
  42. data/lib/active_support/core_ext/date_time/conversions.rb +96 -0
  43. data/lib/active_support/core_ext/date_time.rb +12 -0
  44. data/lib/active_support/core_ext/duplicable.rb +43 -0
  45. data/lib/active_support/core_ext/enumerable.rb +114 -0
  46. data/lib/active_support/core_ext/exception.rb +45 -0
  47. data/lib/active_support/core_ext/file/atomic.rb +46 -0
  48. data/lib/active_support/core_ext/file.rb +5 -0
  49. data/lib/active_support/core_ext/float/rounding.rb +24 -0
  50. data/lib/active_support/core_ext/float/time.rb +27 -0
  51. data/lib/active_support/core_ext/float.rb +7 -0
  52. data/lib/active_support/core_ext/hash/conversions.rb +264 -0
  53. data/lib/active_support/core_ext/hash/deep_merge.rb +23 -0
  54. data/lib/active_support/core_ext/hash/diff.rb +19 -0
  55. data/lib/active_support/core_ext/hash/except.rb +25 -0
  56. data/lib/active_support/core_ext/hash/indifferent_access.rb +143 -0
  57. data/lib/active_support/core_ext/hash/keys.rb +52 -0
  58. data/lib/active_support/core_ext/hash/reverse_merge.rb +35 -0
  59. data/lib/active_support/core_ext/hash/slice.rb +40 -0
  60. data/lib/active_support/core_ext/hash.rb +14 -0
  61. data/lib/active_support/core_ext/integer/even_odd.rb +29 -0
  62. data/lib/active_support/core_ext/integer/inflections.rb +20 -0
  63. data/lib/active_support/core_ext/integer/time.rb +45 -0
  64. data/lib/active_support/core_ext/integer.rb +9 -0
  65. data/lib/active_support/core_ext/kernel/agnostics.rb +11 -0
  66. data/lib/active_support/core_ext/kernel/daemonizing.rb +7 -0
  67. data/lib/active_support/core_ext/kernel/debugger.rb +16 -0
  68. data/lib/active_support/core_ext/kernel/reporting.rb +59 -0
  69. data/lib/active_support/core_ext/kernel/requires.rb +24 -0
  70. data/lib/active_support/core_ext/kernel.rb +5 -0
  71. data/lib/active_support/core_ext/load_error.rb +38 -0
  72. data/lib/active_support/core_ext/logger.rb +145 -0
  73. data/lib/active_support/core_ext/module/aliasing.rb +74 -0
  74. data/lib/active_support/core_ext/module/attr_accessor_with_default.rb +31 -0
  75. data/lib/active_support/core_ext/module/attr_internal.rb +32 -0
  76. data/lib/active_support/core_ext/module/attribute_accessors.rb +60 -0
  77. data/lib/active_support/core_ext/module/delegation.rb +135 -0
  78. data/lib/active_support/core_ext/module/inclusion.rb +30 -0
  79. data/lib/active_support/core_ext/module/introspection.rb +90 -0
  80. data/lib/active_support/core_ext/module/loading.rb +23 -0
  81. data/lib/active_support/core_ext/module/model_naming.rb +25 -0
  82. data/lib/active_support/core_ext/module/synchronization.rb +39 -0
  83. data/lib/active_support/core_ext/module.rb +23 -0
  84. data/lib/active_support/core_ext/name_error.rb +19 -0
  85. data/lib/active_support/core_ext/numeric/bytes.rb +50 -0
  86. data/lib/active_support/core_ext/numeric/conversions.rb +19 -0
  87. data/lib/active_support/core_ext/numeric/time.rb +81 -0
  88. data/lib/active_support/core_ext/numeric.rb +9 -0
  89. data/lib/active_support/core_ext/object/blank.rb +58 -0
  90. data/lib/active_support/core_ext/object/conversions.rb +15 -0
  91. data/lib/active_support/core_ext/object/extending.rb +80 -0
  92. data/lib/active_support/core_ext/object/instance_variables.rb +74 -0
  93. data/lib/active_support/core_ext/object/metaclass.rb +13 -0
  94. data/lib/active_support/core_ext/object/misc.rb +90 -0
  95. data/lib/active_support/core_ext/object.rb +6 -0
  96. data/lib/active_support/core_ext/pathname/clean_within.rb +14 -0
  97. data/lib/active_support/core_ext/pathname.rb +7 -0
  98. data/lib/active_support/core_ext/proc.rb +12 -0
  99. data/lib/active_support/core_ext/process/daemon.rb +25 -0
  100. data/lib/active_support/core_ext/process.rb +1 -0
  101. data/lib/active_support/core_ext/range/blockless_step.rb +32 -0
  102. data/lib/active_support/core_ext/range/conversions.rb +27 -0
  103. data/lib/active_support/core_ext/range/include_range.rb +30 -0
  104. data/lib/active_support/core_ext/range/overlaps.rb +15 -0
  105. data/lib/active_support/core_ext/range.rb +11 -0
  106. data/lib/active_support/core_ext/rexml.rb +41 -0
  107. data/lib/active_support/core_ext/string/access.rb +106 -0
  108. data/lib/active_support/core_ext/string/behavior.rb +13 -0
  109. data/lib/active_support/core_ext/string/bytesize.rb +5 -0
  110. data/lib/active_support/core_ext/string/conversions.rb +28 -0
  111. data/lib/active_support/core_ext/string/filters.rb +26 -0
  112. data/lib/active_support/core_ext/string/inflections.rb +167 -0
  113. data/lib/active_support/core_ext/string/iterators.rb +23 -0
  114. data/lib/active_support/core_ext/string/multibyte.rb +81 -0
  115. data/lib/active_support/core_ext/string/output_safety.rb +48 -0
  116. data/lib/active_support/core_ext/string/starts_ends_with.rb +35 -0
  117. data/lib/active_support/core_ext/string/xchar.rb +11 -0
  118. data/lib/active_support/core_ext/string.rb +25 -0
  119. data/lib/active_support/core_ext/symbol.rb +14 -0
  120. data/lib/active_support/core_ext/time/behavior.rb +13 -0
  121. data/lib/active_support/core_ext/time/calculations.rb +304 -0
  122. data/lib/active_support/core_ext/time/conversions.rb +90 -0
  123. data/lib/active_support/core_ext/time/zones.rb +86 -0
  124. data/lib/active_support/core_ext/time.rb +42 -0
  125. data/lib/active_support/core_ext/try.rb +36 -0
  126. data/lib/active_support/core_ext/uri.rb +16 -0
  127. data/lib/active_support/core_ext.rb +8 -0
  128. data/lib/active_support/dependencies.rb +625 -0
  129. data/lib/active_support/deprecation.rb +196 -0
  130. data/lib/active_support/duration.rb +100 -0
  131. data/lib/active_support/gzip.rb +25 -0
  132. data/lib/active_support/inflections.rb +56 -0
  133. data/lib/active_support/inflector.rb +406 -0
  134. data/lib/active_support/json/backends/jsongem.rb +37 -0
  135. data/lib/active_support/json/backends/okjson.rb +644 -0
  136. data/lib/active_support/json/backends/yaml.rb +20 -0
  137. data/lib/active_support/json/decoding.rb +50 -0
  138. data/lib/active_support/json/encoders/date.rb +22 -0
  139. data/lib/active_support/json/encoders/date_time.rb +22 -0
  140. data/lib/active_support/json/encoders/enumerable.rb +17 -0
  141. data/lib/active_support/json/encoders/false_class.rb +7 -0
  142. data/lib/active_support/json/encoders/hash.rb +56 -0
  143. data/lib/active_support/json/encoders/nil_class.rb +7 -0
  144. data/lib/active_support/json/encoders/numeric.rb +21 -0
  145. data/lib/active_support/json/encoders/object.rb +10 -0
  146. data/lib/active_support/json/encoders/regexp.rb +9 -0
  147. data/lib/active_support/json/encoders/string.rb +9 -0
  148. data/lib/active_support/json/encoders/symbol.rb +5 -0
  149. data/lib/active_support/json/encoders/time.rb +22 -0
  150. data/lib/active_support/json/encoders/true_class.rb +7 -0
  151. data/lib/active_support/json/encoding.rb +102 -0
  152. data/lib/active_support/json/variable.rb +10 -0
  153. data/lib/active_support/json.rb +2 -0
  154. data/lib/active_support/locale/en.yml +33 -0
  155. data/lib/active_support/memoizable.rb +100 -0
  156. data/lib/active_support/message_encryptor.rb +70 -0
  157. data/lib/active_support/message_verifier.rb +79 -0
  158. data/lib/active_support/multibyte/chars.rb +707 -0
  159. data/lib/active_support/multibyte/exceptions.rb +8 -0
  160. data/lib/active_support/multibyte/unicode_database.rb +71 -0
  161. data/lib/active_support/multibyte/utils.rb +61 -0
  162. data/lib/active_support/multibyte.rb +57 -0
  163. data/lib/active_support/option_merger.rb +23 -0
  164. data/lib/active_support/ordered_hash.rb +141 -0
  165. data/lib/active_support/ordered_options.rb +19 -0
  166. data/lib/active_support/rescuable.rb +108 -0
  167. data/lib/active_support/secure_random.rb +199 -0
  168. data/lib/active_support/string_inquirer.rb +21 -0
  169. data/lib/active_support/test_case.rb +40 -0
  170. data/lib/active_support/testing/assertions.rb +65 -0
  171. data/lib/active_support/testing/declarative.rb +21 -0
  172. data/lib/active_support/testing/default.rb +9 -0
  173. data/lib/active_support/testing/deprecation.rb +57 -0
  174. data/lib/active_support/testing/performance.rb +452 -0
  175. data/lib/active_support/testing/setup_and_teardown.rb +91 -0
  176. data/lib/active_support/time_with_zone.rb +335 -0
  177. data/lib/active_support/values/time_zone.rb +404 -0
  178. data/lib/active_support/values/unicode_tables.dat +0 -0
  179. data/lib/active_support/vendor/builder-2.1.2/blankslate.rb +113 -0
  180. data/lib/active_support/vendor/builder-2.1.2/builder/blankslate.rb +20 -0
  181. data/lib/active_support/vendor/builder-2.1.2/builder/css.rb +250 -0
  182. data/lib/active_support/vendor/builder-2.1.2/builder/xchar.rb +115 -0
  183. data/lib/active_support/vendor/builder-2.1.2/builder/xmlbase.rb +139 -0
  184. data/lib/active_support/vendor/builder-2.1.2/builder/xmlevents.rb +63 -0
  185. data/lib/active_support/vendor/builder-2.1.2/builder/xmlmarkup.rb +328 -0
  186. data/lib/active_support/vendor/builder-2.1.2/builder.rb +13 -0
  187. data/lib/active_support/vendor/i18n-0.1.3/MIT-LICENSE +20 -0
  188. data/lib/active_support/vendor/i18n-0.1.3/README.textile +20 -0
  189. data/lib/active_support/vendor/i18n-0.1.3/Rakefile +5 -0
  190. data/lib/active_support/vendor/i18n-0.1.3/i18n.gemspec +27 -0
  191. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n/backend/simple.rb +214 -0
  192. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n/exceptions.rb +53 -0
  193. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n.rb +199 -0
  194. data/lib/active_support/vendor/i18n-0.1.3/test/all.rb +5 -0
  195. data/lib/active_support/vendor/i18n-0.1.3/test/i18n_exceptions_test.rb +99 -0
  196. data/lib/active_support/vendor/i18n-0.1.3/test/i18n_test.rb +124 -0
  197. data/lib/active_support/vendor/i18n-0.1.3/test/locale/en.rb +1 -0
  198. data/lib/active_support/vendor/i18n-0.1.3/test/locale/en.yml +3 -0
  199. data/lib/active_support/vendor/i18n-0.1.3/test/simple_backend_test.rb +567 -0
  200. data/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb +1107 -0
  201. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/data_timezone.rb +47 -0
  202. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/data_timezone_info.rb +228 -0
  203. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Algiers.rb +55 -0
  204. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Cairo.rb +219 -0
  205. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Casablanca.rb +40 -0
  206. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Harare.rb +18 -0
  207. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Johannesburg.rb +25 -0
  208. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Monrovia.rb +22 -0
  209. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Nairobi.rb +23 -0
  210. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +166 -0
  211. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/San_Juan.rb +86 -0
  212. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Bogota.rb +23 -0
  213. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Caracas.rb +23 -0
  214. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Chicago.rb +283 -0
  215. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Chihuahua.rb +136 -0
  216. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Denver.rb +204 -0
  217. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Godthab.rb +161 -0
  218. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Guatemala.rb +27 -0
  219. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Halifax.rb +274 -0
  220. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Indiana/Indianapolis.rb +149 -0
  221. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Juneau.rb +194 -0
  222. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/La_Paz.rb +22 -0
  223. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Lima.rb +35 -0
  224. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Los_Angeles.rb +232 -0
  225. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Mazatlan.rb +139 -0
  226. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Mexico_City.rb +144 -0
  227. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Monterrey.rb +131 -0
  228. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/New_York.rb +282 -0
  229. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Phoenix.rb +30 -0
  230. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Regina.rb +74 -0
  231. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Santiago.rb +205 -0
  232. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Sao_Paulo.rb +171 -0
  233. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/St_Johns.rb +288 -0
  234. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Tijuana.rb +196 -0
  235. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Almaty.rb +67 -0
  236. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Baghdad.rb +73 -0
  237. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Baku.rb +161 -0
  238. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Bangkok.rb +20 -0
  239. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Chongqing.rb +33 -0
  240. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Colombo.rb +30 -0
  241. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Dhaka.rb +27 -0
  242. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Hong_Kong.rb +87 -0
  243. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Irkutsk.rb +165 -0
  244. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Jakarta.rb +30 -0
  245. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Jerusalem.rb +163 -0
  246. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kabul.rb +20 -0
  247. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kamchatka.rb +163 -0
  248. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Karachi.rb +30 -0
  249. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Katmandu.rb +20 -0
  250. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kolkata.rb +25 -0
  251. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Krasnoyarsk.rb +163 -0
  252. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kuala_Lumpur.rb +31 -0
  253. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kuwait.rb +18 -0
  254. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Magadan.rb +163 -0
  255. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Muscat.rb +18 -0
  256. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Novosibirsk.rb +164 -0
  257. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Rangoon.rb +24 -0
  258. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Riyadh.rb +18 -0
  259. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Seoul.rb +34 -0
  260. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Shanghai.rb +35 -0
  261. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Singapore.rb +33 -0
  262. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Taipei.rb +59 -0
  263. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tashkent.rb +47 -0
  264. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tbilisi.rb +78 -0
  265. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tehran.rb +121 -0
  266. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tokyo.rb +30 -0
  267. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Ulaanbaatar.rb +65 -0
  268. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Urumqi.rb +33 -0
  269. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Vladivostok.rb +164 -0
  270. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yakutsk.rb +163 -0
  271. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yekaterinburg.rb +165 -0
  272. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yerevan.rb +165 -0
  273. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/Azores.rb +270 -0
  274. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/Cape_Verde.rb +23 -0
  275. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/South_Georgia.rb +18 -0
  276. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Adelaide.rb +187 -0
  277. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Brisbane.rb +35 -0
  278. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Darwin.rb +29 -0
  279. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Hobart.rb +193 -0
  280. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Melbourne.rb +185 -0
  281. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Perth.rb +37 -0
  282. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Sydney.rb +185 -0
  283. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Etc/UTC.rb +16 -0
  284. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Amsterdam.rb +228 -0
  285. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Athens.rb +185 -0
  286. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Belgrade.rb +163 -0
  287. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Berlin.rb +188 -0
  288. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Bratislava.rb +13 -0
  289. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Brussels.rb +232 -0
  290. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Bucharest.rb +181 -0
  291. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Budapest.rb +197 -0
  292. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Copenhagen.rb +179 -0
  293. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Dublin.rb +276 -0
  294. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Helsinki.rb +163 -0
  295. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Istanbul.rb +218 -0
  296. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Kiev.rb +168 -0
  297. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Lisbon.rb +268 -0
  298. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Ljubljana.rb +13 -0
  299. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/London.rb +288 -0
  300. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Madrid.rb +211 -0
  301. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Minsk.rb +170 -0
  302. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Moscow.rb +181 -0
  303. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Paris.rb +232 -0
  304. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Prague.rb +187 -0
  305. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Riga.rb +176 -0
  306. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Rome.rb +215 -0
  307. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Sarajevo.rb +13 -0
  308. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Skopje.rb +13 -0
  309. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Sofia.rb +173 -0
  310. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Stockholm.rb +165 -0
  311. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Tallinn.rb +172 -0
  312. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Vienna.rb +183 -0
  313. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Vilnius.rb +170 -0
  314. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Warsaw.rb +212 -0
  315. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Zagreb.rb +13 -0
  316. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Auckland.rb +202 -0
  317. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Fiji.rb +23 -0
  318. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Guam.rb +22 -0
  319. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Honolulu.rb +28 -0
  320. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Majuro.rb +20 -0
  321. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Midway.rb +25 -0
  322. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Noumea.rb +25 -0
  323. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Pago_Pago.rb +26 -0
  324. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Port_Moresby.rb +20 -0
  325. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Tongatapu.rb +27 -0
  326. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/info_timezone.rb +52 -0
  327. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/linked_timezone.rb +51 -0
  328. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/linked_timezone_info.rb +44 -0
  329. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/offset_rationals.rb +98 -0
  330. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/ruby_core_support.rb +56 -0
  331. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/time_or_datetime.rb +292 -0
  332. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone.rb +508 -0
  333. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_definition.rb +56 -0
  334. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_info.rb +40 -0
  335. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_offset_info.rb +94 -0
  336. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_period.rb +198 -0
  337. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_transition_info.rb +129 -0
  338. data/lib/active_support/vendor/tzinfo-0.3.12/tzinfo.rb +33 -0
  339. data/lib/active_support/vendor.rb +28 -0
  340. data/lib/active_support/version.rb +9 -0
  341. data/lib/active_support/whiny_nil.rb +64 -0
  342. data/lib/active_support/xml_mini/jdom.rb +162 -0
  343. data/lib/active_support/xml_mini/libxml.rb +133 -0
  344. data/lib/active_support/xml_mini/nokogiri.rb +69 -0
  345. data/lib/active_support/xml_mini/rexml.rb +108 -0
  346. data/lib/active_support/xml_mini.rb +31 -0
  347. data/lib/active_support.rb +59 -0
  348. data/lib/activesupport.rb +2 -0
  349. metadata +418 -0
@@ -0,0 +1,140 @@
1
+ # Retain for backward compatibility. Methods are now included in Class.
2
+ module ClassInheritableAttributes # :nodoc:
3
+ end
4
+
5
+ # Allows attributes to be shared within an inheritance hierarchy, but where each descendant gets a copy of
6
+ # their parents' attributes, instead of just a pointer to the same. This means that the child can add elements
7
+ # to, for example, an array without those additions being shared with either their parent, siblings, or
8
+ # children, which is unlike the regular class-level attributes that are shared across the entire hierarchy.
9
+ class Class # :nodoc:
10
+ def class_inheritable_reader(*syms)
11
+ syms.each do |sym|
12
+ next if sym.is_a?(Hash)
13
+ class_eval <<-EOS
14
+ def self.#{sym} # def self.before_add_for_comments
15
+ read_inheritable_attribute(:#{sym}) # read_inheritable_attribute(:before_add_for_comments)
16
+ end # end
17
+ #
18
+ def #{sym} # def before_add_for_comments
19
+ self.class.#{sym} # self.class.before_add_for_comments
20
+ end # end
21
+ EOS
22
+ end
23
+ end
24
+
25
+ def class_inheritable_writer(*syms)
26
+ options = syms.extract_options!
27
+ syms.each do |sym|
28
+ class_eval <<-EOS
29
+ def self.#{sym}=(obj) # def self.color=(obj)
30
+ write_inheritable_attribute(:#{sym}, obj) # write_inheritable_attribute(:color, obj)
31
+ end # end
32
+ #
33
+ #{" #
34
+ def #{sym}=(obj) # def color=(obj)
35
+ self.class.#{sym} = obj # self.class.color = obj
36
+ end # end
37
+ " unless options[:instance_writer] == false } # # the writer above is generated unless options[:instance_writer] == false
38
+ EOS
39
+ end
40
+ end
41
+
42
+ def class_inheritable_array_writer(*syms)
43
+ options = syms.extract_options!
44
+ syms.each do |sym|
45
+ class_eval <<-EOS
46
+ def self.#{sym}=(obj) # def self.levels=(obj)
47
+ write_inheritable_array(:#{sym}, obj) # write_inheritable_array(:levels, obj)
48
+ end # end
49
+ #
50
+ #{" #
51
+ def #{sym}=(obj) # def levels=(obj)
52
+ self.class.#{sym} = obj # self.class.levels = obj
53
+ end # end
54
+ " unless options[:instance_writer] == false } # # the writer above is generated unless options[:instance_writer] == false
55
+ EOS
56
+ end
57
+ end
58
+
59
+ def class_inheritable_hash_writer(*syms)
60
+ options = syms.extract_options!
61
+ syms.each do |sym|
62
+ class_eval <<-EOS
63
+ def self.#{sym}=(obj) # def self.nicknames=(obj)
64
+ write_inheritable_hash(:#{sym}, obj) # write_inheritable_hash(:nicknames, obj)
65
+ end # end
66
+ #
67
+ #{" #
68
+ def #{sym}=(obj) # def nicknames=(obj)
69
+ self.class.#{sym} = obj # self.class.nicknames = obj
70
+ end # end
71
+ " unless options[:instance_writer] == false } # # the writer above is generated unless options[:instance_writer] == false
72
+ EOS
73
+ end
74
+ end
75
+
76
+ def class_inheritable_accessor(*syms)
77
+ class_inheritable_reader(*syms)
78
+ class_inheritable_writer(*syms)
79
+ end
80
+
81
+ def class_inheritable_array(*syms)
82
+ class_inheritable_reader(*syms)
83
+ class_inheritable_array_writer(*syms)
84
+ end
85
+
86
+ def class_inheritable_hash(*syms)
87
+ class_inheritable_reader(*syms)
88
+ class_inheritable_hash_writer(*syms)
89
+ end
90
+
91
+ def inheritable_attributes
92
+ @inheritable_attributes ||= EMPTY_INHERITABLE_ATTRIBUTES
93
+ end
94
+
95
+ def write_inheritable_attribute(key, value)
96
+ if inheritable_attributes.equal?(EMPTY_INHERITABLE_ATTRIBUTES)
97
+ @inheritable_attributes = {}
98
+ end
99
+ inheritable_attributes[key] = value
100
+ end
101
+
102
+ def write_inheritable_array(key, elements)
103
+ write_inheritable_attribute(key, []) if read_inheritable_attribute(key).nil?
104
+ write_inheritable_attribute(key, read_inheritable_attribute(key) + elements)
105
+ end
106
+
107
+ def write_inheritable_hash(key, hash)
108
+ write_inheritable_attribute(key, {}) if read_inheritable_attribute(key).nil?
109
+ write_inheritable_attribute(key, read_inheritable_attribute(key).merge(hash))
110
+ end
111
+
112
+ def read_inheritable_attribute(key)
113
+ inheritable_attributes[key]
114
+ end
115
+
116
+ def reset_inheritable_attributes
117
+ @inheritable_attributes = EMPTY_INHERITABLE_ATTRIBUTES
118
+ end
119
+
120
+ private
121
+ # Prevent this constant from being created multiple times
122
+ EMPTY_INHERITABLE_ATTRIBUTES = {}.freeze unless const_defined?(:EMPTY_INHERITABLE_ATTRIBUTES)
123
+
124
+ def inherited_with_inheritable_attributes(child)
125
+ inherited_without_inheritable_attributes(child) if respond_to?(:inherited_without_inheritable_attributes)
126
+
127
+ if inheritable_attributes.equal?(EMPTY_INHERITABLE_ATTRIBUTES)
128
+ new_inheritable_attributes = EMPTY_INHERITABLE_ATTRIBUTES
129
+ else
130
+ new_inheritable_attributes = inheritable_attributes.inject({}) do |memo, (key, value)|
131
+ memo.update(key => value.duplicable? ? value.dup : value)
132
+ end
133
+ end
134
+
135
+ child.instance_variable_set('@inheritable_attributes', new_inheritable_attributes)
136
+ end
137
+
138
+ alias inherited_without_inheritable_attributes inherited
139
+ alias inherited inherited_with_inheritable_attributes
140
+ end
@@ -0,0 +1,50 @@
1
+ class Class #:nodoc:
2
+
3
+ # Unassociates the class with its subclasses and removes the subclasses
4
+ # themselves.
5
+ #
6
+ # Integer.remove_subclasses # => [Bignum, Fixnum]
7
+ # Fixnum # => NameError: uninitialized constant Fixnum
8
+ def remove_subclasses
9
+ Object.remove_subclasses_of(self)
10
+ end
11
+
12
+ # Returns an array with the names of the subclasses of +self+ as strings.
13
+ #
14
+ # Integer.subclasses # => ["Bignum", "Fixnum"]
15
+ def subclasses
16
+ Object.subclasses_of(self).map { |o| o.to_s }
17
+ end
18
+
19
+ # Removes the classes in +klasses+ from their parent module.
20
+ #
21
+ # Ordinary classes belong to some module via a constant. This method computes
22
+ # that constant name from the class name and removes it from the module it
23
+ # belongs to.
24
+ #
25
+ # Object.remove_class(Integer) # => [Integer]
26
+ # Integer # => NameError: uninitialized constant Integer
27
+ #
28
+ # Take into account that in general the class object could be still stored
29
+ # somewhere else.
30
+ #
31
+ # i = Integer # => Integer
32
+ # Object.remove_class(Integer) # => [Integer]
33
+ # Integer # => NameError: uninitialized constant Integer
34
+ # i.subclasses # => ["Bignum", "Fixnum"]
35
+ # Fixnum.superclass # => Integer
36
+ def remove_class(*klasses)
37
+ klasses.flatten.each do |klass|
38
+ # Skip this class if there is nothing bound to this name
39
+ next unless defined?(klass.name)
40
+
41
+ basename = klass.to_s.split("::").last
42
+ parent = klass.parent
43
+
44
+ # Skip this class if it does not match the current one bound to this name
45
+ next unless parent.const_defined?(basename) && klass = parent.const_get(basename)
46
+
47
+ parent.instance_eval { remove_const basename } unless parent == klass
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,4 @@
1
+ require 'active_support/core_ext/class/attribute_accessors'
2
+ require 'active_support/core_ext/class/inheritable_attributes'
3
+ require 'active_support/core_ext/class/removal'
4
+ require 'active_support/core_ext/class/delegating_attributes'
@@ -0,0 +1,42 @@
1
+ require 'date'
2
+
3
+ module ActiveSupport #:nodoc:
4
+ module CoreExtensions #:nodoc:
5
+ module Date #:nodoc:
6
+ module Behavior
7
+ # Enable more predictable duck-typing on Date-like classes. See
8
+ # Object#acts_like?.
9
+ def acts_like_date?
10
+ true
11
+ end
12
+
13
+ # Date memoizes some instance methods using metaprogramming to wrap
14
+ # the methods with one that caches the result in an instance variable.
15
+ #
16
+ # If a Date is frozen but the memoized method hasn't been called, the
17
+ # first call will result in a frozen object error since the memo
18
+ # instance variable is uninitialized.
19
+ #
20
+ # Work around by eagerly memoizing before freezing.
21
+ #
22
+ # Ruby 1.9 uses a preinitialized instance variable so it's unaffected.
23
+ # This hack is as close as we can get to feature detection:
24
+ begin
25
+ ::Date.today.freeze.jd
26
+ rescue => frozen_object_error
27
+ if frozen_object_error.message =~ /frozen/
28
+ def freeze #:nodoc:
29
+ self.class.private_instance_methods(false).each do |m|
30
+ if m.to_s =~ /\A__\d+__\Z/
31
+ instance_variable_set(:"@#{m}", [send(m)])
32
+ end
33
+ end
34
+
35
+ super
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,231 @@
1
+ module ActiveSupport #:nodoc:
2
+ module CoreExtensions #:nodoc:
3
+ module Date #:nodoc:
4
+ # Enables the use of time calculations within Date itself
5
+ module Calculations
6
+ def self.included(base) #:nodoc:
7
+ base.extend ClassMethods
8
+
9
+ base.instance_eval do
10
+ alias_method :plus_without_duration, :+
11
+ alias_method :+, :plus_with_duration
12
+
13
+ alias_method :minus_without_duration, :-
14
+ alias_method :-, :minus_with_duration
15
+ end
16
+ end
17
+
18
+ module ClassMethods
19
+ # Returns a new Date representing the date 1 day ago (i.e. yesterday's date).
20
+ def yesterday
21
+ ::Date.today.yesterday
22
+ end
23
+
24
+ # Returns a new Date representing the date 1 day after today (i.e. tomorrow's date).
25
+ def tomorrow
26
+ ::Date.today.tomorrow
27
+ end
28
+
29
+ # Returns Time.zone.today when config.time_zone is set, otherwise just returns Date.today.
30
+ def current
31
+ ::Time.zone_default ? ::Time.zone.today : ::Date.today
32
+ end
33
+ end
34
+
35
+ # Tells whether the Date object's date lies in the past
36
+ def past?
37
+ self < ::Date.current
38
+ end
39
+
40
+ # Tells whether the Date object's date is today
41
+ def today?
42
+ self.to_date == ::Date.current # we need the to_date because of DateTime
43
+ end
44
+
45
+ # Tells whether the Date object's date lies in the future
46
+ def future?
47
+ self > ::Date.current
48
+ end
49
+
50
+ # Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00)
51
+ # and then subtracts the specified number of seconds
52
+ def ago(seconds)
53
+ to_time.since(-seconds)
54
+ end
55
+
56
+ # Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00)
57
+ # and then adds the specified number of seconds
58
+ def since(seconds)
59
+ to_time.since(seconds)
60
+ end
61
+ alias :in :since
62
+
63
+ # Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00)
64
+ def beginning_of_day
65
+ to_time
66
+ end
67
+ alias :midnight :beginning_of_day
68
+ alias :at_midnight :beginning_of_day
69
+ alias :at_beginning_of_day :beginning_of_day
70
+
71
+ # Converts Date to a Time (or DateTime if necessary) with the time portion set to the end of the day (23:59:59)
72
+ def end_of_day
73
+ to_time.end_of_day
74
+ end
75
+
76
+ def plus_with_duration(other) #:nodoc:
77
+ if ActiveSupport::Duration === other
78
+ other.since(self)
79
+ else
80
+ plus_without_duration(other)
81
+ end
82
+ end
83
+
84
+ def minus_with_duration(other) #:nodoc:
85
+ if ActiveSupport::Duration === other
86
+ plus_with_duration(-other)
87
+ else
88
+ minus_without_duration(other)
89
+ end
90
+ end
91
+
92
+ # Provides precise Date calculations for years, months, and days. The +options+ parameter takes a hash with
93
+ # any of these keys: <tt>:years</tt>, <tt>:months</tt>, <tt>:weeks</tt>, <tt>:days</tt>.
94
+ def advance(options)
95
+ options = options.dup
96
+ d = self
97
+ d = d >> options.delete(:years) * 12 if options[:years]
98
+ d = d >> options.delete(:months) if options[:months]
99
+ d = d + options.delete(:weeks) * 7 if options[:weeks]
100
+ d = d + options.delete(:days) if options[:days]
101
+ d
102
+ end
103
+
104
+ # Returns a new Date where one or more of the elements have been changed according to the +options+ parameter.
105
+ #
106
+ # Examples:
107
+ #
108
+ # Date.new(2007, 5, 12).change(:day => 1) # => Date.new(2007, 5, 1)
109
+ # Date.new(2007, 5, 12).change(:year => 2005, :month => 1) # => Date.new(2005, 1, 12)
110
+ def change(options)
111
+ ::Date.new(
112
+ options[:year] || self.year,
113
+ options[:month] || self.month,
114
+ options[:day] || self.day
115
+ )
116
+ end
117
+
118
+ # Returns a new Date/DateTime representing the time a number of specified months ago
119
+ def months_ago(months)
120
+ advance(:months => -months)
121
+ end
122
+
123
+ # Returns a new Date/DateTime representing the time a number of specified months in the future
124
+ def months_since(months)
125
+ advance(:months => months)
126
+ end
127
+
128
+ # Returns a new Date/DateTime representing the time a number of specified years ago
129
+ def years_ago(years)
130
+ advance(:years => -years)
131
+ end
132
+
133
+ # Returns a new Date/DateTime representing the time a number of specified years in the future
134
+ def years_since(years)
135
+ advance(:years => years)
136
+ end
137
+
138
+ # Short-hand for years_ago(1)
139
+ def last_year
140
+ years_ago(1)
141
+ end
142
+
143
+ # Short-hand for years_since(1)
144
+ def next_year
145
+ years_since(1)
146
+ end
147
+
148
+ # Short-hand for months_ago(1)
149
+ def last_month
150
+ months_ago(1)
151
+ end
152
+
153
+ # Short-hand for months_since(1)
154
+ def next_month
155
+ months_since(1)
156
+ end
157
+
158
+ # Returns a new Date/DateTime representing the "start" of this week (i.e, Monday; DateTime objects will have time set to 0:00)
159
+ def beginning_of_week
160
+ days_to_monday = self.wday!=0 ? self.wday-1 : 6
161
+ result = self - days_to_monday
162
+ self.acts_like?(:time) ? result.midnight : result
163
+ end
164
+ alias :monday :beginning_of_week
165
+ alias :at_beginning_of_week :beginning_of_week
166
+
167
+ # Returns a new Date/DateTime representing the end of this week (Sunday, DateTime objects will have time set to 23:59:59)
168
+ def end_of_week
169
+ days_to_sunday = self.wday!=0 ? 7-self.wday : 0
170
+ result = self + days_to_sunday.days
171
+ self.acts_like?(:time) ? result.end_of_day : result
172
+ end
173
+ alias :at_end_of_week :end_of_week
174
+
175
+ # Returns a new Date/DateTime representing the start of the given day in next week (default is Monday).
176
+ def next_week(day = :monday)
177
+ days_into_week = { :monday => 0, :tuesday => 1, :wednesday => 2, :thursday => 3, :friday => 4, :saturday => 5, :sunday => 6}
178
+ result = (self + 7).beginning_of_week + days_into_week[day]
179
+ self.acts_like?(:time) ? result.change(:hour => 0) : result
180
+ end
181
+
182
+ # Returns a new ; DateTime objects will have time set to 0:00DateTime representing the start of the month (1st of the month; DateTime objects will have time set to 0:00)
183
+ def beginning_of_month
184
+ self.acts_like?(:time) ? change(:day => 1,:hour => 0, :min => 0, :sec => 0) : change(:day => 1)
185
+ end
186
+ alias :at_beginning_of_month :beginning_of_month
187
+
188
+ # Returns a new Date/DateTime representing the end of the month (last day of the month; DateTime objects will have time set to 0:00)
189
+ def end_of_month
190
+ last_day = ::Time.days_in_month( self.month, self.year )
191
+ self.acts_like?(:time) ? change(:day => last_day, :hour => 23, :min => 59, :sec => 59) : change(:day => last_day)
192
+ end
193
+ alias :at_end_of_month :end_of_month
194
+
195
+ # Returns a new Date/DateTime representing the start of the quarter (1st of january, april, july, october; DateTime objects will have time set to 0:00)
196
+ def beginning_of_quarter
197
+ beginning_of_month.change(:month => [10, 7, 4, 1].detect { |m| m <= self.month })
198
+ end
199
+ alias :at_beginning_of_quarter :beginning_of_quarter
200
+
201
+ # Returns a new Date/DateTime representing the end of the quarter (last day of march, june, september, december; DateTime objects will have time set to 23:59:59)
202
+ def end_of_quarter
203
+ beginning_of_month.change(:month => [3, 6, 9, 12].detect { |m| m >= self.month }).end_of_month
204
+ end
205
+ alias :at_end_of_quarter :end_of_quarter
206
+
207
+ # Returns a new Date/DateTime representing the start of the year (1st of january; DateTime objects will have time set to 0:00)
208
+ def beginning_of_year
209
+ self.acts_like?(:time) ? change(:month => 1, :day => 1, :hour => 0, :min => 0, :sec => 0) : change(:month => 1, :day => 1)
210
+ end
211
+ alias :at_beginning_of_year :beginning_of_year
212
+
213
+ # Returns a new Time representing the end of the year (31st of december; DateTime objects will have time set to 23:59:59)
214
+ def end_of_year
215
+ self.acts_like?(:time) ? change(:month => 12,:day => 31,:hour => 23, :min => 59, :sec => 59) : change(:month => 12, :day => 31)
216
+ end
217
+ alias :at_end_of_year :end_of_year
218
+
219
+ # Convenience method which returns a new Date/DateTime representing the time 1 day ago
220
+ def yesterday
221
+ self - 1
222
+ end
223
+
224
+ # Convenience method which returns a new Date/DateTime representing the time 1 day since the instance time
225
+ def tomorrow
226
+ self + 1
227
+ end
228
+ end
229
+ end
230
+ end
231
+ end
@@ -0,0 +1,107 @@
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
+ }
14
+
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
21
+
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)
24
+
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
29
+
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
64
+
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
69
+
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'
75
+
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
89
+
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'
100
+
101
+ def xmlschema
102
+ to_time.xmlschema
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,10 @@
1
+ require 'date'
2
+ require 'active_support/core_ext/date/behavior'
3
+ require 'active_support/core_ext/date/calculations'
4
+ require 'active_support/core_ext/date/conversions'
5
+
6
+ class Date#:nodoc:
7
+ include ActiveSupport::CoreExtensions::Date::Behavior
8
+ include ActiveSupport::CoreExtensions::Date::Calculations
9
+ include ActiveSupport::CoreExtensions::Date::Conversions
10
+ end