activesupport 3.0.0.beta4 → 3.0.pre

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.

Potentially problematic release.


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

Files changed (333) hide show
  1. data/CHANGELOG +1 -100
  2. data/lib/active_support.rb +4 -38
  3. data/lib/active_support/autoload.rb +28 -0
  4. data/lib/active_support/backtrace_cleaner.rb +9 -31
  5. data/lib/active_support/benchmarkable.rb +0 -1
  6. data/lib/active_support/buffered_logger.rb +1 -0
  7. data/lib/active_support/cache.rb +81 -436
  8. data/lib/active_support/cache/compressed_mem_cache_store.rb +13 -6
  9. data/lib/active_support/cache/file_store.rb +41 -139
  10. data/lib/active_support/cache/mem_cache_store.rb +75 -120
  11. data/lib/active_support/cache/memory_store.rb +27 -127
  12. data/lib/active_support/cache/strategy/local_cache.rb +58 -111
  13. data/lib/active_support/cache/synchronized_memory_store.rb +38 -2
  14. data/lib/active_support/callbacks.rb +48 -87
  15. data/lib/active_support/configurable.rb +18 -19
  16. data/lib/active_support/core_ext/array.rb +0 -1
  17. data/lib/active_support/core_ext/array/access.rb +1 -1
  18. data/lib/active_support/core_ext/array/conversions.rb +54 -29
  19. data/lib/active_support/core_ext/array/extract_options.rb +1 -16
  20. data/lib/active_support/core_ext/array/random_access.rb +5 -19
  21. data/lib/active_support/core_ext/array/wrap.rb +9 -13
  22. data/lib/active_support/core_ext/benchmark.rb +12 -0
  23. data/lib/active_support/core_ext/boolean.rb +1 -0
  24. data/lib/active_support/core_ext/boolean/conversions.rb +11 -0
  25. data/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +0 -2
  26. data/lib/active_support/core_ext/class.rb +1 -1
  27. data/lib/active_support/core_ext/class/attribute_accessors.rb +27 -33
  28. data/lib/active_support/core_ext/class/delegating_attributes.rb +41 -35
  29. data/lib/active_support/core_ext/class/inheritable_attributes.rb +13 -22
  30. data/lib/active_support/core_ext/class/removal.rb +53 -0
  31. data/lib/active_support/core_ext/date.rb +7 -0
  32. data/lib/active_support/core_ext/date/calculations.rb +8 -30
  33. data/lib/active_support/core_ext/date/conversions.rb +2 -2
  34. data/lib/active_support/core_ext/date_time.rb +5 -0
  35. data/lib/active_support/core_ext/date_time/calculations.rb +1 -2
  36. data/lib/active_support/core_ext/date_time/conversions.rb +5 -23
  37. data/lib/active_support/core_ext/enumerable.rb +9 -5
  38. data/lib/active_support/core_ext/exception.rb +47 -0
  39. data/lib/active_support/core_ext/file.rb +0 -1
  40. data/lib/active_support/core_ext/file/atomic.rb +2 -3
  41. data/lib/active_support/core_ext/float/rounding.rb +2 -3
  42. data/lib/active_support/core_ext/hash/conversions.rb +145 -65
  43. data/lib/active_support/core_ext/hash/deep_merge.rb +7 -6
  44. data/lib/active_support/core_ext/hash/except.rb +0 -8
  45. data/lib/active_support/core_ext/hash/indifferent_access.rb +0 -5
  46. data/lib/active_support/core_ext/hash/keys.rb +11 -10
  47. data/lib/active_support/core_ext/hash/slice.rb +0 -6
  48. data/lib/active_support/core_ext/integer.rb +1 -1
  49. data/lib/active_support/core_ext/integer/even_odd.rb +16 -0
  50. data/lib/active_support/core_ext/kernel.rb +1 -1
  51. data/lib/active_support/core_ext/kernel/daemonizing.rb +7 -0
  52. data/lib/active_support/core_ext/kernel/debugger.rb +2 -3
  53. data/lib/active_support/core_ext/kernel/reporting.rb +1 -2
  54. data/lib/active_support/core_ext/load_error.rb +30 -17
  55. data/lib/active_support/core_ext/logger.rb +1 -1
  56. data/lib/active_support/core_ext/module.rb +3 -5
  57. data/lib/active_support/core_ext/module/aliasing.rb +1 -1
  58. data/lib/active_support/core_ext/module/attr_accessor_with_default.rb +1 -1
  59. data/lib/active_support/core_ext/module/attr_internal.rb +2 -2
  60. data/lib/active_support/core_ext/module/attribute_accessors.rb +21 -25
  61. data/lib/active_support/core_ext/module/delegation.rb +10 -21
  62. data/lib/active_support/core_ext/module/inclusion.rb +30 -0
  63. data/lib/active_support/core_ext/module/introspection.rb +8 -8
  64. data/lib/active_support/core_ext/module/loading.rb +23 -0
  65. data/lib/active_support/core_ext/module/synchronization.rb +1 -2
  66. data/lib/active_support/core_ext/name_error.rb +1 -3
  67. data/lib/active_support/core_ext/nil.rb +1 -0
  68. data/lib/active_support/core_ext/nil/conversions.rb +5 -0
  69. data/lib/active_support/core_ext/object.rb +2 -6
  70. data/lib/active_support/core_ext/object/blank.rb +2 -20
  71. data/lib/active_support/core_ext/object/conversions.rb +16 -2
  72. data/lib/active_support/core_ext/object/duplicable.rb +1 -23
  73. data/lib/active_support/core_ext/object/extending.rb +77 -8
  74. data/lib/active_support/core_ext/object/instance_variables.rb +7 -0
  75. data/lib/active_support/core_ext/object/metaclass.rb +13 -0
  76. data/lib/active_support/core_ext/object/misc.rb +1 -0
  77. data/lib/active_support/core_ext/object/tap.rb +16 -0
  78. data/lib/active_support/core_ext/object/with_options.rb +0 -2
  79. data/lib/active_support/core_ext/proc.rb +4 -4
  80. data/lib/active_support/core_ext/regexp.rb +22 -0
  81. data/lib/active_support/core_ext/rexml.rb +1 -4
  82. data/lib/active_support/core_ext/string.rb +2 -3
  83. data/lib/active_support/core_ext/string/access.rb +2 -4
  84. data/lib/active_support/core_ext/string/bytesize.rb +5 -0
  85. data/lib/active_support/core_ext/string/conversions.rb +1 -36
  86. data/lib/active_support/core_ext/string/filters.rb +0 -29
  87. data/lib/active_support/core_ext/string/inflections.rb +12 -1
  88. data/lib/active_support/core_ext/string/interpolation.rb +92 -2
  89. data/lib/active_support/core_ext/string/iterators.rb +13 -0
  90. data/lib/active_support/core_ext/string/multibyte.rb +19 -16
  91. data/lib/active_support/core_ext/string/output_safety.rb +35 -101
  92. data/lib/active_support/core_ext/string/starts_ends_with.rb +14 -0
  93. data/lib/active_support/core_ext/string/xchar.rb +1 -1
  94. data/lib/active_support/core_ext/symbol.rb +1 -0
  95. data/lib/active_support/core_ext/symbol/to_proc.rb +14 -0
  96. data/lib/active_support/core_ext/time.rb +10 -0
  97. data/lib/active_support/core_ext/time/calculations.rb +7 -9
  98. data/lib/active_support/core_ext/time/conversions.rb +0 -1
  99. data/lib/active_support/core_ext/time/marshal_with_utc_flag.rb +22 -0
  100. data/lib/active_support/core_ext/uri.rb +4 -10
  101. data/lib/active_support/dependencies.rb +192 -179
  102. data/lib/active_support/deprecated_callbacks.rb +283 -0
  103. data/lib/active_support/deprecation/behaviors.rb +1 -1
  104. data/lib/active_support/deprecation/method_wrappers.rb +9 -10
  105. data/lib/active_support/deprecation/reporting.rb +1 -2
  106. data/lib/active_support/duration.rb +2 -6
  107. data/lib/active_support/hash_with_indifferent_access.rb +1 -9
  108. data/lib/active_support/inflections.rb +1 -1
  109. data/lib/active_support/inflector.rb +407 -4
  110. data/lib/active_support/json/backends/jsongem.rb +9 -12
  111. data/lib/active_support/json/decoding.rb +1 -16
  112. data/lib/active_support/json/encoding.rb +12 -42
  113. data/lib/active_support/locale/en.yml +1 -4
  114. data/lib/active_support/memoizable.rb +1 -1
  115. data/lib/active_support/message_encryptor.rb +0 -1
  116. data/lib/active_support/message_verifier.rb +5 -6
  117. data/lib/active_support/multibyte.rb +22 -7
  118. data/lib/active_support/multibyte/chars.rb +392 -164
  119. data/lib/active_support/multibyte/unicode_database.rb +71 -0
  120. data/lib/active_support/multibyte/utils.rb +7 -6
  121. data/lib/active_support/notifications.rb +113 -23
  122. data/lib/active_support/ordered_hash.rb +11 -35
  123. data/lib/active_support/ordered_options.rb +0 -6
  124. data/lib/active_support/rescuable.rb +4 -7
  125. data/lib/active_support/ruby/shim.rb +6 -4
  126. data/lib/active_support/test_case.rb +7 -2
  127. data/lib/active_support/testing/assertions.rb +0 -15
  128. data/lib/active_support/testing/declarative.rb +1 -1
  129. data/lib/active_support/testing/isolation.rb +19 -63
  130. data/lib/active_support/testing/performance.rb +337 -342
  131. data/lib/active_support/testing/setup_and_teardown.rb +29 -51
  132. data/lib/active_support/time.rb +3 -23
  133. data/lib/active_support/time_with_zone.rb +10 -5
  134. data/lib/active_support/values/time_zone.rb +84 -40
  135. data/lib/active_support/values/unicode_tables.dat +0 -0
  136. data/lib/active_support/vendor.rb +16 -0
  137. data/lib/active_support/vendor/builder-2.1.2/lib/blankslate.rb +113 -0
  138. data/lib/active_support/vendor/builder-2.1.2/lib/builder.rb +13 -0
  139. data/lib/active_support/vendor/builder-2.1.2/lib/builder/blankslate.rb +20 -0
  140. data/lib/active_support/vendor/builder-2.1.2/lib/builder/css.rb +250 -0
  141. data/lib/active_support/vendor/builder-2.1.2/lib/builder/xchar.rb +115 -0
  142. data/lib/active_support/vendor/builder-2.1.2/lib/builder/xmlbase.rb +139 -0
  143. data/lib/active_support/vendor/builder-2.1.2/lib/builder/xmlevents.rb +63 -0
  144. data/lib/active_support/vendor/builder-2.1.2/lib/builder/xmlmarkup.rb +328 -0
  145. data/lib/active_support/vendor/i18n-0.1.3/MIT-LICENSE +20 -0
  146. data/lib/active_support/vendor/i18n-0.1.3/README.textile +20 -0
  147. data/lib/active_support/vendor/i18n-0.1.3/Rakefile +5 -0
  148. data/lib/active_support/vendor/i18n-0.1.3/i18n.gemspec +27 -0
  149. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n.rb +204 -0
  150. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n/backend/simple.rb +215 -0
  151. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n/exceptions.rb +53 -0
  152. data/lib/active_support/vendor/i18n-0.1.3/test/all.rb +5 -0
  153. data/lib/active_support/vendor/i18n-0.1.3/test/i18n_exceptions_test.rb +99 -0
  154. data/lib/active_support/vendor/i18n-0.1.3/test/i18n_test.rb +124 -0
  155. data/lib/active_support/vendor/i18n-0.1.3/test/locale/en.rb +1 -0
  156. data/lib/active_support/vendor/i18n-0.1.3/test/locale/en.yml +3 -0
  157. data/lib/active_support/vendor/i18n-0.1.3/test/simple_backend_test.rb +567 -0
  158. data/lib/active_support/vendor/memcache-client-1.7.5/lib/memcache.rb +1133 -0
  159. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo.rb +33 -0
  160. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/data_timezone.rb +47 -0
  161. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/data_timezone_info.rb +228 -0
  162. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Algiers.rb +55 -0
  163. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Cairo.rb +219 -0
  164. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Casablanca.rb +42 -0
  165. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Harare.rb +18 -0
  166. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Johannesburg.rb +25 -0
  167. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Monrovia.rb +22 -0
  168. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Nairobi.rb +23 -0
  169. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +166 -0
  170. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Argentina/San_Juan.rb +86 -0
  171. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Bogota.rb +23 -0
  172. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Caracas.rb +23 -0
  173. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Chicago.rb +283 -0
  174. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Chihuahua.rb +136 -0
  175. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Denver.rb +204 -0
  176. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Godthab.rb +161 -0
  177. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Guatemala.rb +27 -0
  178. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Halifax.rb +274 -0
  179. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Indiana/Indianapolis.rb +149 -0
  180. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Juneau.rb +194 -0
  181. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/La_Paz.rb +22 -0
  182. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Lima.rb +35 -0
  183. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Los_Angeles.rb +232 -0
  184. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Mazatlan.rb +139 -0
  185. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Mexico_City.rb +144 -0
  186. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Monterrey.rb +131 -0
  187. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/New_York.rb +282 -0
  188. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Phoenix.rb +30 -0
  189. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Regina.rb +74 -0
  190. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Santiago.rb +205 -0
  191. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Sao_Paulo.rb +171 -0
  192. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/St_Johns.rb +288 -0
  193. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Tijuana.rb +196 -0
  194. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Almaty.rb +67 -0
  195. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Baghdad.rb +73 -0
  196. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Baku.rb +161 -0
  197. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Bangkok.rb +20 -0
  198. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Chongqing.rb +33 -0
  199. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Colombo.rb +30 -0
  200. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Dhaka.rb +27 -0
  201. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Hong_Kong.rb +87 -0
  202. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Irkutsk.rb +165 -0
  203. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Jakarta.rb +30 -0
  204. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Jerusalem.rb +163 -0
  205. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kabul.rb +20 -0
  206. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kamchatka.rb +163 -0
  207. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Karachi.rb +32 -0
  208. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kathmandu.rb +20 -0
  209. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kolkata.rb +25 -0
  210. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Krasnoyarsk.rb +163 -0
  211. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kuala_Lumpur.rb +31 -0
  212. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kuwait.rb +18 -0
  213. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Magadan.rb +163 -0
  214. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Muscat.rb +18 -0
  215. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Novosibirsk.rb +164 -0
  216. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Rangoon.rb +24 -0
  217. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Riyadh.rb +18 -0
  218. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Seoul.rb +34 -0
  219. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Shanghai.rb +35 -0
  220. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Singapore.rb +33 -0
  221. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Taipei.rb +59 -0
  222. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Tashkent.rb +47 -0
  223. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Tbilisi.rb +78 -0
  224. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Tehran.rb +121 -0
  225. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Tokyo.rb +30 -0
  226. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Ulaanbaatar.rb +65 -0
  227. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Urumqi.rb +33 -0
  228. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Vladivostok.rb +164 -0
  229. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Yakutsk.rb +163 -0
  230. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Yekaterinburg.rb +165 -0
  231. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Yerevan.rb +165 -0
  232. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Atlantic/Azores.rb +270 -0
  233. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Atlantic/Cape_Verde.rb +23 -0
  234. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Atlantic/South_Georgia.rb +18 -0
  235. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Adelaide.rb +187 -0
  236. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Brisbane.rb +35 -0
  237. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Darwin.rb +29 -0
  238. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Hobart.rb +193 -0
  239. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Melbourne.rb +185 -0
  240. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Perth.rb +37 -0
  241. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Sydney.rb +185 -0
  242. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Etc/UTC.rb +16 -0
  243. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Amsterdam.rb +228 -0
  244. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Athens.rb +185 -0
  245. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Belgrade.rb +163 -0
  246. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Berlin.rb +188 -0
  247. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Bratislava.rb +13 -0
  248. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Brussels.rb +232 -0
  249. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Bucharest.rb +181 -0
  250. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Budapest.rb +197 -0
  251. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Copenhagen.rb +179 -0
  252. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Dublin.rb +276 -0
  253. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Helsinki.rb +163 -0
  254. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Istanbul.rb +218 -0
  255. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Kiev.rb +168 -0
  256. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Lisbon.rb +268 -0
  257. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Ljubljana.rb +13 -0
  258. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/London.rb +288 -0
  259. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Madrid.rb +211 -0
  260. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Minsk.rb +170 -0
  261. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Moscow.rb +181 -0
  262. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Paris.rb +232 -0
  263. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Prague.rb +187 -0
  264. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Riga.rb +176 -0
  265. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Rome.rb +215 -0
  266. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Sarajevo.rb +13 -0
  267. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Skopje.rb +13 -0
  268. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Sofia.rb +173 -0
  269. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Stockholm.rb +165 -0
  270. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Tallinn.rb +172 -0
  271. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Vienna.rb +183 -0
  272. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Vilnius.rb +170 -0
  273. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Warsaw.rb +212 -0
  274. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Zagreb.rb +13 -0
  275. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Auckland.rb +202 -0
  276. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Fiji.rb +23 -0
  277. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Guam.rb +22 -0
  278. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Honolulu.rb +28 -0
  279. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Majuro.rb +20 -0
  280. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Midway.rb +25 -0
  281. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Noumea.rb +25 -0
  282. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Pago_Pago.rb +26 -0
  283. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Port_Moresby.rb +20 -0
  284. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Tongatapu.rb +27 -0
  285. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/info_timezone.rb +52 -0
  286. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/linked_timezone.rb +51 -0
  287. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/linked_timezone_info.rb +44 -0
  288. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/offset_rationals.rb +98 -0
  289. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/ruby_core_support.rb +56 -0
  290. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/time_or_datetime.rb +292 -0
  291. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone.rb +508 -0
  292. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_definition.rb +56 -0
  293. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_info.rb +40 -0
  294. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_offset_info.rb +94 -0
  295. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_period.rb +198 -0
  296. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_transition_info.rb +129 -0
  297. data/lib/active_support/version.rb +2 -3
  298. data/lib/active_support/whiny_nil.rb +7 -9
  299. data/lib/active_support/xml_mini.rb +1 -126
  300. data/lib/active_support/xml_mini/jdom.rb +0 -2
  301. data/lib/active_support/xml_mini/libxml.rb +86 -24
  302. data/lib/active_support/xml_mini/nokogiri.rb +24 -27
  303. data/lib/active_support/xml_mini/rexml.rb +1 -7
  304. metadata +191 -49
  305. data/lib/active_support/builder.rb +0 -6
  306. data/lib/active_support/core_ext/array/uniq_by.rb +0 -17
  307. data/lib/active_support/core_ext/class/attribute.rb +0 -67
  308. data/lib/active_support/core_ext/class/subclasses.rb +0 -55
  309. data/lib/active_support/core_ext/file/path.rb +0 -5
  310. data/lib/active_support/core_ext/integer/multiple.rb +0 -6
  311. data/lib/active_support/core_ext/kernel/singleton_class.rb +0 -13
  312. data/lib/active_support/core_ext/module/anonymous.rb +0 -24
  313. data/lib/active_support/core_ext/module/method_names.rb +0 -14
  314. data/lib/active_support/core_ext/module/reachable.rb +0 -10
  315. data/lib/active_support/core_ext/module/remove_method.rb +0 -6
  316. data/lib/active_support/core_ext/object/to_param.rb +0 -49
  317. data/lib/active_support/core_ext/object/to_query.rb +0 -27
  318. data/lib/active_support/core_ext/string/encoding.rb +0 -11
  319. data/lib/active_support/core_ext/string/exclude.rb +0 -6
  320. data/lib/active_support/core_ext/time/marshal.rb +0 -56
  321. data/lib/active_support/dependencies/autoload.rb +0 -50
  322. data/lib/active_support/i18n.rb +0 -8
  323. data/lib/active_support/inflector/inflections.rb +0 -211
  324. data/lib/active_support/inflector/methods.rb +0 -141
  325. data/lib/active_support/inflector/transliterate.rb +0 -97
  326. data/lib/active_support/json/backends/yajl.rb +0 -40
  327. data/lib/active_support/lazy_load_hooks.rb +0 -27
  328. data/lib/active_support/multibyte/unicode.rb +0 -393
  329. data/lib/active_support/notifications/fanout.rb +0 -93
  330. data/lib/active_support/notifications/instrumenter.rb +0 -56
  331. data/lib/active_support/railtie.rb +0 -100
  332. data/lib/active_support/xml_mini/libxmlsax.rb +0 -85
  333. data/lib/active_support/xml_mini/nokogirisax.rb +0 -83
@@ -1,7 +1,6 @@
1
1
  require 'active_support/core_ext/array/wrap'
2
2
  require 'active_support/core_ext/class/inheritable_attributes'
3
3
  require 'active_support/core_ext/kernel/reporting'
4
- require 'active_support/core_ext/kernel/singleton_class'
5
4
 
6
5
  module ActiveSupport
7
6
  # Callbacks are hooks into the lifecycle of an object that allow you to trigger logic
@@ -91,7 +90,7 @@ module ActiveSupport
91
90
  class Callback
92
91
  @@_callback_sequence = 0
93
92
 
94
- attr_accessor :chain, :filter, :kind, :options, :per_key, :klass, :raw_filter
93
+ attr_accessor :chain, :filter, :kind, :options, :per_key, :klass
95
94
 
96
95
  def initialize(chain, filter, kind, options, klass)
97
96
  @chain, @kind, @klass = chain, kind, klass
@@ -203,8 +202,8 @@ module ActiveSupport
203
202
  # end
204
203
  #
205
204
  name = "_conditional_callback_#{@kind}_#{next_id}"
206
- @klass.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
207
- def #{name}(halted)
205
+ txt, line = <<-RUBY_EVAL, __LINE__ + 1
206
+ def #{name}(halted)
208
207
  #{@compiled_options[0] || "if true"} && !halted
209
208
  #{@filter} do
210
209
  yield self
@@ -214,6 +213,7 @@ module ActiveSupport
214
213
  end
215
214
  end
216
215
  RUBY_EVAL
216
+ @klass.class_eval(txt, __FILE__, line)
217
217
  "#{name}(halted) do"
218
218
  end
219
219
  end
@@ -311,9 +311,9 @@ module ActiveSupport
311
311
 
312
312
  def _normalize_legacy_filter(kind, filter)
313
313
  if !filter.respond_to?(kind) && filter.respond_to?(:filter)
314
- filter.singleton_class.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
315
- def #{kind}(context, &block) filter(context, &block) end
316
- RUBY_EVAL
314
+ filter.metaclass.class_eval(
315
+ "def #{kind}(context, &block) filter(context, &block) end",
316
+ __FILE__, __LINE__ - 1)
317
317
  elsif filter.respond_to?(:before) && filter.respond_to?(:after) && kind == :around
318
318
  def filter.around(context)
319
319
  should_continue = before(context)
@@ -367,6 +367,12 @@ module ActiveSupport
367
367
  method << "halted ? false : (block_given? ? value : true)"
368
368
  method.compact.join("\n")
369
369
  end
370
+
371
+ def clone(klass)
372
+ chain = CallbackChain.new(@name, @config.dup)
373
+ callbacks = map { |c| c.clone(chain, klass) }
374
+ chain.push(*callbacks)
375
+ end
370
376
  end
371
377
 
372
378
  module ClassMethods
@@ -383,35 +389,28 @@ module ActiveSupport
383
389
  # key. See #define_callbacks for more information.
384
390
  #
385
391
  def __define_runner(symbol) #:nodoc:
386
- send("_update_#{symbol}_superclass_callbacks")
387
392
  body = send("_#{symbol}_callbacks").compile(nil)
388
393
 
389
- silence_warnings do
390
- undef_method "_run_#{symbol}_callbacks" if method_defined?("_run_#{symbol}_callbacks")
391
- class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
392
- def _run_#{symbol}_callbacks(key = nil, &blk)
393
- @_initialized_#{symbol}_callbacks ||= begin
394
- if self.class.send("_update_#{symbol}_superclass_callbacks")
395
- self.class.__define_runner(#{symbol.inspect})
396
- return _run_#{symbol}_callbacks(key, &blk)
397
- end
398
- true
399
- end
400
-
401
- if key
402
- name = "_run__\#{self.class.name.hash.abs}__#{symbol}__\#{key.hash.abs}__callbacks"
394
+ body, line = <<-RUBY_EVAL, __LINE__
395
+ def _run_#{symbol}_callbacks(key = nil, &blk)
396
+ if key
397
+ name = "_run__\#{self.class.name.hash.abs}__#{symbol}__\#{key.hash.abs}__callbacks"
403
398
 
404
- unless respond_to?(name)
405
- self.class.__create_keyed_callback(name, :#{symbol}, self, &blk)
406
- end
407
-
408
- send(name, &blk)
409
- else
410
- #{body}
399
+ unless respond_to?(name)
400
+ self.class.__create_keyed_callback(name, :#{symbol}, self, &blk)
411
401
  end
402
+
403
+ send(name, &blk)
404
+ else
405
+ #{body}
412
406
  end
413
- private :_run_#{symbol}_callbacks
414
- RUBY_EVAL
407
+ end
408
+ private :_run_#{symbol}_callbacks
409
+ RUBY_EVAL
410
+
411
+ silence_warnings do
412
+ undef_method "_run_#{symbol}_callbacks" if method_defined?("_run_#{symbol}_callbacks")
413
+ class_eval body, __FILE__, line
415
414
  end
416
415
  end
417
416
 
@@ -432,8 +431,6 @@ module ActiveSupport
432
431
  # CallbackChain.
433
432
  #
434
433
  def __update_callbacks(name, filters = [], block = nil) #:nodoc:
435
- send("_update_#{name}_superclass_callbacks")
436
-
437
434
  type = [:before, :after, :around].include?(filters.first) ? filters.shift : :before
438
435
  options = filters.last.is_a?(Hash) ? filters.pop : {}
439
436
  filters.unshift(block) if block
@@ -470,11 +467,10 @@ module ActiveSupport
470
467
  # method that took into consideration the per_key conditions. This
471
468
  # is a speed improvement for ActionPack.
472
469
  #
473
- def set_callback(name, *filter_list, &block)
474
- __update_callbacks(name, filter_list, block) do |chain, type, filters, options|
470
+ def set_callback(name, *filters, &block)
471
+ __update_callbacks(name, filters, block) do |chain, type, filters, options|
475
472
  filters.map! do |filter|
476
- removed = chain.delete_if {|c| c.matches?(type, filter) }
477
- send("_removed_#{name}_callbacks").push(*removed)
473
+ chain.delete_if {|c| c.matches?(type, filter) }
478
474
  Callback.new(chain, filter, type, options.dup, self)
479
475
  end
480
476
 
@@ -484,19 +480,18 @@ module ActiveSupport
484
480
 
485
481
  # Skip a previously defined callback for a given type.
486
482
  #
487
- def skip_callback(name, *filter_list, &block)
488
- __update_callbacks(name, filter_list, block) do |chain, type, filters, options|
483
+ def skip_callback(name, *filters, &block)
484
+ __update_callbacks(name, filters, block) do |chain, type, filters, options|
485
+ chain = send("_#{name}_callbacks=", chain.clone(self))
486
+
489
487
  filters.each do |filter|
490
488
  filter = chain.find {|c| c.matches?(type, filter) }
491
489
 
492
490
  if filter && options.any?
493
- new_filter = filter.clone(chain, self)
494
- chain.insert(chain.index(filter), new_filter)
495
- new_filter.recompile!(options, options[:per_key] || {})
491
+ filter.recompile!(options, options[:per_key] || {})
492
+ else
493
+ chain.delete(filter)
496
494
  end
497
-
498
- chain.delete(filter)
499
- send("_removed_#{name}_callbacks") << filter
500
495
  end
501
496
  end
502
497
  end
@@ -504,9 +499,7 @@ module ActiveSupport
504
499
  # Reset callbacks for a given type.
505
500
  #
506
501
  def reset_callbacks(symbol)
507
- callbacks = send("_#{symbol}_callbacks")
508
- callbacks.clear
509
- send("_removed_#{symbol}_callbacks").concat(callbacks)
502
+ send("_#{symbol}_callbacks").clear
510
503
  __define_runner(symbol)
511
504
  end
512
505
 
@@ -531,7 +524,7 @@ module ActiveSupport
531
524
  # to change this behavior.
532
525
  #
533
526
  # * <tt>:scope</tt> - Show which methods should be executed when a class
534
- # is given as callback:
527
+ # is giben as callback:
535
528
  #
536
529
  # define_callbacks :filters, :scope => [ :kind ]
537
530
  #
@@ -553,46 +546,14 @@ module ActiveSupport
553
546
  #
554
547
  # Defaults to :kind.
555
548
  #
556
- def define_callbacks(*callbacks)
557
- config = callbacks.last.is_a?(Hash) ? callbacks.pop : {}
558
- callbacks.each do |callback|
559
- extlib_inheritable_reader("_#{callback}_callbacks") do
560
- CallbackChain.new(callback, config)
549
+ def define_callbacks(*symbols)
550
+ config = symbols.last.is_a?(Hash) ? symbols.pop : {}
551
+ symbols.each do |symbol|
552
+ extlib_inheritable_accessor("_#{symbol}_callbacks") do
553
+ CallbackChain.new(symbol, config)
561
554
  end
562
555
 
563
- extlib_inheritable_reader("_removed_#{callback}_callbacks") do
564
- []
565
- end
566
-
567
- class_eval <<-METHOD, __FILE__, __LINE__ + 1
568
- def self._#{callback}_superclass_callbacks
569
- if superclass.respond_to?(:_#{callback}_callbacks)
570
- superclass._#{callback}_callbacks + superclass._#{callback}_superclass_callbacks
571
- else
572
- []
573
- end
574
- end
575
-
576
- def self._update_#{callback}_superclass_callbacks
577
- changed, index = false, 0
578
-
579
- callbacks = (_#{callback}_superclass_callbacks -
580
- _#{callback}_callbacks) - _removed_#{callback}_callbacks
581
-
582
- callbacks.each do |callback|
583
- if new_index = _#{callback}_callbacks.index(callback)
584
- index = new_index + 1
585
- else
586
- changed = true
587
- _#{callback}_callbacks.insert(index, callback)
588
- index = index + 1
589
- end
590
- end
591
- changed
592
- end
593
- METHOD
594
-
595
- __define_runner(callback)
556
+ __define_runner(symbol)
596
557
  end
597
558
  end
598
559
  end
@@ -1,36 +1,35 @@
1
- require 'active_support/concern'
2
- require 'active_support/ordered_options'
3
- require 'active_support/core_ext/kernel/singleton_class'
4
- require 'active_support/core_ext/module/delegation'
1
+ require "active_support/concern"
5
2
 
6
3
  module ActiveSupport
7
4
  module Configurable
8
5
  extend ActiveSupport::Concern
9
6
 
10
7
  module ClassMethods
11
- def config
12
- @config ||= ActiveSupport::InheritableOptions.new(superclass.respond_to?(:config) ? superclass.config : {})
8
+ def get_config
9
+ module_parts = name.split("::")
10
+ modules = [Object]
11
+ module_parts.each {|name| modules.push modules.last.const_get(name) }
12
+ modules.reverse_each do |mod|
13
+ return mod.const_get(:DEFAULT_CONFIG) if const_defined?(:DEFAULT_CONFIG)
14
+ end
15
+ {}
13
16
  end
14
-
15
- def configure
16
- yield config
17
+
18
+ def config
19
+ self.config = get_config unless @config
20
+ @config
17
21
  end
18
22
 
19
- def config_accessor(*names)
20
- names.each do |name|
21
- code, line = <<-RUBY, __LINE__ + 1
22
- def #{name}; config.#{name}; end
23
- def #{name}=(value); config.#{name} = value; end
24
- RUBY
25
-
26
- singleton_class.class_eval code, __FILE__, line
27
- class_eval code, __FILE__, line
23
+ def config=(hash)
24
+ @config = ActiveSupport::OrderedOptions.new
25
+ hash.each do |key, value|
26
+ @config[key] = value
28
27
  end
29
28
  end
30
29
  end
31
30
 
32
31
  def config
33
- @config ||= ActiveSupport::InheritableOptions.new(self.class.config)
32
+ self.class.config
34
33
  end
35
34
  end
36
35
  end
@@ -1,6 +1,5 @@
1
1
  require 'active_support/core_ext/array/wrap'
2
2
  require 'active_support/core_ext/array/access'
3
- require 'active_support/core_ext/array/uniq_by'
4
3
  require 'active_support/core_ext/array/conversions'
5
4
  require 'active_support/core_ext/array/extract_options'
6
5
  require 'active_support/core_ext/array/grouping'
@@ -4,7 +4,7 @@ class Array
4
4
  # %w( a b c d ).from(0) # => %w( a b c d )
5
5
  # %w( a b c d ).from(2) # => %w( c d )
6
6
  # %w( a b c d ).from(10) # => nil
7
- # %w().from(0) # => %w()
7
+ # %w().from(0) # => nil
8
8
  def from(position)
9
9
  self[position..-1]
10
10
  end
@@ -1,7 +1,6 @@
1
- require 'active_support/xml_mini'
2
1
  require 'active_support/core_ext/hash/keys'
3
2
  require 'active_support/core_ext/hash/reverse_merge'
4
- require 'active_support/core_ext/string/inflections'
3
+ require 'active_support/inflector'
5
4
 
6
5
  class Array
7
6
  # Converts the array to a comma-separated sentence where the last element is joined by the connector word. Options:
@@ -9,14 +8,21 @@ class Array
9
8
  # * <tt>:two_words_connector</tt> - The sign or word used to join the elements in arrays with two elements (default: " and ")
10
9
  # * <tt>:last_word_connector</tt> - The sign or word used to join the last element in arrays with three or more elements (default: ", and ")
11
10
  def to_sentence(options = {})
12
- if defined?(I18n)
13
- default_words_connector = I18n.translate(:'support.array.words_connector', :locale => options[:locale])
14
- default_two_words_connector = I18n.translate(:'support.array.two_words_connector', :locale => options[:locale])
15
- default_last_word_connector = I18n.translate(:'support.array.last_word_connector', :locale => options[:locale])
16
- else
17
- default_words_connector = ", "
18
- default_two_words_connector = " and "
19
- default_last_word_connector = ", and "
11
+ default_words_connector = I18n.translate(:'support.array.words_connector', :locale => options[:locale])
12
+ default_two_words_connector = I18n.translate(:'support.array.two_words_connector', :locale => options[:locale])
13
+ default_last_word_connector = I18n.translate(:'support.array.last_word_connector', :locale => options[:locale])
14
+
15
+ # Try to emulate to_sentences previous to 2.3
16
+ if options.has_key?(:connector) || options.has_key?(:skip_last_comma)
17
+ ::ActiveSupport::Deprecation.warn(":connector has been deprecated. Use :words_connector instead", caller) if options.has_key? :connector
18
+ ::ActiveSupport::Deprecation.warn(":skip_last_comma has been deprecated. Use :last_word_connector instead", caller) if options.has_key? :skip_last_comma
19
+
20
+ skip_last_comma = options.delete :skip_last_comma
21
+ if connector = options.delete(:connector)
22
+ options[:last_word_connector] ||= skip_last_comma ? connector : ", #{connector}"
23
+ else
24
+ options[:last_word_connector] ||= skip_last_comma ? default_two_words_connector : default_last_word_connector
25
+ end
20
26
  end
21
27
 
22
28
  options.assert_valid_keys(:words_connector, :two_words_connector, :last_word_connector, :locale)
@@ -34,6 +40,22 @@ class Array
34
40
  end
35
41
  end
36
42
 
43
+
44
+ # Calls <tt>to_param</tt> on all its elements and joins the result with
45
+ # slashes. This is used by <tt>url_for</tt> in Action Pack.
46
+ def to_param
47
+ collect { |e| e.to_param }.join '/'
48
+ end
49
+
50
+ # Converts an array into a string suitable for use as a URL query string,
51
+ # using the given +key+ as the param name.
52
+ #
53
+ # ['Rails', 'coding'].to_query('hobbies') # => "hobbies%5B%5D=Rails&hobbies%5B%5D=coding"
54
+ def to_query(key)
55
+ prefix = "#{key}[]"
56
+ collect { |value| value.to_query(prefix) }.join '&'
57
+ end
58
+
37
59
  # Converts a collection of elements into a formatted string by calling
38
60
  # <tt>to_s</tt> on all elements and joining them:
39
61
  #
@@ -134,31 +156,34 @@ class Array
134
156
  # </messages>
135
157
  #
136
158
  def to_xml(options = {})
137
- require 'active_support/builder' unless defined?(Builder)
159
+ raise "Not all elements respond to to_xml" unless all? { |e| e.respond_to? :to_xml }
160
+ require 'builder' unless defined?(Builder)
138
161
 
139
162
  options = options.dup
140
- options[:indent] ||= 2
141
- options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
142
- options[:root] ||= if first.class.to_s != "Hash" && all? { |e| e.is_a?(first.class) }
143
- underscored = ActiveSupport::Inflector.underscore(first.class.name)
144
- ActiveSupport::Inflector.pluralize(underscored).tr('/', '_')
145
- else
146
- "objects"
147
- end
163
+ options[:root] ||= all? { |e| e.is_a?(first.class) && first.class.to_s != "Hash" } ? ActiveSupport::Inflector.pluralize(ActiveSupport::Inflector.underscore(first.class.name)) : "records"
164
+ options[:children] ||= options[:root].singularize
165
+ options[:indent] ||= 2
166
+ options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
148
167
 
149
- builder = options[:builder]
150
- builder.instruct! unless options.delete(:skip_instruct)
168
+ root = options.delete(:root).to_s
169
+ children = options.delete(:children)
151
170
 
152
- root = ActiveSupport::XmlMini.rename_key(options[:root].to_s, options)
153
- children = options.delete(:children) || root.singularize
171
+ if !options.has_key?(:dasherize) || options[:dasherize]
172
+ root = root.dasherize
173
+ end
174
+
175
+ options[:builder].instruct! unless options.delete(:skip_instruct)
154
176
 
155
- attributes = options[:skip_types] ? {} : {:type => "array"}
156
- return builder.tag!(root, attributes) if empty?
177
+ opts = options.merge({ :root => children })
157
178
 
158
- builder.__send__(:method_missing, root, attributes) do
159
- each { |value| ActiveSupport::XmlMini.to_tag(children, value, options) }
160
- yield builder if block_given?
179
+ xml = options[:builder]
180
+ if empty?
181
+ xml.tag!(root, options[:skip_types] ? {} : {:type => "array"})
182
+ else
183
+ xml.tag!(root, options[:skip_types] ? {} : {:type => "array"}) {
184
+ yield xml if block_given?
185
+ each { |e| e.to_xml(opts.merge({ :skip_instruct => true })) }
186
+ }
161
187
  end
162
188
  end
163
-
164
189
  end
@@ -1,14 +1,3 @@
1
- class Hash
2
- # By default, only instances of Hash itself are extractable.
3
- # Subclasses of Hash may implement this method and return
4
- # true to declare themselves as extractable. If a Hash
5
- # is extractable, Array#extract_options! pops it from
6
- # the Array when it is the last element of the Array.
7
- def extractable_options?
8
- instance_of?(Hash)
9
- end
10
- end
11
-
12
1
  class Array
13
2
  # Extracts options from a set of arguments. Removes and returns the last
14
3
  # element in the array if it's a hash, otherwise returns a blank hash.
@@ -20,10 +9,6 @@ class Array
20
9
  # options(1, 2) # => {}
21
10
  # options(1, 2, :a => :b) # => {:a=>:b}
22
11
  def extract_options!
23
- if last.is_a?(Hash) && last.extractable_options?
24
- pop
25
- else
26
- {}
27
- end
12
+ last.is_a?(::Hash) ? pop : {}
28
13
  end
29
14
  end
@@ -1,20 +1,6 @@
1
1
  class Array
2
- # Backport of Array#sample based on Marc-Andre Lafortune's http://github.com/marcandre/backports/
3
- def sample(n=nil)
4
- return self[Kernel.rand(size)] if n.nil?
5
- n = n.to_int
6
- rescue Exception => e
7
- raise TypeError, "Coercion error: #{n.inspect}.to_int => Integer failed:\n(#{e.message})"
8
- else
9
- raise TypeError, "Coercion error: obj.to_int did NOT return an Integer (was #{n.class})" unless n.kind_of? Integer
10
- raise ArgumentError, "negative array size" if n < 0
11
- n = size if n > size
12
- result = Array.new(self)
13
- n.times do |i|
14
- r = i + Kernel.rand(size - i)
15
- result[i], result[r] = result[r], result[i]
16
- end
17
- result[n..size] = []
18
- result
19
- end unless method_defined? :sample
20
- end
2
+ # Returns a random element from the array.
3
+ def rand
4
+ self[Kernel.rand(length)]
5
+ end
6
+ end