merb-core 0.9.7 → 0.9.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (274) hide show
  1. data/CHANGELOG +136 -2
  2. data/CONTRIBUTORS +6 -0
  3. data/PUBLIC_CHANGELOG +38 -0
  4. data/Rakefile +38 -30
  5. data/lib/merb-core.rb +88 -23
  6. data/lib/merb-core/bootloader.rb +235 -51
  7. data/lib/merb-core/config.rb +121 -36
  8. data/lib/merb-core/controller/abstract_controller.rb +59 -36
  9. data/lib/merb-core/controller/exceptions.rb +2 -15
  10. data/lib/merb-core/controller/merb_controller.rb +44 -1
  11. data/lib/merb-core/controller/mime.rb +4 -0
  12. data/lib/merb-core/controller/mixins/controller.rb +38 -21
  13. data/lib/merb-core/controller/mixins/render.rb +44 -29
  14. data/lib/merb-core/controller/mixins/responder.rb +3 -31
  15. data/lib/merb-core/controller/template.rb +45 -21
  16. data/lib/merb-core/core_ext/kernel.rb +60 -32
  17. data/lib/merb-core/dispatch/default_exception/default_exception.rb +2 -2
  18. data/lib/merb-core/dispatch/default_exception/views/_css.html.erb +3 -1
  19. data/lib/merb-core/dispatch/default_exception/views/_javascript.html.erb +71 -67
  20. data/lib/merb-core/dispatch/default_exception/views/index.html.erb +7 -3
  21. data/lib/merb-core/dispatch/dispatcher.rb +3 -3
  22. data/lib/merb-core/dispatch/request.rb +56 -9
  23. data/lib/merb-core/dispatch/router.rb +159 -133
  24. data/lib/merb-core/dispatch/router/behavior.rb +462 -703
  25. data/lib/merb-core/dispatch/router/cached_proc.rb +3 -3
  26. data/lib/merb-core/dispatch/router/resources.rb +289 -0
  27. data/lib/merb-core/dispatch/router/route.rb +514 -294
  28. data/lib/merb-core/dispatch/session.rb +4 -2
  29. data/lib/merb-core/logger.rb +213 -202
  30. data/lib/merb-core/plugins.rb +9 -1
  31. data/lib/merb-core/rack.rb +3 -1
  32. data/lib/merb-core/rack/adapter.rb +7 -4
  33. data/lib/merb-core/rack/adapter/abstract.rb +188 -0
  34. data/lib/merb-core/rack/adapter/ebb.rb +12 -13
  35. data/lib/merb-core/rack/adapter/evented_mongrel.rb +2 -15
  36. data/lib/merb-core/rack/adapter/irb.rb +3 -2
  37. data/lib/merb-core/rack/adapter/mongrel.rb +22 -15
  38. data/lib/merb-core/rack/adapter/swiftiplied_mongrel.rb +4 -16
  39. data/lib/merb-core/rack/adapter/thin.rb +21 -22
  40. data/lib/merb-core/rack/adapter/thin_turbo.rb +4 -11
  41. data/lib/merb-core/rack/adapter/webrick.rb +54 -18
  42. data/lib/merb-core/rack/application.rb +4 -4
  43. data/lib/merb-core/rack/handler/mongrel.rb +12 -13
  44. data/lib/merb-core/rack/middleware/csrf.rb +1 -1
  45. data/lib/merb-core/rack/stream_wrapper.rb +41 -0
  46. data/lib/merb-core/server.rb +157 -90
  47. data/lib/merb-core/tasks/gem_management.rb +267 -0
  48. data/lib/merb-core/tasks/merb.rb +1 -0
  49. data/lib/merb-core/tasks/merb_rake_helper.rb +48 -34
  50. data/lib/merb-core/tasks/stats.rake +1 -1
  51. data/lib/merb-core/test.rb +9 -3
  52. data/lib/merb-core/test/helpers.rb +1 -0
  53. data/lib/merb-core/test/helpers/mock_request_helper.rb +393 -0
  54. data/lib/merb-core/test/helpers/multipart_request_helper.rb +3 -2
  55. data/lib/merb-core/test/helpers/request_helper.rb +40 -372
  56. data/lib/merb-core/test/helpers/route_helper.rb +16 -2
  57. data/lib/merb-core/test/matchers.rb +1 -0
  58. data/lib/merb-core/test/matchers/controller_matchers.rb +4 -247
  59. data/lib/merb-core/test/matchers/request_matchers.rb +140 -0
  60. data/lib/merb-core/test/matchers/view_matchers.rb +22 -4
  61. data/lib/merb-core/test/run_specs.rb +118 -26
  62. data/lib/merb-core/test/test_ext/rspec.rb +181 -0
  63. data/lib/merb-core/version.rb +1 -9
  64. metadata +10 -342
  65. data/docs/bootloading.dox +0 -58
  66. data/docs/documentation_standards +0 -40
  67. data/docs/merb-core-call-stack-diagram.mmap +0 -0
  68. data/docs/merb-core-call-stack-diagram.pdf +0 -0
  69. data/docs/merb-core-call-stack-diagram.png +0 -0
  70. data/docs/new_render_api +0 -51
  71. data/lib/merb-core/vendor/facets.rb +0 -2
  72. data/lib/merb-core/vendor/facets/dictionary.rb +0 -433
  73. data/lib/merb-core/vendor/facets/inflect.rb +0 -342
  74. data/spec/private/config/adapter_spec.rb +0 -32
  75. data/spec/private/config/config_spec.rb +0 -202
  76. data/spec/private/config/environment_spec.rb +0 -13
  77. data/spec/private/config/merb_spec.rb +0 -34
  78. data/spec/private/config/spec_helper.rb +0 -1
  79. data/spec/private/core_ext/kernel_spec.rb +0 -159
  80. data/spec/private/dispatch/bootloader_spec.rb +0 -24
  81. data/spec/private/dispatch/fixture/app/controllers/application.rb +0 -4
  82. data/spec/private/dispatch/fixture/app/controllers/exceptions.rb +0 -25
  83. data/spec/private/dispatch/fixture/app/controllers/foo.rb +0 -19
  84. data/spec/private/dispatch/fixture/app/helpers/global_helpers.rb +0 -8
  85. data/spec/private/dispatch/fixture/app/views/exeptions/client_error.html.erb +0 -37
  86. data/spec/private/dispatch/fixture/app/views/exeptions/internal_server_error.html.erb +0 -216
  87. data/spec/private/dispatch/fixture/app/views/exeptions/not_acceptable.html.erb +0 -38
  88. data/spec/private/dispatch/fixture/app/views/exeptions/not_found.html.erb +0 -40
  89. data/spec/private/dispatch/fixture/app/views/foo/bar.html.erb +0 -0
  90. data/spec/private/dispatch/fixture/app/views/layout/application.html.erb +0 -11
  91. data/spec/private/dispatch/fixture/config/black_hole.rb +0 -12
  92. data/spec/private/dispatch/fixture/config/environments/development.rb +0 -6
  93. data/spec/private/dispatch/fixture/config/environments/production.rb +0 -5
  94. data/spec/private/dispatch/fixture/config/environments/test.rb +0 -6
  95. data/spec/private/dispatch/fixture/config/init.rb +0 -45
  96. data/spec/private/dispatch/fixture/config/rack.rb +0 -11
  97. data/spec/private/dispatch/fixture/config/router.rb +0 -35
  98. data/spec/private/dispatch/fixture/log/merb_test.log +0 -8839
  99. data/spec/private/dispatch/fixture/public/images/merb.jpg +0 -0
  100. data/spec/private/dispatch/fixture/public/merb.fcgi +0 -4
  101. data/spec/private/dispatch/fixture/public/stylesheets/master.css +0 -119
  102. data/spec/private/dispatch/route_params_spec.rb +0 -23
  103. data/spec/private/dispatch/spec_helper.rb +0 -1
  104. data/spec/private/router/behavior_spec.rb +0 -60
  105. data/spec/private/router/fixture/log/merb_test.log +0 -35
  106. data/spec/private/router/route_spec.rb +0 -418
  107. data/spec/private/router/router_spec.rb +0 -183
  108. data/spec/private/vendor/facets/plural_spec.rb +0 -564
  109. data/spec/private/vendor/facets/singular_spec.rb +0 -489
  110. data/spec/public/DEFINITIONS +0 -11
  111. data/spec/public/abstract_controller/controllers/alt_views/layout/application.erb +0 -1
  112. data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb +0 -1
  113. data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb +0 -1
  114. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb +0 -1
  115. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb +0 -1
  116. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +0 -1
  117. data/spec/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb +0 -1
  118. data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb +0 -1
  119. data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb +0 -1
  120. data/spec/public/abstract_controller/controllers/cousins.rb +0 -41
  121. data/spec/public/abstract_controller/controllers/display.rb +0 -60
  122. data/spec/public/abstract_controller/controllers/filters.rb +0 -260
  123. data/spec/public/abstract_controller/controllers/helpers.rb +0 -41
  124. data/spec/public/abstract_controller/controllers/partial.rb +0 -121
  125. data/spec/public/abstract_controller/controllers/render.rb +0 -113
  126. data/spec/public/abstract_controller/controllers/views/helpers/capture/index.erb +0 -1
  127. data/spec/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb +0 -1
  128. data/spec/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb +0 -1
  129. data/spec/public/abstract_controller/controllers/views/helpers/concat/index.erb +0 -1
  130. data/spec/public/abstract_controller/controllers/views/layout/alt.erb +0 -1
  131. data/spec/public/abstract_controller/controllers/views/layout/custom.erb +0 -1
  132. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb +0 -1
  133. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb +0 -1
  134. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb +0 -1
  135. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_app_layout/index.erb +0 -0
  136. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb +0 -1
  137. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +0 -1
  138. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb +0 -1
  139. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_throw_contents/index.erb +0 -1
  140. data/spec/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb +0 -1
  141. data/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb +0 -1
  142. data/spec/public/abstract_controller/controllers/views/partial/basic_partial/index.erb +0 -1
  143. data/spec/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb +0 -1
  144. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb +0 -1
  145. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb +0 -1
  146. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/index.erb +0 -1
  147. data/spec/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb +0 -1
  148. data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb +0 -1
  149. data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb +0 -1
  150. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb +0 -1
  151. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb +0 -1
  152. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb +0 -1
  153. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb +0 -1
  154. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb +0 -1
  155. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb +0 -1
  156. data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb +0 -1
  157. data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb +0 -1
  158. data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb +0 -1
  159. data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb +0 -1
  160. data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb +0 -1
  161. data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb +0 -1
  162. data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb +0 -1
  163. data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb +0 -1
  164. data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb +0 -1
  165. data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb +0 -1
  166. data/spec/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb +0 -1
  167. data/spec/public/abstract_controller/controllers/views/partial/with_partial/index.erb +0 -1
  168. data/spec/public/abstract_controller/controllers/views/test_display/foo.html.erb +0 -1
  169. data/spec/public/abstract_controller/controllers/views/test_render/foo.html.erb +0 -0
  170. data/spec/public/abstract_controller/controllers/views/wonderful/index.erb +0 -1
  171. data/spec/public/abstract_controller/display_spec.rb +0 -37
  172. data/spec/public/abstract_controller/filter_spec.rb +0 -136
  173. data/spec/public/abstract_controller/helper_spec.rb +0 -21
  174. data/spec/public/abstract_controller/partial_spec.rb +0 -61
  175. data/spec/public/abstract_controller/render_spec.rb +0 -90
  176. data/spec/public/abstract_controller/spec_helper.rb +0 -31
  177. data/spec/public/boot_loader/boot_loader_spec.rb +0 -33
  178. data/spec/public/boot_loader/spec_helper.rb +0 -1
  179. data/spec/public/controller/authentication_spec.rb +0 -174
  180. data/spec/public/controller/base_spec.rb +0 -88
  181. data/spec/public/controller/conditional_get_spec.rb +0 -100
  182. data/spec/public/controller/config/init.rb +0 -6
  183. data/spec/public/controller/controllers/authentication.rb +0 -74
  184. data/spec/public/controller/controllers/base.rb +0 -65
  185. data/spec/public/controller/controllers/conditional_get.rb +0 -35
  186. data/spec/public/controller/controllers/cookies.rb +0 -36
  187. data/spec/public/controller/controllers/dispatcher.rb +0 -35
  188. data/spec/public/controller/controllers/display.rb +0 -118
  189. data/spec/public/controller/controllers/redirect.rb +0 -36
  190. data/spec/public/controller/controllers/responder.rb +0 -93
  191. data/spec/public/controller/controllers/url.rb +0 -7
  192. data/spec/public/controller/controllers/views/layout/custom.html.erb +0 -1
  193. data/spec/public/controller/controllers/views/layout/custom_arg.html.erb +0 -1
  194. data/spec/public/controller/controllers/views/layout/custom_arg.json.erb +0 -1
  195. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb +0 -1
  196. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb +0 -1
  197. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb +0 -1
  198. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb +0 -1
  199. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb +0 -1
  200. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb +0 -1
  201. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb +0 -1
  202. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb +0 -1
  203. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb +0 -1
  204. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb +0 -1
  205. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb +0 -1
  206. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb +0 -1
  207. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb +0 -1
  208. data/spec/public/controller/cookies_spec.rb +0 -95
  209. data/spec/public/controller/dispatcher_spec.rb +0 -410
  210. data/spec/public/controller/display_spec.rb +0 -84
  211. data/spec/public/controller/redirect_spec.rb +0 -33
  212. data/spec/public/controller/responder_spec.rb +0 -169
  213. data/spec/public/controller/spec_helper.rb +0 -13
  214. data/spec/public/controller/url_spec.rb +0 -255
  215. data/spec/public/core/merb_core_spec.rb +0 -45
  216. data/spec/public/core_ext/fixtures/core_ext_dependency.rb +0 -2
  217. data/spec/public/core_ext/kernel_spec.rb +0 -88
  218. data/spec/public/core_ext/spec_helper.rb +0 -1
  219. data/spec/public/directory_structure/directory/app/controllers/application.rb +0 -3
  220. data/spec/public/directory_structure/directory/app/controllers/base.rb +0 -13
  221. data/spec/public/directory_structure/directory/app/controllers/custom.rb +0 -19
  222. data/spec/public/directory_structure/directory/app/views/base/template.html.erb +0 -1
  223. data/spec/public/directory_structure/directory/app/views/wonderful/template.erb +0 -1
  224. data/spec/public/directory_structure/directory/config/router.rb +0 -3
  225. data/spec/public/directory_structure/directory/log/merb_test.log +0 -4588
  226. data/spec/public/directory_structure/directory_spec.rb +0 -43
  227. data/spec/public/logger/logger_spec.rb +0 -181
  228. data/spec/public/logger/spec_helper.rb +0 -1
  229. data/spec/public/rack/conditinal_get_middleware_spec.rb +0 -127
  230. data/spec/public/rack/csrf_middleware_spec.rb +0 -70
  231. data/spec/public/rack/rack_middleware_spec.rb +0 -99
  232. data/spec/public/rack/shared_example_groups.rb +0 -35
  233. data/spec/public/reloading/directory/app/controllers/application.rb +0 -3
  234. data/spec/public/reloading/directory/app/controllers/reload.rb +0 -6
  235. data/spec/public/reloading/directory/config/init.rb +0 -2
  236. data/spec/public/reloading/directory/log/merb_test.log +0 -288231
  237. data/spec/public/reloading/reload_spec.rb +0 -103
  238. data/spec/public/request/multipart_spec.rb +0 -41
  239. data/spec/public/request/request_spec.rb +0 -250
  240. data/spec/public/router/default_spec.rb +0 -21
  241. data/spec/public/router/deferred_spec.rb +0 -22
  242. data/spec/public/router/fixation_spec.rb +0 -49
  243. data/spec/public/router/fixture/log/merb_test.log +0 -524
  244. data/spec/public/router/namespace_spec.rb +0 -113
  245. data/spec/public/router/nested_matches_spec.rb +0 -97
  246. data/spec/public/router/nested_resources_spec.rb +0 -41
  247. data/spec/public/router/resource_spec.rb +0 -37
  248. data/spec/public/router/resources_spec.rb +0 -82
  249. data/spec/public/router/spec_helper.rb +0 -90
  250. data/spec/public/router/special_spec.rb +0 -61
  251. data/spec/public/router/string_spec.rb +0 -61
  252. data/spec/public/session/controllers/sessions.rb +0 -56
  253. data/spec/public/session/cookie_session_spec.rb +0 -73
  254. data/spec/public/session/memcached_session_spec.rb +0 -31
  255. data/spec/public/session/memory_session_spec.rb +0 -28
  256. data/spec/public/session/multiple_sessions_spec.rb +0 -74
  257. data/spec/public/session/no_session_spec.rb +0 -12
  258. data/spec/public/session/session_spec.rb +0 -106
  259. data/spec/public/template/template_spec.rb +0 -104
  260. data/spec/public/template/templates/error.html.erb +0 -2
  261. data/spec/public/template/templates/template.html.erb +0 -1
  262. data/spec/public/template/templates/template.html.myt +0 -1
  263. data/spec/public/test/controller_matchers_spec.rb +0 -412
  264. data/spec/public/test/controllers/controller_assertion_mock.rb +0 -7
  265. data/spec/public/test/controllers/dispatch_controller.rb +0 -11
  266. data/spec/public/test/controllers/spec_helper_controller.rb +0 -39
  267. data/spec/public/test/multipart_request_helper_spec.rb +0 -159
  268. data/spec/public/test/multipart_upload_text_file.txt +0 -1
  269. data/spec/public/test/request_helper_spec.rb +0 -269
  270. data/spec/public/test/route_helper_spec.rb +0 -78
  271. data/spec/public/test/route_matchers_spec.rb +0 -166
  272. data/spec/public/test/view_helper_spec.rb +0 -96
  273. data/spec/public/test/view_matchers_spec.rb +0 -183
  274. data/spec/spec_helper.rb +0 -121
data/CHANGELOG CHANGED
@@ -1,4 +1,138 @@
1
- == 0.9.7 "Universe In A Bundle" 2008-09-13
1
+ == 0.9.8 "Time Machine" 2008-06-10
2
+
3
+ * Pre-release contributors file update.
4
+ * Nillify Merb.logger first.
5
+ * Legacy Merb apps log again. And Merb tells you where it logs on boot unless you are testing.
6
+ * Fixes up RSpec matcher for request helper
7
+ * remove vestigal @_template_stack variable.
8
+ * remove rogure require no longer needed
9
+ * compile templates with preambles to assign locals, support recompiling partial templates if previously unseen locals are provided
10
+ * Add a note on Dictionary and inflection code to public changelog.
11
+ * Nuke files that are already part of Extlib.
12
+ * Update public changelog.
13
+ * Fixed Merb::BootLoader::Router issue
14
+ * -core now depends on most recent Extlib
15
+ * Revert "Added MinimalPrivilege to merb.thor. Thanks namelessjon."
16
+ * Fixed stats.rake to check if directory exists
17
+ * Move inflection code and Dictionary to extlib.
18
+ * Rakefiles should be empty by default (so RSpec is not pushed down test unit users' throat).
19
+ * Added MinimalPrivilege to merb.thor. Thanks namelessjon.
20
+ * Added Merb::BootLoader::Router
21
+ * Improve public specs for logger. Use Mash for log levels.
22
+ * Untabify logger.rb.
23
+ * Allow Merb.disable(:signals) to keep Merb from installing any signal handlers.
24
+ * Added the ability to specify resource actions in the block
25
+ * Fixed bug where subgems (of meta-gems) weren't reinstalled each time
26
+ * Added process title reporting as per: LH #517
27
+ * Making the :key a synonym to :keys for Behavior#resource
28
+ * Fixing the rspec error when running rake tasks
29
+ * Cleaned up the specs. Removed any stray pending specs.
30
+ * Added stacking and redirecting deferred routing blocks.
31
+ * Removed private/dispatch/route_params_spec.rb
32
+ * New spec helpers ported over. Old #request helper becomes #mock_request, which uses some mocking and stubbing to set up the request. The new #request API uses no mocking, and has the following API changes:
33
+ * Removed spec/private/config
34
+ * Added dependency 'foo', :immediate => true for loading dependencies immediately
35
+ * call to_s in the csrf middlewre
36
+ * make StreamWrapper more duck typed to the old body string.
37
+ * If --log-level or --log is explicitly given, never log to STDOUT, alsways to file
38
+ * If Merb.env?(:test) we don't need ugly = true spread all over the place
39
+ * use Proc === @body instead
40
+ * Bring the console adapter's #url back into action
41
+ * update specs for new rack stream_wrapper
42
+ * Updating streaming methods to work on *all* rack adapters.
43
+ * Make Merb::Config[]= work without calling setup 1st
44
+ * Default to = 'UTF8' - you can just set this in init.rb if needed
45
+ * Colorful GemManagement
46
+ * Removed unused directory under spec.
47
+ * Reorganized URL generation methods across Controller classes
48
+ * Added a :singular option to resource route building
49
+ * merb -k works right
50
+ * Fixes stupid issue in spec loader
51
+ * Route matching handles slashes according to the RFC
52
+ * Added the #resource controller helper for URL generation.
53
+ * Fixes #503; raise InternalServerError works now.
54
+ * We shouldn't use minigems explicitly in our code (yet)
55
+ * Add missing pieces of forking awesomeness.
56
+ * Executable wrappers use /usr/bin/env again - run them with /path/to/ruby -S if you need a specific Ruby version
57
+ * Merge in forking branch.
58
+ * Use trenary operator here.
59
+ * capture returns return value of passed in block if it is not a template block
60
+ * Updated PUBLIC_CHANGELOG regarding Merb::RakeHelper
61
+ * reverts URI generation on requests
62
+ * Updates full_uri for the changes to the Request#protocol
63
+ * Reorganized merb-core/tasks/merb to require merb-core/tasks/merb_rake_helper (see merb-gen too)
64
+ * Cleanup of tasks/merb_rake_helper.rb
65
+ * Added :gemspec task to Rakefile
66
+ * Fixed executable wrapper code (for loading local gems)
67
+ * Added Merb::RakeHelper.install_package method to install packages directly
68
+ * Merb::RakeHelper now handles local ./bin and GEM_DIR installs correctly
69
+ * Rakefile now uses Merb::RakeHelper.install
70
+ * Added GemManagement module - working towards new install/uninstall rake tasks
71
+ * Removed Merb::BootLoader::ReloadTemplates; Merb::Config[:reload_templates] needs to be set explicitly
72
+ * Marked Kernel#track_dependency as @api private - updated specs to reflect this
73
+ * Added warning when specs are run without memcached being available
74
+ * Refactored Kernel#dependency and #load_dependency to work with Gem::Dependency
75
+ * Include request uri in routing exception raised by request helpers.
76
+ * Added require 'thread' explicitly for Mutex to be available
77
+ * Revert "Initial support for fast redeploys and code reloading via forks."
78
+ * Revert "Split out the code transaction into a method and do some experimentation with cluster forking."
79
+ * Revert "Better exit message"
80
+ * Revert "Initial experiments are a success. TODO: Move the logic out of mongrel and make a proper clustering instead of hardcoding to 4"
81
+ * Fixes issue people were having
82
+ * Initial experiments are a success. TODO: Move the logic out of mongrel and make a proper clustering instead of hardcoding to 4
83
+ * Split out the code transaction into a method and do some experimentation with cluster forking.
84
+ * Better exit message
85
+ * Initial support for fast redeploys and code reloading via forks.
86
+ * Fixed that YAML plugin configuratator wasn't requiring YAML.
87
+ * Reindent core_ext/kernel.rb.
88
+ * Register dependencies even after the BootLoader has finished
89
+ * Fixes Merb::Request#protocol to remove the ://. May Break things in apps if you're checking protocol directly.
90
+ * Moves actual url generation methods onto the request object from the controller.
91
+ Also updates the Merb::Request#redirect method to be usable just like the controller version.
92
+ * Throw the correct error when generating a non existent route.
93
+ * Modify throw_content to not append. Add append_content for that purpose.
94
+ * Significant router refactoring and feature development
95
+ * Run specs in groups
96
+ * Added more discriptive message when a class fails to load
97
+ * Optimized Merb::Request.query_parse - fixed silly spec
98
+ * Update Rack application spec to reflect current affairs.
99
+ * Document template_for.
100
+ * Make merb fast again. Also make rake install work from any Ruby via -S
101
+ * ControllerMixin#html_escape => #escape_html (bring it in line with #escape_xml).
102
+ * Protected makes no sense for class methods.
103
+ * Remove dead code from responder.
104
+ * Adds abstract! and abstract? for controller classes for your inheritance pleasure
105
+ * Server#add_irb_trap should play nice with ruby-debugger.
106
+ * Reworked the Server#add_irb_trap to suppress the warnings.
107
+ * added flag for an IRB trap
108
+ * Add links to nginx_send_file examples: gist and app at GitHub.
109
+ * Untabify fixture controller for streaming.
110
+ * Make Merb::Controller#nginx_send_file more user friendly.
111
+ * More fine-grained check to see if a local ./bin executable should have been used
112
+ * Ignore products RDoc generates.
113
+ * Include RDoc in the gem.
114
+ * Ignore RDoc template cache.
115
+ * Remove RDoc template cache from version control.
116
+ * Session cookies now expire at the end of a browser session again (instead of 2 weeks)
117
+ * Second attempt: fixed load_dependency (hopefully)
118
+ * Fixed failing spec regarding 'dependency' change
119
+ * Make flat! more useful
120
+ * This rescue is obsolete and is obscuring useful failing information, as well as loading
121
+ from the system even when you require a specific version that isn't available in the bundled gems.
122
+ * Clean before installation. Remove *.so and *.log under spec.
123
+ * Make gem 3 times lighter.
124
+ * Merb::Release is gone.
125
+ * Bump up version
126
+ * Set @_content_type before running transform blocks
127
+ * sneaky merge failure piece that shouldn't be here
128
+ * Revert "Add specs for action-level only_provides"
129
+ * Revert "add specs for does_not_provide"
130
+ * add specs for does_not_provide
131
+ * Add specs for action-level only_provides
132
+ * Make controller.route work
133
+
134
+
135
+ == 0.9.7 "Universe In A Bundle" 2008-13-09
2
136
 
3
137
  * Made the post body available to the routing when testing a request.
4
138
  * Better local gems dir detection and end-user feedback
@@ -30,7 +164,7 @@
30
164
  * Meaninful message when have_xpath matcher is used but libxml-ruby fails to load.
31
165
  * Don't blow up when there are no system paths.
32
166
 
33
- == 0.9.6 "Therapy session" 2008-09-08
167
+ == 0.9.6 "Therapy session" 2008-08-09
34
168
 
35
169
  * Merge in simple conditional get support at controller level.
36
170
  * Merged in new bundling (aka freezer) branch
data/CONTRIBUTORS CHANGED
@@ -22,10 +22,12 @@ Daniel Siemssen
22
22
  David James
23
23
  Diego Scataglini
24
24
  Dirkjan Bussink
25
+ Drew Colthorp
25
26
  Dudley Flanders
26
27
  Ezra Zygmuntowicz
27
28
  Fabien Franzen
28
29
  Flea
30
+ Foy Savas
29
31
  Gabe
30
32
  Geoffrey Grosenbach
31
33
  Goh Toh Chye
@@ -57,6 +59,7 @@ Max Lapshin
57
59
  Michael D'Auria
58
60
  Michael D. Ivey
59
61
  Michael Holub
62
+ Michael Klishin
60
63
  Michael Latta
61
64
  Michael S. Klishin
62
65
  Michael Sheakoski
@@ -77,6 +80,8 @@ StarTrader
77
80
  Steve Tooke
78
81
  Thomas Reynolds
79
82
  Tim Kofol
83
+ Tyler Hunt
84
+ Tymon (teamon) Tobolski
80
85
  Wayne E. Seguin
81
86
  Wayne Larsen
82
87
  Wesley Beary
@@ -90,5 +95,6 @@ jonas
90
95
  jonuts
91
96
  macournoyer
92
97
  mde
98
+ michael.s.klishin@gmail.com
93
99
  rick
94
100
  wvl
data/PUBLIC_CHANGELOG CHANGED
@@ -1,3 +1,41 @@
1
+ 10/06/2008:
2
+
3
+ * Use -L option or :log_file or :log_stream in init.rb or env init file
4
+ to point logger where you want.
5
+
6
+ 10/05/2008:
7
+ * Merb does not add spec tasks to Rakefiles list by default. Add
8
+ require "merb-core/test/tasks/spectasks" in your existing Rakefiles
9
+ explicitly. This is done so that test unit users do not get spec
10
+ tasks they do not need down their throat in any merb application,
11
+ even running on just -core.
12
+
13
+ * Dictionary and inflection code are now parts of Extlib library and shared
14
+ with other frameworks that use it (DataMapper, Halcyon, Mack, etc).
15
+
16
+ 9/26/2008:
17
+ * For Merb developers, Rakefile features a new implementation of the :install
18
+ and :uninstall tasks. These will work with Gems directly, without running
19
+ the intermediate commands on the shell. This means 'sudo' is now explicitly
20
+ needed when installing gems system-wide; implicit sudo (prompt) is considered
21
+ harmful. The new code will write appropriate executable wrappers that feature
22
+ local gem loading and minigems usage. All gems in -more and -core now use this
23
+ new (un)install procedure.
24
+
25
+ 9/25/2008:
26
+ * Merb::Config[:reload_templates] needs to be set explicitly in
27
+ config/environments/development.rb - which is true for newly generated apps.
28
+ Previously Merb.env?(:development) meant that reload_templates was enabled.
29
+ Since we don't want to depend on Merb.env like that, we're using Merb::Config.
30
+
31
+ 9/24/2008:
32
+ * Kernel#dependency and Kernel#load_dependency will now register the requested
33
+ dependency on Merb::BootLoader::Dependencies.dependencies. Doing so creates a
34
+ Gem::Dependency instance, which will be returned from these methods.
35
+ Before, an Array of [name, ver] was returned. Working with Gem::Dependency
36
+ makes the dependency information more uniform, regardless of the original
37
+ version requirements.
38
+
1
39
  9/13/2008:
2
40
  * Merb apps will always give priority to gems that are available locally in
3
41
  Merb.root / gems. Because of the specific load order, you will need to use
data/Rakefile CHANGED
@@ -17,7 +17,6 @@ require __DIR__ + "/tools/annotation_extract"
17
17
  include FileUtils
18
18
 
19
19
  require "lib/merb-core/version"
20
- require "lib/merb-core/test/run_specs"
21
20
  require 'lib/merb-core/tasks/merb_rake_helper'
22
21
 
23
22
  ##############################################################################
@@ -51,14 +50,14 @@ spec = Gem::Specification.new do |s|
51
50
  s.description = PROJECT_DESCRIPTION
52
51
  s.executables = %w( merb )
53
52
  s.require_path = "lib"
54
- s.files = %w( LICENSE README Rakefile TODO CHANGELOG PUBLIC_CHANGELOG CONTRIBUTORS ) + Dir["{docs,bin,spec,lib}/**/*"]
53
+ s.files = %w( LICENSE README Rakefile TODO CHANGELOG PUBLIC_CHANGELOG CONTRIBUTORS ) + Dir["{doc/rdoc,bin,lib}/**/*"]
55
54
 
56
55
  # rdoc
57
56
  s.has_rdoc = true
58
57
  s.extra_rdoc_files = %w( README LICENSE TODO )
59
58
 
60
59
  # Dependencies
61
- s.add_dependency "extlib", ">= 0.9.6"
60
+ s.add_dependency "extlib", ">= 0.9.7"
62
61
  s.add_dependency "erubis"
63
62
  s.add_dependency "rake"
64
63
  s.add_dependency "json_pure"
@@ -81,31 +80,28 @@ Rake::GemPackageTask.new(spec) do |package|
81
80
  end
82
81
 
83
82
  desc "Run :package and install the resulting .gem"
84
- task :install => :package do
85
- sh install_command(GEM_NAME, GEM_VERSION)
83
+ task :install => :clean do
84
+ Merb::RakeHelper.install(GEM_NAME, :version => GEM_VERSION)
86
85
  end
87
86
 
88
87
  desc "Install Merb with development dependencies"
89
- task :dev_install => :package do
90
- sh dev_install_command(GEM_NAME, GEM_VERSION)
91
- end
92
-
93
- desc "Run :package and install the resulting .gem with jruby"
94
- task :jinstall => :package do
95
- sh jinstall_command(GEM_NAME, GEM_VERSION)
96
- end
97
-
98
- desc "Run :package and install the resulting .gem with jruby (development dependencies)"
99
- task :jinstall => :package do
100
- sh dev_jinstall_command(GEM_NAME, GEM_VERSION)
88
+ task :dev_install => :clean do
89
+ Merb::RakeHelper.install(GEM_NAME, :version => GEM_VERSION, :development => true)
101
90
  end
102
91
 
103
92
  desc "Run :clean and uninstall the .gem"
104
93
  task :uninstall => :clean do
105
- sh uninstall_command(GEM_NAME)
94
+ Merb::RakeHelper.uninstall(GEM_NAME, :version => GEM_VERSION)
95
+ end
96
+
97
+ desc "Create a gemspec file"
98
+ task :gemspec do
99
+ File.open("#{GEM_NAME}.gemspec", "w") do |file|
100
+ file.puts spec.to_ruby
101
+ end
106
102
  end
107
103
 
108
- CLEAN.include ["**/.*.sw?", "pkg", "lib/*.bundle", "*.gem", "doc/rdoc", ".config", "coverage", "cache"]
104
+ CLEAN.include ["**/.*.sw?", "pkg", "lib/*.bundle", "lib/*.so", "*.gem", "doc/rdoc", ".config", "coverage", "cache", "spec/**/*.log"]
109
105
 
110
106
  desc "Run the specs."
111
107
  task :default => :specs
@@ -172,7 +168,7 @@ namespace :doc do
172
168
 
173
169
  desc "rdoc to rubyforge"
174
170
  task :rubyforge do
175
- sh %{#{sudo} chmod -R 755 doc} unless windows?
171
+ sh %{#{Merb::RakeHelper.sudo} chmod -R 755 doc} unless Merb::RakeHelper.windows?
176
172
  sh %{/usr/bin/scp -r -p doc/rdoc/* ezmobius@rubyforge.org:/var/www/gforge-projects/merb}
177
173
  end
178
174
 
@@ -185,36 +181,48 @@ desc "Run :specs, :rcov"
185
181
  task :aok => [:specs, :rcov]
186
182
 
187
183
  def setup_specs(name, spec_cmd='spec', run_opts = "-c")
184
+ except = []
185
+ except += Dir["spec/**/memcache*_spec.rb"] if ENV['MEMCACHED'] == 'no'
186
+
187
+ public_globs = Dir["#{Dir.pwd}/spec/public/**/*_spec.rb"]
188
+
189
+ private_globs = Dir["#{Dir.pwd}/spec/private/**/*_spec.rb"]
190
+
188
191
  desc "Run all specs (#{name})"
189
192
  task "specs:#{name}" do
190
- except = []
191
- except += Dir["spec/**/memcache*_spec.rb"] if ENV['MEMCACHED'] == 'no'
192
- run_specs("spec/**/*_spec.rb", spec_cmd, ENV['RSPEC_OPTS'] || run_opts, except)
193
+ require "lib/merb-core/test/run_specs"
194
+ globs = public_globs + private_globs
195
+ run_specs(globs, spec_cmd, ENV['RSPEC_OPTS'] || run_opts, except)
193
196
  end
194
197
 
195
198
  desc "Run private specs (#{name})"
196
199
  task "specs:#{name}:private" do
197
- run_specs("spec/private/**/*_spec.rb", spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
200
+ require "lib/merb-core/test/run_specs"
201
+ run_specs(private_globs, spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
198
202
  end
199
203
 
200
204
  desc "Run public specs (#{name})"
201
205
  task "specs:#{name}:public" do
202
- run_specs("spec/public/**/*_spec.rb", spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
206
+ require "lib/merb-core/test/run_specs"
207
+ run_specs(public_globs, spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
203
208
  end
204
209
 
205
210
  # With profiling formatter
206
211
  desc "Run all specs (#{name}) with profiling formatter"
207
212
  task "specs:#{name}_profiled" do
213
+ require "lib/merb-core/test/run_specs"
208
214
  run_specs("spec/**/*_spec.rb", spec_cmd, "-c -f o")
209
215
  end
210
216
 
211
217
  desc "Run private specs (#{name}) with profiling formatter"
212
218
  task "specs:#{name}_profiled:private" do
219
+ require "lib/merb-core/test/run_specs"
213
220
  run_specs("spec/private/**/*_spec.rb", spec_cmd, "-c -f o")
214
221
  end
215
222
 
216
223
  desc "Run public specs (#{name}) with profiling formatter"
217
224
  task "specs:#{name}_profiled:public" do
225
+ require "lib/merb-core/test/run_specs"
218
226
  run_specs("spec/public/**/*_spec.rb", spec_cmd, "-c -f o")
219
227
  end
220
228
  end
@@ -222,9 +230,9 @@ end
222
230
  setup_specs("mri", "spec")
223
231
  setup_specs("jruby", "jruby -S spec")
224
232
 
225
- task "specs" => ["dev_install", "specs:mri"]
226
- task "specs:private" => ["dev_install", "specs:mri:private"]
227
- task "specs:public" => ["dev_install", "specs:mri:public"]
233
+ task "specs" => ["specs:mri"]
234
+ task "specs:private" => ["specs:mri:private"]
235
+ task "specs:public" => ["specs:mri:public"]
228
236
 
229
237
  desc "Run coverage suite"
230
238
  task :rcov do
@@ -281,7 +289,7 @@ task :check_syntax do
281
289
  end
282
290
 
283
291
  ##############################################################################
284
- # SVN
292
+ # Git and SVN
285
293
  ##############################################################################
286
294
  namespace :repo do
287
295
 
@@ -328,7 +336,7 @@ def contributors(since_release = nil)
328
336
  git_log(since_release).split("\n").uniq.sort
329
337
  end
330
338
 
331
- PREVIOUS_RELEASE = '0.9.5'
339
+ PREVIOUS_RELEASE = '0.9.7'
332
340
  namespace :history do
333
341
  namespace :update do
334
342
  desc "updates contributors list"
data/lib/merb-core.rb CHANGED
@@ -7,20 +7,22 @@ require 'rubygems'
7
7
  root_key = %w[-m --merb-root].detect { |o| ARGV.index(o) }
8
8
  root = ARGV[ARGV.index(root_key) + 1] if root_key
9
9
  root = root.to_a.empty? ? Dir.getwd : root
10
- if File.directory?(gems_dir = File.join(root, 'gems'))
10
+ if File.directory?(gems_dir = File.join(root, 'gems')) && !$BUNDLE
11
11
  $BUNDLE = true; Gem.clear_paths; Gem.path.unshift(gems_dir)
12
12
  # Warn if local merb-core is available but not loaded.
13
- if !($0 =~ /^(\.\/)?bin\/merb$/) &&
13
+ if File.expand_path($0).index(root) != 0 &&
14
14
  (local_mc = Dir[File.join(gems_dir, 'specifications', 'merb-core-*.gemspec')].last)
15
- puts "Warning: please use bin/merb to load #{File.basename(local_mc, '.gemspec')} from ./gems"
15
+ puts "Warning: please use bin/#{File.basename($0)} to load #{File.basename(local_mc, '.gemspec')} from ./gems"
16
16
  end
17
17
  end
18
18
 
19
+ require 'thread'
19
20
  require 'set'
20
21
  require 'fileutils'
21
22
  require 'socket'
22
23
  require 'pathname'
23
24
  require "extlib"
25
+ require "extlib/dictionary"
24
26
 
25
27
  __DIR__ = File.dirname(__FILE__)
26
28
 
@@ -28,13 +30,12 @@ $LOAD_PATH.unshift __DIR__ unless
28
30
  $LOAD_PATH.include?(__DIR__) ||
29
31
  $LOAD_PATH.include?(File.expand_path(__DIR__))
30
32
 
31
- require 'merb-core' / 'vendor' / 'facets'
32
-
33
33
  module Merb
34
34
  # Create stub module for global controller helpers.
35
35
  module GlobalHelpers; end
36
36
 
37
37
  class << self
38
+ attr_accessor :exiting
38
39
 
39
40
  # Merge environment settings
40
41
  # Can allow you to have a "localdev" that runs like your "development"
@@ -84,7 +85,6 @@ module Merb
84
85
  end
85
86
  end
86
87
 
87
-
88
88
  # Startup Merb by setting up the Config and starting the server.
89
89
  # This is where Merb application environment and root path are set.
90
90
  #
@@ -92,18 +92,24 @@ module Merb
92
92
  # argv<String, Hash>::
93
93
  # The config arguments to start Merb with. Defaults to +ARGV+.
94
94
  def start(argv=ARGV)
95
+ # Hardcode the log stream to STDOUT
96
+ Merb::Config[:log_stream] = STDOUT
95
97
  if Hash === argv
96
98
  Merb::Config.setup(argv)
97
99
  else
98
100
  Merb::Config.parse_args(argv)
99
101
  end
102
+ Merb::Config[:log_stream] = STDOUT
103
+
100
104
  Merb.environment = Merb::Config[:environment]
101
105
  Merb.root = Merb::Config[:merb_root]
102
106
  case Merb::Config[:action]
103
107
  when :kill
104
- Merb::Server.kill(Merb::Config[:port], 1)
108
+ Merb::Server.kill(Merb::Config[:port], 2)
105
109
  when :kill_9
106
110
  Merb::Server.kill(Merb::Config[:port], 9)
111
+ when :fast_deploy
112
+ Merb::Server.kill("main", "HUP")
107
113
  else
108
114
  Merb::Server.start(Merb::Config[:port], Merb::Config[:cluster])
109
115
  end
@@ -262,21 +268,43 @@ module Merb
262
268
  end
263
269
 
264
270
  # Logger settings
265
- attr_accessor :logger
271
+ def logger
272
+ Thread.current[:merb_logger] ||= Merb::Logger.new
273
+ end
274
+
275
+ def logger=(obj)
276
+ unless obj
277
+ Thread.current[:merb_logger] = nil
278
+ end
279
+ end
266
280
 
267
281
  # ==== Returns
268
282
  # String::
269
283
  # The path to the log file. If this Merb instance is running as a daemon
270
284
  # this will return +STDOUT+.
271
- def log_file
272
- if Merb::Config[:log_file]
273
- Merb::Config[:log_file]
274
- elsif Merb.testing?
275
- log_path / "merb_test.log"
276
- elsif !(Merb::Config[:daemonize] || Merb::Config[:cluster])
277
- STDOUT
278
- else
279
- log_path / "merb.#{Merb::Config[:port]}.log"
285
+ def log_stream(port = "main")
286
+ @streams ||= {}
287
+ @streams[port] ||= begin
288
+ log = if Merb.testing?
289
+ log_path / "merb_test.log"
290
+ elsif !Merb::Config[:daemonize] && !Merb::Config[:force_logging]
291
+ STDOUT
292
+ else
293
+ log_path / "merb.#{port}.log"
294
+ end
295
+
296
+ if log.is_a?(IO)
297
+ stream = log
298
+ elsif File.exist?(log)
299
+ stream = File.open(log, (File::WRONLY | File::APPEND))
300
+ else
301
+ FileUtils.mkdir_p(File.dirname(log))
302
+ stream = File.open(log, (File::WRONLY | File::APPEND | File::CREAT))
303
+ stream.write("#{Time.now.httpdate} #{Merb::Config[:log_delimiter]} " \
304
+ "info #{Merb::Config[:log_delimiter]} Logfile created\n")
305
+ end
306
+ stream.sync = true
307
+ stream
280
308
  end
281
309
  end
282
310
 
@@ -321,13 +349,41 @@ module Merb
321
349
  # r<Merb::Router::Behavior>::
322
350
  # The root behavior upon which new routes can be added.
323
351
  def flat!(framework = {})
324
- Merb::Config[:framework] = framework
352
+ default = {
353
+ :framework => { :public => [Merb.root / "public", nil] },
354
+ :session_store => 'none',
355
+ :exception_details => true
356
+ }
357
+
358
+ Merb::Config[:framework] = default.merge(framework)
325
359
 
326
360
  Merb::Router.prepare do |r|
327
361
  yield(r) if block_given?
328
362
  r.default_routes
329
363
  end
330
364
  end
365
+
366
+ def fatal!(str, e = nil)
367
+ Merb.logger.fatal!
368
+ Merb.logger.fatal!("\e[1;31;47mFATAL: #{str}\e[0m")
369
+ Merb.logger.fatal!
370
+
371
+ print_colorized_backtrace(e) if e && Merb::Config[:verbose]
372
+ exit(1)
373
+ end
374
+
375
+ def print_colorized_backtrace(e)
376
+ e.backtrace.map! do |line|
377
+ line.gsub!(/^#{Merb.framework_root}/, "\e[34mFRAMEWORK_ROOT\e[31m")
378
+ end
379
+
380
+ Merb.logger.fatal! "\e[34mFRAMEWORK_ROOT\e[0m = #{Merb.framework_root}"
381
+ Merb.logger.fatal!
382
+ Merb.logger.fatal! "\e[31m#{e.class}: \e[1;31;47m#{e.message}\e[0m"
383
+ e.backtrace.each do |line|
384
+ Merb.logger.fatal! "\e[31m#{line}\e[0m"
385
+ end
386
+ end
331
387
 
332
388
  # Set up default variables under Merb
333
389
  attr_accessor :klass_hashes, :orm, :test_framework, :template_engine
@@ -468,7 +524,7 @@ module Merb
468
524
  # Boolean:: True if Merb environment is testing for instance,
469
525
  # Merb is running with RSpec, Test::Unit of other testing facility.
470
526
  def testing?
471
- $TESTING || Merb::Config[:testing]
527
+ $TESTING ||= env?(:test) || Merb::Config[:testing]
472
528
  end
473
529
 
474
530
  # Ask the question about which environment you're in.
@@ -544,7 +600,7 @@ module Merb
544
600
  # Recommended way to find out what paths Rakefiles
545
601
  # are loaded from.
546
602
  def rakefiles
547
- @rakefiles ||= ['merb-core/test/tasks/spectasks']
603
+ @rakefiles ||= []
548
604
  end
549
605
 
550
606
  # === Returns
@@ -558,12 +614,12 @@ module Merb
558
614
  end
559
615
 
560
616
  # ==== Parameters
561
- # *rakefiles:: Rakefile pathss to add to the list of Rakefiles.
617
+ # *rakefiles:: Rakefile paths to add to the list of Rakefiles.
562
618
  #
563
619
  # ==== Notes
564
620
  # Recommended way to add Rakefiles load path for plugins authors.
565
621
  def add_rakefiles(*rakefiles)
566
- @rakefiles ||= ['merb-core/test/tasks/spectasks']
622
+ @rakefiles ||= []
567
623
  @rakefiles += rakefiles
568
624
  end
569
625
 
@@ -577,6 +633,15 @@ module Merb
577
633
  @generators += generators
578
634
  end
579
635
 
636
+ # Install a signal handler for a given signal unless signals have
637
+ # been disabled with Merb.disable(:signals)
638
+ # ==== Parameters
639
+ # signal:: The name of the signal to install a handler for.
640
+ # &block:: The block to be run when the given signal is received.
641
+ def trap(signal, &block)
642
+ Kernel.trap(signal, &block) unless Merb.disabled?(:signals)
643
+ end
644
+
580
645
  end
581
646
  end
582
647
 
@@ -588,4 +653,4 @@ require 'merb-core/version'
588
653
  require 'merb-core/controller/mime'
589
654
 
590
655
  # Set the environment if it hasn't already been set.
591
- Merb.environment ||= ENV['MERB_ENV'] || Merb::Config[:environment] || (Merb.testing? ? 'test' : 'development')
656
+ Merb.environment ||= ENV['MERB_ENV'] || Merb::Config[:environment] || (Merb.testing? ? 'test' : 'development')