activesupport 3.0.pre → 3.0.0.rc

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (351) hide show
  1. data/CHANGELOG +121 -1
  2. data/README.rdoc +33 -0
  3. data/lib/active_support.rb +42 -4
  4. data/lib/active_support/backtrace_cleaner.rb +31 -9
  5. data/lib/active_support/benchmarkable.rb +1 -0
  6. data/lib/active_support/buffered_logger.rb +5 -2
  7. data/lib/active_support/builder.rb +6 -0
  8. data/lib/active_support/cache.rb +454 -84
  9. data/lib/active_support/cache/compressed_mem_cache_store.rb +6 -13
  10. data/lib/active_support/cache/file_store.rb +140 -41
  11. data/lib/active_support/cache/mem_cache_store.rb +121 -76
  12. data/lib/active_support/cache/memory_store.rb +127 -27
  13. data/lib/active_support/cache/strategy/local_cache.rb +111 -58
  14. data/lib/active_support/cache/synchronized_memory_store.rb +2 -38
  15. data/lib/active_support/callbacks.rb +105 -76
  16. data/lib/active_support/configurable.rb +19 -18
  17. data/lib/active_support/core_ext/array.rb +1 -0
  18. data/lib/active_support/core_ext/array/access.rb +1 -1
  19. data/lib/active_support/core_ext/array/conversions.rb +29 -54
  20. data/lib/active_support/core_ext/array/extract_options.rb +16 -1
  21. data/lib/active_support/core_ext/array/grouping.rb +1 -1
  22. data/lib/active_support/core_ext/array/random_access.rb +26 -5
  23. data/lib/active_support/core_ext/array/uniq_by.rb +17 -0
  24. data/lib/active_support/core_ext/array/wrap.rb +13 -9
  25. data/lib/active_support/core_ext/benchmark.rb +0 -12
  26. data/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +2 -0
  27. data/lib/active_support/core_ext/class.rb +2 -1
  28. data/lib/active_support/core_ext/class/attribute.rb +67 -0
  29. data/lib/active_support/core_ext/class/attribute_accessors.rb +33 -27
  30. data/lib/active_support/core_ext/class/delegating_attributes.rb +35 -41
  31. data/lib/active_support/core_ext/class/inheritable_attributes.rb +23 -14
  32. data/lib/active_support/core_ext/class/subclasses.rb +50 -0
  33. data/lib/active_support/core_ext/date/calculations.rb +35 -12
  34. data/lib/active_support/core_ext/date/conversions.rb +5 -5
  35. data/lib/active_support/core_ext/date/zones.rb +14 -0
  36. data/lib/active_support/core_ext/date_time/calculations.rb +3 -1
  37. data/lib/active_support/core_ext/date_time/conversions.rb +24 -5
  38. data/lib/active_support/core_ext/date_time/zones.rb +4 -0
  39. data/lib/active_support/core_ext/enumerable.rb +5 -9
  40. data/lib/active_support/core_ext/exception.rb +0 -47
  41. data/lib/active_support/core_ext/file.rb +1 -0
  42. data/lib/active_support/core_ext/file/atomic.rb +3 -2
  43. data/lib/active_support/core_ext/file/path.rb +5 -0
  44. data/lib/active_support/core_ext/float/rounding.rb +3 -2
  45. data/lib/active_support/core_ext/hash/conversions.rb +65 -145
  46. data/lib/active_support/core_ext/hash/deep_merge.rb +6 -7
  47. data/lib/active_support/core_ext/hash/except.rb +8 -1
  48. data/lib/active_support/core_ext/hash/indifferent_access.rb +5 -0
  49. data/lib/active_support/core_ext/hash/keys.rb +10 -11
  50. data/lib/active_support/core_ext/hash/slice.rb +6 -0
  51. data/lib/active_support/core_ext/integer.rb +1 -1
  52. data/lib/active_support/core_ext/integer/multiple.rb +6 -0
  53. data/lib/active_support/core_ext/kernel.rb +1 -1
  54. data/lib/active_support/core_ext/kernel/debugger.rb +3 -2
  55. data/lib/active_support/core_ext/kernel/reporting.rb +2 -1
  56. data/lib/active_support/core_ext/kernel/requires.rb +2 -2
  57. data/lib/active_support/core_ext/kernel/singleton_class.rb +13 -0
  58. data/lib/active_support/core_ext/load_error.rb +17 -30
  59. data/lib/active_support/core_ext/logger.rb +2 -40
  60. data/lib/active_support/core_ext/module.rb +5 -3
  61. data/lib/active_support/core_ext/module/aliasing.rb +1 -1
  62. data/lib/active_support/core_ext/module/anonymous.rb +24 -0
  63. data/lib/active_support/core_ext/module/attr_accessor_with_default.rb +1 -1
  64. data/lib/active_support/core_ext/module/attr_internal.rb +2 -2
  65. data/lib/active_support/core_ext/module/attribute_accessors.rb +20 -22
  66. data/lib/active_support/core_ext/module/delegation.rb +21 -10
  67. data/lib/active_support/core_ext/module/introspection.rb +8 -8
  68. data/lib/active_support/core_ext/module/method_names.rb +14 -0
  69. data/lib/active_support/core_ext/module/reachable.rb +10 -0
  70. data/lib/active_support/core_ext/module/remove_method.rb +11 -0
  71. data/lib/active_support/core_ext/module/synchronization.rb +2 -1
  72. data/lib/active_support/core_ext/name_error.rb +3 -1
  73. data/lib/active_support/core_ext/object.rb +5 -3
  74. data/lib/active_support/core_ext/object/blank.rb +20 -2
  75. data/lib/active_support/core_ext/object/conversions.rb +2 -16
  76. data/lib/active_support/core_ext/object/duplicable.rb +23 -1
  77. data/lib/active_support/core_ext/object/instance_variables.rb +0 -7
  78. data/lib/active_support/core_ext/object/to_json.rb +19 -0
  79. data/lib/active_support/core_ext/object/to_param.rb +49 -0
  80. data/lib/active_support/core_ext/object/to_query.rb +27 -0
  81. data/lib/active_support/core_ext/object/with_options.rb +2 -0
  82. data/lib/active_support/core_ext/proc.rb +4 -4
  83. data/lib/active_support/core_ext/range/overlaps.rb +1 -1
  84. data/lib/active_support/core_ext/regexp.rb +0 -22
  85. data/lib/active_support/core_ext/rexml.rb +4 -1
  86. data/lib/active_support/core_ext/string.rb +3 -2
  87. data/lib/active_support/core_ext/string/access.rb +4 -2
  88. data/lib/active_support/core_ext/string/conversions.rb +28 -1
  89. data/lib/active_support/core_ext/string/encoding.rb +11 -0
  90. data/lib/active_support/core_ext/string/exclude.rb +6 -0
  91. data/lib/active_support/core_ext/string/filters.rb +29 -0
  92. data/lib/active_support/core_ext/string/inflections.rb +12 -12
  93. data/lib/active_support/core_ext/string/interpolation.rb +2 -92
  94. data/lib/active_support/core_ext/string/multibyte.rb +16 -19
  95. data/lib/active_support/core_ext/string/output_safety.rb +101 -35
  96. data/lib/active_support/core_ext/string/starts_ends_with.rb +0 -14
  97. data/lib/active_support/core_ext/string/xchar.rb +1 -1
  98. data/lib/active_support/core_ext/time/calculations.rb +14 -7
  99. data/lib/active_support/core_ext/time/conversions.rb +1 -0
  100. data/lib/active_support/core_ext/time/marshal.rb +56 -0
  101. data/lib/active_support/core_ext/time/zones.rb +2 -5
  102. data/lib/active_support/core_ext/uri.rb +10 -4
  103. data/lib/active_support/dependencies.rb +200 -197
  104. data/lib/active_support/dependencies/autoload.rb +50 -0
  105. data/lib/active_support/deprecation/behaviors.rb +13 -9
  106. data/lib/active_support/deprecation/method_wrappers.rb +10 -9
  107. data/lib/active_support/deprecation/proxy_wrappers.rb +7 -0
  108. data/lib/active_support/deprecation/reporting.rb +5 -3
  109. data/lib/active_support/descendants_tracker.rb +43 -0
  110. data/lib/active_support/duration.rb +8 -4
  111. data/lib/active_support/file_update_checker.rb +36 -0
  112. data/lib/active_support/hash_with_indifferent_access.rb +9 -1
  113. data/lib/active_support/i18n.rb +9 -0
  114. data/lib/active_support/i18n_railtie.rb +81 -0
  115. data/lib/active_support/inflections.rb +1 -1
  116. data/lib/active_support/inflector.rb +4 -407
  117. data/lib/active_support/inflector/inflections.rb +211 -0
  118. data/lib/active_support/inflector/methods.rb +151 -0
  119. data/lib/active_support/inflector/transliterate.rb +97 -0
  120. data/lib/active_support/json/backends/jsongem.rb +12 -9
  121. data/lib/active_support/json/backends/yajl.rb +40 -0
  122. data/lib/active_support/json/backends/yaml.rb +1 -1
  123. data/lib/active_support/json/decoding.rb +17 -2
  124. data/lib/active_support/json/encoding.rb +48 -31
  125. data/lib/active_support/json/variable.rb +2 -4
  126. data/lib/active_support/lazy_load_hooks.rb +27 -0
  127. data/lib/active_support/locale/en.yml +5 -2
  128. data/lib/active_support/log_subscriber.rb +123 -0
  129. data/lib/active_support/log_subscriber/test_helper.rb +99 -0
  130. data/lib/active_support/memoizable.rb +1 -1
  131. data/lib/active_support/message_encryptor.rb +1 -0
  132. data/lib/active_support/message_verifier.rb +2 -1
  133. data/lib/active_support/multibyte.rb +8 -23
  134. data/lib/active_support/multibyte/chars.rb +213 -446
  135. data/lib/active_support/multibyte/unicode.rb +392 -0
  136. data/lib/active_support/multibyte/utils.rb +6 -7
  137. data/lib/active_support/notifications.rb +29 -122
  138. data/lib/active_support/notifications/fanout.rb +61 -0
  139. data/lib/active_support/notifications/instrumenter.rb +54 -0
  140. data/lib/active_support/ordered_hash.rb +59 -14
  141. data/lib/active_support/ordered_options.rb +6 -0
  142. data/lib/active_support/railtie.rb +60 -0
  143. data/lib/active_support/rescuable.rb +7 -4
  144. data/lib/active_support/ruby/shim.rb +4 -6
  145. data/lib/active_support/test_case.rb +2 -7
  146. data/lib/active_support/testing/assertions.rb +15 -0
  147. data/lib/active_support/testing/declarative.rb +1 -1
  148. data/lib/active_support/testing/isolation.rb +64 -17
  149. data/lib/active_support/testing/performance.rb +306 -335
  150. data/lib/active_support/testing/setup_and_teardown.rb +51 -29
  151. data/lib/active_support/time.rb +24 -3
  152. data/lib/active_support/time_with_zone.rb +10 -14
  153. data/lib/active_support/values/time_zone.rb +192 -234
  154. data/lib/active_support/values/unicode_tables.dat +0 -0
  155. data/lib/active_support/version.rb +3 -2
  156. data/lib/active_support/whiny_nil.rb +9 -7
  157. data/lib/active_support/xml_mini.rb +130 -1
  158. data/lib/active_support/xml_mini/jdom.rb +2 -0
  159. data/lib/active_support/xml_mini/libxml.rb +23 -86
  160. data/lib/active_support/xml_mini/libxmlsax.rb +85 -0
  161. data/lib/active_support/xml_mini/nokogiri.rb +27 -24
  162. data/lib/active_support/xml_mini/nokogirisax.rb +83 -0
  163. data/lib/active_support/xml_mini/rexml.rb +8 -2
  164. metadata +62 -195
  165. data/README +0 -43
  166. data/lib/active_support/autoload.rb +0 -28
  167. data/lib/active_support/core_ext/boolean.rb +0 -1
  168. data/lib/active_support/core_ext/boolean/conversions.rb +0 -11
  169. data/lib/active_support/core_ext/class/removal.rb +0 -53
  170. data/lib/active_support/core_ext/date.rb +0 -7
  171. data/lib/active_support/core_ext/date_time.rb +0 -5
  172. data/lib/active_support/core_ext/integer/even_odd.rb +0 -16
  173. data/lib/active_support/core_ext/kernel/daemonizing.rb +0 -7
  174. data/lib/active_support/core_ext/module/inclusion.rb +0 -30
  175. data/lib/active_support/core_ext/module/loading.rb +0 -23
  176. data/lib/active_support/core_ext/nil.rb +0 -1
  177. data/lib/active_support/core_ext/nil/conversions.rb +0 -5
  178. data/lib/active_support/core_ext/object/extending.rb +0 -80
  179. data/lib/active_support/core_ext/object/metaclass.rb +0 -13
  180. data/lib/active_support/core_ext/object/misc.rb +0 -3
  181. data/lib/active_support/core_ext/object/returning.rb +0 -42
  182. data/lib/active_support/core_ext/object/tap.rb +0 -16
  183. data/lib/active_support/core_ext/string/bytesize.rb +0 -5
  184. data/lib/active_support/core_ext/string/iterators.rb +0 -13
  185. data/lib/active_support/core_ext/symbol.rb +0 -1
  186. data/lib/active_support/core_ext/symbol/to_proc.rb +0 -14
  187. data/lib/active_support/core_ext/time.rb +0 -10
  188. data/lib/active_support/core_ext/time/marshal_with_utc_flag.rb +0 -22
  189. data/lib/active_support/deprecated_callbacks.rb +0 -283
  190. data/lib/active_support/multibyte/unicode_database.rb +0 -71
  191. data/lib/active_support/vendor.rb +0 -16
  192. data/lib/active_support/vendor/builder-2.1.2/lib/blankslate.rb +0 -113
  193. data/lib/active_support/vendor/builder-2.1.2/lib/builder.rb +0 -13
  194. data/lib/active_support/vendor/builder-2.1.2/lib/builder/blankslate.rb +0 -20
  195. data/lib/active_support/vendor/builder-2.1.2/lib/builder/css.rb +0 -250
  196. data/lib/active_support/vendor/builder-2.1.2/lib/builder/xchar.rb +0 -115
  197. data/lib/active_support/vendor/builder-2.1.2/lib/builder/xmlbase.rb +0 -139
  198. data/lib/active_support/vendor/builder-2.1.2/lib/builder/xmlevents.rb +0 -63
  199. data/lib/active_support/vendor/builder-2.1.2/lib/builder/xmlmarkup.rb +0 -328
  200. data/lib/active_support/vendor/i18n-0.1.3/MIT-LICENSE +0 -20
  201. data/lib/active_support/vendor/i18n-0.1.3/README.textile +0 -20
  202. data/lib/active_support/vendor/i18n-0.1.3/Rakefile +0 -5
  203. data/lib/active_support/vendor/i18n-0.1.3/i18n.gemspec +0 -27
  204. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n.rb +0 -204
  205. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n/backend/simple.rb +0 -215
  206. data/lib/active_support/vendor/i18n-0.1.3/lib/i18n/exceptions.rb +0 -53
  207. data/lib/active_support/vendor/i18n-0.1.3/test/all.rb +0 -5
  208. data/lib/active_support/vendor/i18n-0.1.3/test/i18n_exceptions_test.rb +0 -99
  209. data/lib/active_support/vendor/i18n-0.1.3/test/i18n_test.rb +0 -124
  210. data/lib/active_support/vendor/i18n-0.1.3/test/locale/en.rb +0 -1
  211. data/lib/active_support/vendor/i18n-0.1.3/test/locale/en.yml +0 -3
  212. data/lib/active_support/vendor/i18n-0.1.3/test/simple_backend_test.rb +0 -567
  213. data/lib/active_support/vendor/memcache-client-1.7.5/lib/memcache.rb +0 -1133
  214. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo.rb +0 -33
  215. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/data_timezone.rb +0 -47
  216. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/data_timezone_info.rb +0 -228
  217. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Algiers.rb +0 -55
  218. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Cairo.rb +0 -219
  219. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Casablanca.rb +0 -42
  220. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Harare.rb +0 -18
  221. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Johannesburg.rb +0 -25
  222. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Monrovia.rb +0 -22
  223. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Africa/Nairobi.rb +0 -23
  224. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +0 -166
  225. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Argentina/San_Juan.rb +0 -86
  226. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Bogota.rb +0 -23
  227. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Caracas.rb +0 -23
  228. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Chicago.rb +0 -283
  229. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Chihuahua.rb +0 -136
  230. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Denver.rb +0 -204
  231. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Godthab.rb +0 -161
  232. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Guatemala.rb +0 -27
  233. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Halifax.rb +0 -274
  234. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Indiana/Indianapolis.rb +0 -149
  235. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Juneau.rb +0 -194
  236. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/La_Paz.rb +0 -22
  237. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Lima.rb +0 -35
  238. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Los_Angeles.rb +0 -232
  239. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Mazatlan.rb +0 -139
  240. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Mexico_City.rb +0 -144
  241. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Monterrey.rb +0 -131
  242. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/New_York.rb +0 -282
  243. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Phoenix.rb +0 -30
  244. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Regina.rb +0 -74
  245. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Santiago.rb +0 -205
  246. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Sao_Paulo.rb +0 -171
  247. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/St_Johns.rb +0 -288
  248. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/America/Tijuana.rb +0 -196
  249. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Almaty.rb +0 -67
  250. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Baghdad.rb +0 -73
  251. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Baku.rb +0 -161
  252. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Bangkok.rb +0 -20
  253. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Chongqing.rb +0 -33
  254. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Colombo.rb +0 -30
  255. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Dhaka.rb +0 -27
  256. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Hong_Kong.rb +0 -87
  257. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Irkutsk.rb +0 -165
  258. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Jakarta.rb +0 -30
  259. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Jerusalem.rb +0 -163
  260. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kabul.rb +0 -20
  261. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kamchatka.rb +0 -163
  262. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Karachi.rb +0 -32
  263. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kathmandu.rb +0 -20
  264. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kolkata.rb +0 -25
  265. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Krasnoyarsk.rb +0 -163
  266. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kuala_Lumpur.rb +0 -31
  267. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Kuwait.rb +0 -18
  268. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Magadan.rb +0 -163
  269. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Muscat.rb +0 -18
  270. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Novosibirsk.rb +0 -164
  271. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Rangoon.rb +0 -24
  272. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Riyadh.rb +0 -18
  273. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Seoul.rb +0 -34
  274. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Shanghai.rb +0 -35
  275. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Singapore.rb +0 -33
  276. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Taipei.rb +0 -59
  277. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Tashkent.rb +0 -47
  278. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Tbilisi.rb +0 -78
  279. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Tehran.rb +0 -121
  280. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Tokyo.rb +0 -30
  281. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Ulaanbaatar.rb +0 -65
  282. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Urumqi.rb +0 -33
  283. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Vladivostok.rb +0 -164
  284. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Yakutsk.rb +0 -163
  285. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Yekaterinburg.rb +0 -165
  286. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Asia/Yerevan.rb +0 -165
  287. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Atlantic/Azores.rb +0 -270
  288. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Atlantic/Cape_Verde.rb +0 -23
  289. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Atlantic/South_Georgia.rb +0 -18
  290. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Adelaide.rb +0 -187
  291. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Brisbane.rb +0 -35
  292. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Darwin.rb +0 -29
  293. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Hobart.rb +0 -193
  294. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Melbourne.rb +0 -185
  295. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Perth.rb +0 -37
  296. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Australia/Sydney.rb +0 -185
  297. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Etc/UTC.rb +0 -16
  298. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Amsterdam.rb +0 -228
  299. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Athens.rb +0 -185
  300. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Belgrade.rb +0 -163
  301. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Berlin.rb +0 -188
  302. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Bratislava.rb +0 -13
  303. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Brussels.rb +0 -232
  304. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Bucharest.rb +0 -181
  305. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Budapest.rb +0 -197
  306. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Copenhagen.rb +0 -179
  307. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Dublin.rb +0 -276
  308. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Helsinki.rb +0 -163
  309. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Istanbul.rb +0 -218
  310. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Kiev.rb +0 -168
  311. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Lisbon.rb +0 -268
  312. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Ljubljana.rb +0 -13
  313. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/London.rb +0 -288
  314. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Madrid.rb +0 -211
  315. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Minsk.rb +0 -170
  316. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Moscow.rb +0 -181
  317. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Paris.rb +0 -232
  318. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Prague.rb +0 -187
  319. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Riga.rb +0 -176
  320. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Rome.rb +0 -215
  321. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Sarajevo.rb +0 -13
  322. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Skopje.rb +0 -13
  323. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Sofia.rb +0 -173
  324. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Stockholm.rb +0 -165
  325. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Tallinn.rb +0 -172
  326. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Vienna.rb +0 -183
  327. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Vilnius.rb +0 -170
  328. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Warsaw.rb +0 -212
  329. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Europe/Zagreb.rb +0 -13
  330. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Auckland.rb +0 -202
  331. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Fiji.rb +0 -23
  332. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Guam.rb +0 -22
  333. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Honolulu.rb +0 -28
  334. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Majuro.rb +0 -20
  335. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Midway.rb +0 -25
  336. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Noumea.rb +0 -25
  337. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Pago_Pago.rb +0 -26
  338. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Port_Moresby.rb +0 -20
  339. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/definitions/Pacific/Tongatapu.rb +0 -27
  340. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/info_timezone.rb +0 -52
  341. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/linked_timezone.rb +0 -51
  342. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/linked_timezone_info.rb +0 -44
  343. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/offset_rationals.rb +0 -98
  344. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/ruby_core_support.rb +0 -56
  345. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/time_or_datetime.rb +0 -292
  346. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone.rb +0 -508
  347. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_definition.rb +0 -56
  348. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_info.rb +0 -40
  349. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_offset_info.rb +0 -94
  350. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_period.rb +0 -198
  351. data/lib/active_support/vendor/tzinfo-0.3.13/lib/tzinfo/timezone_transition_info.rb +0 -129
@@ -0,0 +1,61 @@
1
+ module ActiveSupport
2
+ module Notifications
3
+ # This is a default queue implementation that ships with Notifications. It
4
+ # just pushes events to all registered log subscribers.
5
+ class Fanout
6
+ def initialize
7
+ @subscribers = []
8
+ @listeners_for = {}
9
+ end
10
+
11
+ def subscribe(pattern = nil, block = Proc.new)
12
+ subscriber = Subscriber.new(pattern, block).tap do |s|
13
+ @subscribers << s
14
+ end
15
+ @listeners_for.clear
16
+ subscriber
17
+ end
18
+
19
+ def unsubscribe(subscriber)
20
+ @subscribers.reject! {|s| s.matches?(subscriber)}
21
+ @listeners_for.clear
22
+ end
23
+
24
+ def publish(name, *args)
25
+ listeners_for(name).each { |s| s.publish(name, *args) }
26
+ end
27
+
28
+ def listeners_for(name)
29
+ @listeners_for[name] ||= @subscribers.select { |s| s.subscribed_to?(name) }
30
+ end
31
+
32
+ def listening?(name)
33
+ listeners_for(name).any?
34
+ end
35
+
36
+ # This is a sync queue, so there is not waiting.
37
+ def wait
38
+ end
39
+
40
+ class Subscriber #:nodoc:
41
+ def initialize(pattern, delegate)
42
+ @pattern = pattern
43
+ @delegate = delegate
44
+ end
45
+
46
+ def publish(message, *args)
47
+ @delegate.call(message, *args)
48
+ end
49
+
50
+ def subscribed_to?(name)
51
+ !@pattern || @pattern === name.to_s
52
+ end
53
+
54
+ def matches?(subscriber_or_name)
55
+ self === subscriber_or_name ||
56
+ @pattern && @pattern === subscriber_or_name
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,54 @@
1
+ require 'active_support/secure_random'
2
+ require 'active_support/core_ext/module/delegation'
3
+
4
+ module ActiveSupport
5
+ module Notifications
6
+ class Instrumenter
7
+ attr_reader :id
8
+
9
+ def initialize(notifier)
10
+ @id = unique_id
11
+ @notifier = notifier
12
+ end
13
+
14
+ # Instrument the given block by measuring the time taken to execute it
15
+ # and publish it. Notice that events get sent even if an error occurs
16
+ # in the passed-in block
17
+ def instrument(name, payload={})
18
+ started = Time.now
19
+
20
+ begin
21
+ yield
22
+ rescue Exception => e
23
+ payload[:exception] = [e.class.name, e.message]
24
+ raise e
25
+ ensure
26
+ @notifier.publish(name, started, Time.now, @id, payload)
27
+ end
28
+ end
29
+
30
+ private
31
+ def unique_id
32
+ SecureRandom.hex(10)
33
+ end
34
+ end
35
+
36
+ class Event
37
+ attr_reader :name, :time, :end, :transaction_id, :payload, :duration
38
+
39
+ def initialize(name, start, ending, transaction_id, payload)
40
+ @name = name
41
+ @payload = payload.dup
42
+ @time = start
43
+ @transaction_id = transaction_id
44
+ @end = ending
45
+ @duration = 1000.0 * (@end - @time)
46
+ end
47
+
48
+ def parent_of?(event)
49
+ start = (time - event.time) * 1000
50
+ start <= 0 && (start + duration >= event.duration)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,10 +1,39 @@
1
+ require 'yaml'
2
+
3
+ YAML.add_builtin_type("omap") do |type, val|
4
+ ActiveSupport::OrderedHash[val.map(&:to_a).map(&:first)]
5
+ end
6
+
1
7
  # OrderedHash is namespaced to prevent conflicts with other implementations
2
8
  module ActiveSupport
3
- # Hash is ordered in Ruby 1.9!
4
- if RUBY_VERSION >= '1.9'
5
- OrderedHash = ::Hash
6
- else
7
- class OrderedHash < Hash #:nodoc:
9
+ class OrderedHash < ::Hash #:nodoc:
10
+ def to_yaml_type
11
+ "!tag:yaml.org,2002:omap"
12
+ end
13
+
14
+ def to_yaml(opts = {})
15
+ YAML.quick_emit(self, opts) do |out|
16
+ out.seq(taguri, to_yaml_style) do |seq|
17
+ each do |k, v|
18
+ seq.add(k => v)
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ # Hash is ordered in Ruby 1.9!
25
+ if RUBY_VERSION < '1.9'
26
+
27
+ # In MRI the Hash class is core and written in C. In particular, methods are
28
+ # programmed with explicit C function calls and polymorphism is not honored.
29
+ #
30
+ # For example, []= is crucial in this implementation to maintain the @keys
31
+ # array but hash.c invokes rb_hash_aset() originally. This prevents method
32
+ # reuse through inheritance and forces us to reimplement stuff.
33
+ #
34
+ # For instance, we cannot use the inherited #merge! because albeit the algorithm
35
+ # itself would work, our []= is not being called at all by the C code.
36
+
8
37
  def initialize(*args, &block)
9
38
  super
10
39
  @keys = []
@@ -52,7 +81,7 @@ module ActiveSupport
52
81
  end
53
82
  super
54
83
  end
55
-
84
+
56
85
  def delete_if
57
86
  super
58
87
  sync_keys!
@@ -112,23 +141,39 @@ module ActiveSupport
112
141
  end
113
142
 
114
143
  def merge!(other_hash)
115
- other_hash.each {|k,v| self[k] = v }
144
+ if block_given?
145
+ other_hash.each { |k, v| self[k] = key?(k) ? yield(k, self[k], v) : v }
146
+ else
147
+ other_hash.each { |k, v| self[k] = v }
148
+ end
116
149
  self
117
150
  end
118
151
 
119
- def merge(other_hash)
120
- dup.merge!(other_hash)
152
+ alias_method :update, :merge!
153
+
154
+ def merge(other_hash, &block)
155
+ dup.merge!(other_hash, &block)
121
156
  end
122
157
 
123
- def inspect
124
- "#<OrderedHash #{super}>"
158
+ # When replacing with another hash, the initial order of our keys must come from the other hash -ordered or not.
159
+ def replace(other)
160
+ super
161
+ @keys = other.keys
162
+ self
125
163
  end
126
164
 
127
- private
165
+ def invert
166
+ OrderedHash[self.to_a.map!{|key_value_pair| key_value_pair.reverse}]
167
+ end
128
168
 
129
- def sync_keys!
130
- @keys.delete_if {|k| !has_key?(k)}
169
+ def inspect
170
+ "#<OrderedHash #{super}>"
131
171
  end
172
+
173
+ private
174
+ def sync_keys!
175
+ @keys.delete_if {|k| !has_key?(k)}
176
+ end
132
177
  end
133
178
  end
134
179
  end
@@ -18,4 +18,10 @@ module ActiveSupport #:nodoc:
18
18
  end
19
19
  end
20
20
  end
21
+
22
+ class InheritableOptions < OrderedOptions
23
+ def initialize(parent)
24
+ super() { |h,k| parent[k] }
25
+ end
26
+ end
21
27
  end
@@ -0,0 +1,60 @@
1
+ require "active_support"
2
+ require "rails"
3
+ require "active_support/i18n_railtie"
4
+
5
+ module ActiveSupport
6
+ class Railtie < Rails::Railtie
7
+ config.active_support = ActiveSupport::OrderedOptions.new
8
+
9
+ # Loads support for "whiny nil" (noisy warnings when methods are invoked
10
+ # on +nil+ values) if Configuration#whiny_nils is true.
11
+ initializer "active_support.initialize_whiny_nils" do |app|
12
+ require 'active_support/whiny_nil' if app.config.whiny_nils
13
+ end
14
+
15
+ initializer "active_support.deprecation_behavior" do |app|
16
+ if deprecation = app.config.active_support.deprecation
17
+ ActiveSupport::Deprecation.behavior = deprecation
18
+ else
19
+ defaults = {"development" => :log,
20
+ "production" => :notify,
21
+ "test" => :stderr}
22
+
23
+ env = Rails.env
24
+
25
+ if defaults.key?(env)
26
+ msg = "You did not specify how you would like Rails to report " \
27
+ "deprecation notices for your #{env} environment, please " \
28
+ "set config.active_support.deprecation to :#{defaults[env]} " \
29
+ "at config/environments/#{env}.rb"
30
+
31
+ warn msg
32
+ ActiveSupport::Deprecation.behavior = defaults[env]
33
+ else
34
+ msg = "You did not specify how you would like Rails to report " \
35
+ "deprecation notices for your #{env} environment, please " \
36
+ "set config.active_support.deprecation to :log, :notify or " \
37
+ ":stderr at config/environments/#{env}.rb"
38
+
39
+ warn msg
40
+ ActiveSupport::Deprecation.behavior = :stderr
41
+ end
42
+ end
43
+ end
44
+
45
+ # Sets the default value for Time.zone
46
+ # If assigned value cannot be matched to a TimeZone, an exception will be raised.
47
+ initializer "active_support.initialize_time_zone" do |app|
48
+ require 'active_support/core_ext/time/zones'
49
+ zone_default = Time.__send__(:get_zone, app.config.time_zone)
50
+
51
+ unless zone_default
52
+ raise \
53
+ 'Value assigned to config.time_zone not recognized.' +
54
+ 'Run "rake -D time" for a list of tasks for finding appropriate time zone names.'
55
+ end
56
+
57
+ Time.zone_default = zone_default
58
+ end
59
+ end
60
+ end
@@ -1,5 +1,8 @@
1
- require 'active_support/core_ext/class/inheritable_attributes'
1
+ require 'active_support/concern'
2
+ require 'active_support/core_ext/class/attribute'
2
3
  require 'active_support/core_ext/proc'
4
+ require 'active_support/core_ext/string/inflections'
5
+ require 'active_support/core_ext/array/extract_options'
3
6
 
4
7
  module ActiveSupport
5
8
  # Rescuable module adds support for easier exception handling.
@@ -7,7 +10,7 @@ module ActiveSupport
7
10
  extend Concern
8
11
 
9
12
  included do
10
- class_inheritable_accessor :rescue_handlers
13
+ class_attribute :rescue_handlers
11
14
  self.rescue_handlers = []
12
15
  end
13
16
 
@@ -65,7 +68,7 @@ module ActiveSupport
65
68
  end
66
69
 
67
70
  # put the new handler at the end because the list is read in reverse
68
- rescue_handlers << [key, options[:with]]
71
+ self.rescue_handlers += [[key, options[:with]]]
69
72
  end
70
73
  end
71
74
  end
@@ -81,7 +84,7 @@ module ActiveSupport
81
84
  def handler_for_rescue(exception)
82
85
  # We go from right to left because pairs are pushed onto rescue_handlers
83
86
  # as rescue_from declarations are found.
84
- _, rescuer = Array(rescue_handlers).reverse.detect do |klass_name, handler|
87
+ _, rescuer = self.class.rescue_handlers.reverse.detect do |klass_name, handler|
85
88
  # The purpose of allowing strings in rescue_from is to support the
86
89
  # declaration of handler associations for exception classes whose
87
90
  # definition is yet unknown.
@@ -4,21 +4,19 @@
4
4
  # Date next_year, next_month
5
5
  # DateTime to_date, to_datetime, xmlschema
6
6
  # Enumerable group_by, each_with_object, none?
7
- # Integer even?, odd?
8
- # Object tap
9
7
  # Process Process.daemon
10
8
  # REXML security fix
11
9
  # String ord
12
- # Symbol to_proc
13
10
  # Time to_date, to_time, to_datetime
14
11
  require 'active_support'
15
12
  require 'active_support/core_ext/date/calculations'
16
13
  require 'active_support/core_ext/date_time/conversions'
17
14
  require 'active_support/core_ext/enumerable'
18
- require 'active_support/core_ext/integer/even_odd'
19
- require 'active_support/core_ext/object/tap'
20
15
  require 'active_support/core_ext/process/daemon'
21
16
  require 'active_support/core_ext/string/conversions'
17
+ require 'active_support/core_ext/string/interpolation'
18
+ require 'active_support/core_ext/string/encoding'
22
19
  require 'active_support/core_ext/rexml'
23
- require 'active_support/core_ext/symbol/to_proc'
24
20
  require 'active_support/core_ext/time/conversions'
21
+ require 'active_support/core_ext/file/path'
22
+ require 'active_support/core_ext/module/method_names'
@@ -5,9 +5,10 @@ require 'active_support/testing/deprecation'
5
5
  require 'active_support/testing/declarative'
6
6
  require 'active_support/testing/pending'
7
7
  require 'active_support/testing/isolation'
8
+ require 'active_support/core_ext/kernel/reporting'
8
9
 
9
10
  begin
10
- require 'mocha'
11
+ silence_warnings { require 'mocha' }
11
12
  rescue LoadError
12
13
  # Fake Mocha::ExpectationError so we can rescue it in #run. Bleh.
13
14
  Object.const_set :Mocha, Module.new
@@ -21,12 +22,6 @@ module ActiveSupport
21
22
  alias_method :method_name, :name if method_defined? :name
22
23
  alias_method :method_name, :__name__ if method_defined? :__name__
23
24
  else
24
- # TODO: Figure out how to get the Rails::BacktraceFilter into minitest/unit
25
- if defined?(Rails) && ENV['BACKTRACE'].nil?
26
- require 'rails/backtrace_cleaner'
27
- Test::Unit::Util::BacktraceFilter.module_eval { include Rails::BacktraceFilterForTestUnit }
28
- end
29
-
30
25
  Assertion = Test::Unit::AssertionFailedError
31
26
 
32
27
  require 'active_support/testing/default'
@@ -1,4 +1,5 @@
1
1
  require 'active_support/core_ext/array/wrap'
2
+ require 'active_support/core_ext/object/blank'
2
3
 
3
4
  module ActiveSupport
4
5
  module Testing
@@ -62,6 +63,20 @@ module ActiveSupport
62
63
  def assert_no_difference(expression, message = nil, &block)
63
64
  assert_difference expression, 0, message, &block
64
65
  end
66
+
67
+ # Test if an expression is blank. Passes if object.blank? is true.
68
+ #
69
+ # assert_blank [] # => true
70
+ def assert_blank(object)
71
+ assert object.blank?, "#{object.inspect} is not blank"
72
+ end
73
+
74
+ # Test if an expression is not blank. Passes if object.present? is true.
75
+ #
76
+ # assert_present {:data => 'x' } # => true
77
+ def assert_present(object)
78
+ assert object.present?, "#{object.inspect} is blank"
79
+ end
65
80
  end
66
81
  end
67
82
  end
@@ -7,7 +7,7 @@ module ActiveSupport
7
7
 
8
8
  unless method_defined?(:describe)
9
9
  def self.describe(text)
10
- class_eval <<-RUBY_EVAL
10
+ class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
11
11
  def self.name
12
12
  "#{text}"
13
13
  end
@@ -1,10 +1,26 @@
1
+ require 'rbconfig'
1
2
  module ActiveSupport
2
3
  module Testing
4
+ class RemoteError < StandardError
5
+
6
+ attr_reader :message, :backtrace
7
+
8
+ def initialize(exception)
9
+ @message = "caught #{exception.class.name}: #{exception.message}"
10
+ @backtrace = exception.backtrace
11
+ end
12
+ end
13
+
3
14
  class ProxyTestResult
4
15
  def initialize
5
16
  @calls = []
6
17
  end
7
18
 
19
+ def add_error(e)
20
+ e = Test::Unit::Error.new(e.test_name, RemoteError.new(e.exception))
21
+ @calls << [:add_error, e]
22
+ end
23
+
8
24
  def __replay__(result)
9
25
  @calls.each do |name, args|
10
26
  result.send(name, *args)
@@ -18,31 +34,60 @@ module ActiveSupport
18
34
 
19
35
  module Isolation
20
36
  def self.forking_env?
21
- !ENV["NO_FORK"] && RUBY_PLATFORM !~ /mswin|mingw|java/
37
+ !ENV["NO_FORK"] && ((Config::CONFIG['host_os'] !~ /mswin|mingw/) && (RUBY_PLATFORM !~ /java/))
38
+ end
39
+
40
+ def self.included(base)
41
+ if defined?(::MiniTest) && base < ::MiniTest::Unit::TestCase
42
+ base.send :include, MiniTest
43
+ elsif defined?(Test::Unit)
44
+ base.send :include, TestUnit
45
+ end
22
46
  end
23
47
 
24
- def run(result)
25
- unless defined?(@@ran_class_setup)
48
+ def _run_class_setup # class setup method should only happen in parent
49
+ unless defined?(@@ran_class_setup) || ENV['ISOLATION_TEST']
26
50
  self.class.setup if self.class.respond_to?(:setup)
27
51
  @@ran_class_setup = true
28
52
  end
53
+ end
54
+
55
+ module TestUnit
56
+ def run(result)
57
+ _run_class_setup
29
58
 
30
- yield(Test::Unit::TestCase::STARTED, name)
59
+ yield(Test::Unit::TestCase::STARTED, name)
31
60
 
32
- @_result = result
61
+ @_result = result
33
62
 
34
- serialized = run_in_isolation do |proxy|
35
- begin
36
- super(proxy) { }
37
- rescue Exception => e
38
- proxy.add_error(Test::Unit::Error.new(name, e))
63
+ serialized = run_in_isolation do |proxy|
64
+ begin
65
+ super(proxy) { }
66
+ rescue Exception => e
67
+ proxy.add_error(Test::Unit::Error.new(name, e))
68
+ end
39
69
  end
70
+
71
+ retval, proxy = Marshal.load(serialized)
72
+ proxy.__replay__(@_result)
73
+
74
+ yield(Test::Unit::TestCase::FINISHED, name)
75
+ retval
40
76
  end
77
+ end
78
+
79
+ module MiniTest
80
+ def run(runner)
81
+ _run_class_setup
41
82
 
42
- proxy = Marshal.load(serialized)
43
- proxy.__replay__(@_result)
83
+ serialized = run_in_isolation do |isolated_runner|
84
+ super(isolated_runner)
85
+ end
44
86
 
45
- yield(Test::Unit::TestCase::FINISHED, name)
87
+ retval, proxy = Marshal.load(serialized)
88
+ proxy.__replay__(runner)
89
+ retval
90
+ end
46
91
  end
47
92
 
48
93
  module Forking
@@ -52,8 +97,8 @@ module ActiveSupport
52
97
  pid = fork do
53
98
  read.close
54
99
  proxy = ProxyTestResult.new
55
- yield proxy
56
- write.puts [Marshal.dump(proxy)].pack("m")
100
+ retval = yield proxy
101
+ write.puts [Marshal.dump([retval, proxy])].pack("m")
57
102
  exit!
58
103
  end
59
104
 
@@ -65,6 +110,8 @@ module ActiveSupport
65
110
  end
66
111
 
67
112
  module Subprocess
113
+ ORIG_ARGV = ARGV.dup unless defined?(ORIG_ARGV)
114
+
68
115
  # Crazy H4X to get this working in windows / jruby with
69
116
  # no forking.
70
117
  def run_in_isolation(&blk)
@@ -72,9 +119,9 @@ module ActiveSupport
72
119
 
73
120
  if ENV["ISOLATION_TEST"]
74
121
  proxy = ProxyTestResult.new
75
- yield proxy
122
+ retval = yield proxy
76
123
  File.open(ENV["ISOLATION_OUTPUT"], "w") do |file|
77
- file.puts [Marshal.dump(proxy)].pack("m")
124
+ file.puts [Marshal.dump([retval, proxy])].pack("m")
78
125
  end
79
126
  exit!
80
127
  else