thorero 0.9.4.4 → 0.9.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (298) hide show
  1. data/LICENSE +1 -1
  2. data/README +21 -0
  3. data/Rakefile +275 -108
  4. data/TODO +0 -0
  5. data/bin/merb +12 -0
  6. data/bin/merb-specs +5 -0
  7. data/docs/bootloading.dox +58 -0
  8. data/docs/documentation_standards +40 -0
  9. data/docs/merb-core-call-stack-diagram.mmap +0 -0
  10. data/docs/merb-core-call-stack-diagram.pdf +0 -0
  11. data/docs/merb-core-call-stack-diagram.png +0 -0
  12. data/docs/new_render_api +51 -0
  13. data/lib/merb-core.rb +603 -0
  14. data/lib/merb-core/autoload.rb +32 -0
  15. data/lib/merb-core/bootloader.rb +708 -0
  16. data/lib/merb-core/config.rb +303 -0
  17. data/lib/merb-core/constants.rb +43 -0
  18. data/lib/merb-core/controller/abstract_controller.rb +578 -0
  19. data/lib/merb-core/controller/exceptions.rb +302 -0
  20. data/lib/merb-core/controller/merb_controller.rb +256 -0
  21. data/lib/merb-core/controller/mime.rb +106 -0
  22. data/lib/merb-core/controller/mixins/authentication.rb +87 -0
  23. data/lib/merb-core/controller/mixins/controller.rb +290 -0
  24. data/lib/merb-core/controller/mixins/render.rb +481 -0
  25. data/lib/merb-core/controller/mixins/responder.rb +472 -0
  26. data/lib/merb-core/controller/template.rb +254 -0
  27. data/lib/merb-core/core_ext.rb +8 -0
  28. data/lib/merb-core/core_ext/kernel.rb +319 -0
  29. data/lib/merb-core/dispatch/cookies.rb +91 -0
  30. data/lib/merb-core/dispatch/dispatcher.rb +278 -0
  31. data/lib/merb-core/dispatch/exceptions.html.erb +303 -0
  32. data/lib/merb-core/dispatch/request.rb +603 -0
  33. data/lib/merb-core/dispatch/router.rb +179 -0
  34. data/lib/merb-core/dispatch/router/behavior.rb +867 -0
  35. data/lib/merb-core/dispatch/router/cached_proc.rb +52 -0
  36. data/lib/merb-core/dispatch/router/route.rb +321 -0
  37. data/lib/merb-core/dispatch/session.rb +78 -0
  38. data/lib/merb-core/dispatch/session/cookie.rb +168 -0
  39. data/lib/merb-core/dispatch/session/memcached.rb +184 -0
  40. data/lib/merb-core/dispatch/session/memory.rb +241 -0
  41. data/lib/merb-core/dispatch/worker.rb +28 -0
  42. data/lib/merb-core/gem_ext/erubis.rb +77 -0
  43. data/lib/{extlib → merb-core}/logger.rb +2 -2
  44. data/lib/merb-core/plugins.rb +59 -0
  45. data/lib/merb-core/rack.rb +21 -0
  46. data/lib/merb-core/rack/adapter.rb +44 -0
  47. data/lib/merb-core/rack/adapter/ebb.rb +25 -0
  48. data/lib/merb-core/rack/adapter/evented_mongrel.rb +26 -0
  49. data/lib/merb-core/rack/adapter/fcgi.rb +17 -0
  50. data/lib/merb-core/rack/adapter/irb.rb +118 -0
  51. data/lib/merb-core/rack/adapter/mongrel.rb +26 -0
  52. data/lib/merb-core/rack/adapter/runner.rb +28 -0
  53. data/lib/merb-core/rack/adapter/swiftiplied_mongrel.rb +26 -0
  54. data/lib/merb-core/rack/adapter/thin.rb +39 -0
  55. data/lib/merb-core/rack/adapter/thin_turbo.rb +24 -0
  56. data/lib/merb-core/rack/adapter/webrick.rb +36 -0
  57. data/lib/merb-core/rack/application.rb +18 -0
  58. data/lib/merb-core/rack/handler/mongrel.rb +97 -0
  59. data/lib/merb-core/rack/middleware.rb +26 -0
  60. data/lib/merb-core/rack/middleware/path_prefix.rb +31 -0
  61. data/lib/merb-core/rack/middleware/profiler.rb +19 -0
  62. data/lib/merb-core/rack/middleware/static.rb +45 -0
  63. data/lib/merb-core/server.rb +252 -0
  64. data/lib/merb-core/tasks/audit.rake +68 -0
  65. data/lib/merb-core/tasks/merb.rb +1 -0
  66. data/lib/merb-core/tasks/merb_rake_helper.rb +12 -0
  67. data/lib/merb-core/test.rb +11 -0
  68. data/lib/merb-core/test/helpers.rb +9 -0
  69. data/lib/merb-core/test/helpers/controller_helper.rb +8 -0
  70. data/lib/merb-core/test/helpers/multipart_request_helper.rb +175 -0
  71. data/lib/merb-core/test/helpers/request_helper.rb +344 -0
  72. data/lib/merb-core/test/helpers/route_helper.rb +33 -0
  73. data/lib/merb-core/test/helpers/view_helper.rb +121 -0
  74. data/lib/merb-core/test/matchers.rb +9 -0
  75. data/lib/merb-core/test/matchers/controller_matchers.rb +319 -0
  76. data/lib/merb-core/test/matchers/route_matchers.rb +136 -0
  77. data/lib/merb-core/test/matchers/view_matchers.rb +335 -0
  78. data/lib/merb-core/test/run_specs.rb +47 -0
  79. data/lib/merb-core/test/tasks/spectasks.rb +68 -0
  80. data/lib/merb-core/test/test_ext/hpricot.rb +32 -0
  81. data/lib/merb-core/test/test_ext/object.rb +14 -0
  82. data/lib/merb-core/test/test_ext/string.rb +14 -0
  83. data/lib/merb-core/vendor/facets.rb +2 -0
  84. data/lib/merb-core/vendor/facets/dictionary.rb +433 -0
  85. data/lib/merb-core/vendor/facets/inflect.rb +345 -0
  86. data/lib/merb-core/version.rb +11 -0
  87. data/spec/private/config/adapter_spec.rb +32 -0
  88. data/spec/private/config/config_spec.rb +202 -0
  89. data/spec/private/config/environment_spec.rb +13 -0
  90. data/spec/private/config/spec_helper.rb +1 -0
  91. data/spec/private/core_ext/kernel_spec.rb +169 -0
  92. data/spec/private/dispatch/bootloader_spec.rb +24 -0
  93. data/spec/private/dispatch/cookies_spec.rb +107 -0
  94. data/spec/private/dispatch/dispatch_spec.rb +35 -0
  95. data/spec/private/dispatch/fixture/app/controllers/application.rb +4 -0
  96. data/spec/private/dispatch/fixture/app/controllers/exceptions.rb +27 -0
  97. data/spec/private/dispatch/fixture/app/controllers/foo.rb +21 -0
  98. data/spec/private/dispatch/fixture/app/helpers/global_helpers.rb +8 -0
  99. data/spec/private/dispatch/fixture/app/views/exeptions/client_error.html.erb +37 -0
  100. data/spec/private/dispatch/fixture/app/views/exeptions/internal_server_error.html.erb +216 -0
  101. data/spec/private/dispatch/fixture/app/views/exeptions/not_acceptable.html.erb +38 -0
  102. data/spec/private/dispatch/fixture/app/views/exeptions/not_found.html.erb +40 -0
  103. data/spec/private/dispatch/fixture/app/views/foo/bar.html.erb +0 -0
  104. data/spec/private/dispatch/fixture/app/views/layout/application.html.erb +11 -0
  105. data/spec/private/dispatch/fixture/config/black_hole.rb +12 -0
  106. data/spec/private/dispatch/fixture/config/environments/development.rb +6 -0
  107. data/spec/private/dispatch/fixture/config/environments/production.rb +5 -0
  108. data/spec/private/dispatch/fixture/config/environments/test.rb +6 -0
  109. data/spec/private/dispatch/fixture/config/init.rb +45 -0
  110. data/spec/private/dispatch/fixture/config/rack.rb +11 -0
  111. data/spec/private/dispatch/fixture/config/router.rb +35 -0
  112. data/spec/private/dispatch/fixture/log/merb_test.log +1874 -0
  113. data/spec/private/dispatch/fixture/public/images/merb.jpg +0 -0
  114. data/spec/private/dispatch/fixture/public/merb.fcgi +4 -0
  115. data/spec/private/dispatch/fixture/public/stylesheets/master.css +119 -0
  116. data/spec/private/dispatch/route_params_spec.rb +24 -0
  117. data/spec/private/dispatch/session_mixin_spec.rb +47 -0
  118. data/spec/private/dispatch/spec_helper.rb +1 -0
  119. data/spec/private/plugins/plugin_spec.rb +166 -0
  120. data/spec/private/rack/application_spec.rb +49 -0
  121. data/spec/private/router/behavior_spec.rb +60 -0
  122. data/spec/private/router/fixture/log/merb_test.log +139 -0
  123. data/spec/private/router/route_spec.rb +414 -0
  124. data/spec/private/router/router_spec.rb +175 -0
  125. data/spec/private/vendor/facets/plural_spec.rb +564 -0
  126. data/spec/private/vendor/facets/singular_spec.rb +489 -0
  127. data/spec/public/DEFINITIONS +11 -0
  128. data/spec/public/abstract_controller/controllers/alt_views/layout/application.erb +1 -0
  129. data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb +1 -0
  130. data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb +1 -0
  131. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb +1 -0
  132. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb +1 -0
  133. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
  134. data/spec/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb +1 -0
  135. data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb +1 -0
  136. data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb +1 -0
  137. data/spec/public/abstract_controller/controllers/cousins.rb +41 -0
  138. data/spec/public/abstract_controller/controllers/display.rb +54 -0
  139. data/spec/public/abstract_controller/controllers/filters.rb +193 -0
  140. data/spec/public/abstract_controller/controllers/helpers.rb +41 -0
  141. data/spec/public/abstract_controller/controllers/partial.rb +121 -0
  142. data/spec/public/abstract_controller/controllers/render.rb +113 -0
  143. data/spec/public/abstract_controller/controllers/views/helpers/capture/index.erb +1 -0
  144. data/spec/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb +1 -0
  145. data/spec/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb +1 -0
  146. data/spec/public/abstract_controller/controllers/views/helpers/concat/index.erb +1 -0
  147. data/spec/public/abstract_controller/controllers/views/layout/alt.erb +1 -0
  148. data/spec/public/abstract_controller/controllers/views/layout/custom.erb +1 -0
  149. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb +1 -0
  150. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb +1 -0
  151. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb +1 -0
  152. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_app_layout/index.erb +0 -0
  153. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb +1 -0
  154. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
  155. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb +1 -0
  156. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_throw_contents/index.erb +1 -0
  157. data/spec/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb +1 -0
  158. data/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb +1 -0
  159. data/spec/public/abstract_controller/controllers/views/partial/basic_partial/index.erb +1 -0
  160. data/spec/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb +1 -0
  161. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb +1 -0
  162. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb +1 -0
  163. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/index.erb +1 -0
  164. data/spec/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb +1 -0
  165. data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb +1 -0
  166. data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb +1 -0
  167. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb +1 -0
  168. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb +1 -0
  169. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb +1 -0
  170. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb +1 -0
  171. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb +1 -0
  172. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb +1 -0
  173. data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb +1 -0
  174. data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb +1 -0
  175. data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb +1 -0
  176. data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb +1 -0
  177. data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb +1 -0
  178. data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb +1 -0
  179. data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb +1 -0
  180. data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb +1 -0
  181. data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb +1 -0
  182. data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb +1 -0
  183. data/spec/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb +1 -0
  184. data/spec/public/abstract_controller/controllers/views/partial/with_partial/index.erb +1 -0
  185. data/spec/public/abstract_controller/controllers/views/test_display/foo.html.erb +1 -0
  186. data/spec/public/abstract_controller/controllers/views/test_render/foo.html.erb +0 -0
  187. data/spec/public/abstract_controller/controllers/views/wonderful/index.erb +1 -0
  188. data/spec/public/abstract_controller/display_spec.rb +33 -0
  189. data/spec/public/abstract_controller/filter_spec.rb +106 -0
  190. data/spec/public/abstract_controller/helper_spec.rb +21 -0
  191. data/spec/public/abstract_controller/partial_spec.rb +61 -0
  192. data/spec/public/abstract_controller/render_spec.rb +90 -0
  193. data/spec/public/abstract_controller/spec_helper.rb +31 -0
  194. data/spec/public/boot_loader/boot_loader_spec.rb +33 -0
  195. data/spec/public/boot_loader/spec_helper.rb +1 -0
  196. data/spec/public/controller/authentication_spec.rb +103 -0
  197. data/spec/public/controller/base_spec.rb +36 -0
  198. data/spec/public/controller/controllers/authentication.rb +45 -0
  199. data/spec/public/controller/controllers/base.rb +36 -0
  200. data/spec/public/controller/controllers/display.rb +118 -0
  201. data/spec/public/controller/controllers/redirect.rb +30 -0
  202. data/spec/public/controller/controllers/responder.rb +93 -0
  203. data/spec/public/controller/controllers/url.rb +7 -0
  204. data/spec/public/controller/controllers/views/layout/custom.html.erb +1 -0
  205. data/spec/public/controller/controllers/views/layout/custom_arg.html.erb +1 -0
  206. data/spec/public/controller/controllers/views/layout/custom_arg.json.erb +1 -0
  207. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb +1 -0
  208. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb +1 -0
  209. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb +1 -0
  210. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb +1 -0
  211. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb +1 -0
  212. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb +1 -0
  213. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb +1 -0
  214. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb +1 -0
  215. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb +1 -0
  216. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb +1 -0
  217. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb +1 -0
  218. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb +1 -0
  219. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb +1 -0
  220. data/spec/public/controller/display_spec.rb +84 -0
  221. data/spec/public/controller/redirect_spec.rb +27 -0
  222. data/spec/public/controller/responder_spec.rb +163 -0
  223. data/spec/public/controller/spec_helper.rb +11 -0
  224. data/spec/public/controller/url_spec.rb +180 -0
  225. data/spec/public/core/merb_core_spec.rb +45 -0
  226. data/spec/public/core_ext/class_spec.rb +91 -0
  227. data/spec/public/core_ext/fixtures/core_ext_dependency.rb +2 -0
  228. data/spec/public/core_ext/kernel_spec.rb +9 -0
  229. data/spec/public/core_ext/spec_helper.rb +1 -0
  230. data/spec/public/directory_structure/directory/app/controllers/application.rb +3 -0
  231. data/spec/public/directory_structure/directory/app/controllers/base.rb +13 -0
  232. data/spec/public/directory_structure/directory/app/controllers/custom.rb +19 -0
  233. data/spec/public/directory_structure/directory/app/views/base/template.html.erb +1 -0
  234. data/spec/public/directory_structure/directory/app/views/wonderful/template.erb +1 -0
  235. data/spec/public/directory_structure/directory/config/router.rb +3 -0
  236. data/spec/public/directory_structure/directory/log/merb_test.log +562 -0
  237. data/spec/public/directory_structure/directory_spec.rb +44 -0
  238. data/spec/public/logger/logger_spec.rb +181 -0
  239. data/spec/public/logger/spec_helper.rb +1 -0
  240. data/spec/public/reloading/directory/app/controllers/application.rb +3 -0
  241. data/spec/public/reloading/directory/app/controllers/reload.rb +6 -0
  242. data/spec/public/reloading/directory/config/init.rb +2 -0
  243. data/spec/public/reloading/directory/log/merb_test.log +138 -0
  244. data/spec/public/reloading/reload_spec.rb +103 -0
  245. data/spec/public/request/multipart_spec.rb +41 -0
  246. data/spec/public/request/request_spec.rb +228 -0
  247. data/spec/public/router/default_spec.rb +21 -0
  248. data/spec/public/router/deferred_spec.rb +22 -0
  249. data/spec/public/router/fixation_spec.rb +27 -0
  250. data/spec/public/router/fixture/log/merb_test.log +1556 -0
  251. data/spec/public/router/namespace_spec.rb +113 -0
  252. data/spec/public/router/nested_matches_spec.rb +97 -0
  253. data/spec/public/router/nested_resources_spec.rb +41 -0
  254. data/spec/public/router/resource_spec.rb +37 -0
  255. data/spec/public/router/resources_spec.rb +82 -0
  256. data/spec/public/router/spec_helper.rb +90 -0
  257. data/spec/public/router/special_spec.rb +61 -0
  258. data/spec/public/router/string_spec.rb +61 -0
  259. data/spec/public/template/template_spec.rb +104 -0
  260. data/spec/public/template/templates/error.html.erb +2 -0
  261. data/spec/public/template/templates/template.html.erb +1 -0
  262. data/spec/public/template/templates/template.html.myt +1 -0
  263. data/spec/public/test/controller_matchers_spec.rb +402 -0
  264. data/spec/public/test/controllers/controller_assertion_mock.rb +7 -0
  265. data/spec/public/test/controllers/dispatch_controller.rb +11 -0
  266. data/spec/public/test/controllers/spec_helper_controller.rb +38 -0
  267. data/spec/public/test/multipart_request_helper_spec.rb +159 -0
  268. data/spec/public/test/multipart_upload_text_file.txt +1 -0
  269. data/spec/public/test/request_helper_spec.rb +221 -0
  270. data/spec/public/test/route_helper_spec.rb +71 -0
  271. data/spec/public/test/route_matchers_spec.rb +162 -0
  272. data/spec/public/test/view_helper_spec.rb +96 -0
  273. data/spec/public/test/view_matchers_spec.rb +183 -0
  274. data/spec/spec_helper.rb +68 -0
  275. metadata +493 -41
  276. data/README.txt +0 -3
  277. data/lib/extlib.rb +0 -32
  278. data/lib/extlib/assertions.rb +0 -8
  279. data/lib/extlib/blank.rb +0 -42
  280. data/lib/extlib/class.rb +0 -175
  281. data/lib/extlib/hash.rb +0 -410
  282. data/lib/extlib/hook.rb +0 -366
  283. data/lib/extlib/inflection.rb +0 -141
  284. data/lib/extlib/lazy_array.rb +0 -106
  285. data/lib/extlib/mash.rb +0 -143
  286. data/lib/extlib/module.rb +0 -37
  287. data/lib/extlib/object.rb +0 -165
  288. data/lib/extlib/object_space.rb +0 -13
  289. data/lib/extlib/pathname.rb +0 -5
  290. data/lib/extlib/pooling.rb +0 -233
  291. data/lib/extlib/rubygems.rb +0 -38
  292. data/lib/extlib/simple_set.rb +0 -39
  293. data/lib/extlib/string.rb +0 -132
  294. data/lib/extlib/struct.rb +0 -8
  295. data/lib/extlib/tasks/release.rb +0 -9
  296. data/lib/extlib/time.rb +0 -12
  297. data/lib/extlib/version.rb +0 -3
  298. data/lib/extlib/virtual_file.rb +0 -10
data/TODO ADDED
File without changes
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ require "merb-core"
3
+
4
+ if ARGV[0] && ARGV[0] =~ /^[^-]/
5
+ ARGV.push "-H"
6
+ end
7
+
8
+ unless %w[-a --adapter -i --irb-console -r --script-runner].any? { |o| ARGV.index(o) }
9
+ ARGV.push *%w[-a mongrel]
10
+ end
11
+
12
+ Merb.start
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.join(File.dirname(__FILE__),"..","lib","merb-core","test","run_specs")
4
+
5
+ run_specs ARGV
@@ -0,0 +1,58 @@
1
+ The Merb boot process starts when you run the Merb binary, which calls `Merb.start`. Merb.start performs the
2
+ following tasks:
3
+
4
+ list.
5
+ * Loads merb.yml from the root directory or config directory and puts them in the Merb::Config hash
6
+ * Parses config arguments from the command-line and adds them to the Merb::Config hash
7
+ * Runs the BootLoaders (see below)
8
+ * Starts the Merb Rack adapter
9
+
10
+ The BootLoader is a configurable process, which, by default, runs the following processes:
11
+
12
+ deflist.
13
+ Environment: Sets the Merb environment based on any -e flag passed the merb binary
14
+ BuildFramework: Set the framework paths, which can either be set in the Merb::Config[:framework]
15
+ variable or defaults to the paths described below.
16
+ Dependencies: Load dependencies.rb, which should include any plugins that will be loaded, as well
17
+ as an after_app_loaded hook.
18
+ Logger: Set up the logger in the `Merb.dir_for(:log)` directory. In test mode, it will be called
19
+ `test_logger`. In other modes, it will be set to `merb.#{pid}.log`. The log level will default
20
+ to `info` but can be specified via the Merb::Config[:log_level] option.
21
+ LoadRouter: The router is loaded from `Merb.dir_for(:config)/router.rb`.
22
+ LoadClasses: Files in all of the load paths are `require`d, and classes added during the load of
23
+ each files are tracked so they can be removed later during the reloading process.
24
+ Templates: All templates under the `_template_root` of any loaded controllers, as well as all
25
+ templates under `Merb.dir_for(:view)` are registered as inlined templates.
26
+ MimeTypes: Register all MimeTypes (see below for defaults).
27
+ AfterAppLoads: Call any `after_app_loads` hooks that were registered in dependencies.rb
28
+ MixinSessionContainer: Register the session types and set the app to use one if
29
+ `Merb::Config[:session_type]` is set.
30
+ ChooseAdapter: Set `Merb.adapter` to be the adapter chosen via Merb::Config[:adapter] (which
31
+ can be specified via the `-a foo` command-line parameter).
32
+ RackUpApplication: Set up a default rack application. Alternatively, allow for additional configuration
33
+ in `Merb.dir_for(:config)/rack.rb`, which will be evaluated in the context of a Rack::Builder.new
34
+ block.
35
+ ReloadClasses: If Merb::Config[:reload_classes] is set, begin the process of reloading classes
36
+ every time a class is modified.
37
+
38
+ deflist: Default Framework Paths.
39
+ application: Merb.root/app/controller/application.rb
40
+ config: Merb.root/config
41
+ lib: Merb.root/lib
42
+ log: Merb.root/log
43
+ view: Merb.root/app/views
44
+ model: Merb.root/app/models
45
+ controller: Merb.root/app/controllers
46
+ helper: Merb.root/app/helpers
47
+ mailer: Merb.root/app/mailers
48
+ part: Merb.root/app/parts
49
+
50
+ deflist: MimeTypes.
51
+ \:all: no transform, */*
52
+ \:yaml: to_yaml, application/x-yaml or text/yaml
53
+ \:text: to_text, text/plain
54
+ \:html: to_html, text/html or application/xhtml+xml or application/html
55
+ \:xml: to_xml, application/xml or text/xml or application/x-xml, adds "Encoding: UTF-8" response header
56
+ \:js: to_json, text/javascript ot application/javascript or application/x-javascript
57
+ \:json: to_json, application/json or text/x-json
58
+
@@ -0,0 +1,40 @@
1
+ Every method should have documentation above the method definition that fits this basic model...
2
+
3
+ # Render the specified item, with the specified options.
4
+ #
5
+ # ==== Parameters
6
+ # thing<String, Symbol, nil>::
7
+ # The thing to render. This will default to the current action
8
+ # opts<Hash>:: An options hash (see below)
9
+ #
10
+ # ==== Options (opts)
11
+ # :format<Symbol>:: A registered mime-type format
12
+ # :template<String>::
13
+ # The path to the template relative to the template root
14
+ # :status<~to_i>::
15
+ # The status to send to the client. Typically, this would
16
+ # be an integer (200), or a Merb status code (Accepted)
17
+ # :layout<~to_s>::
18
+ # A layout to use instead of the default. This should be
19
+ # relative to the layout root. By default, the layout will
20
+ # be either the controller_name or application. If you
21
+ # want to use an alternative content-type than the one
22
+ # that the base template was rendered as, you will need
23
+ # to do :layout => “foo.#{content_type}” (i.e. “foo.json”)
24
+ #
25
+ # ==== Returns
26
+ # String:: The rendered template, including layout, if appropriate.
27
+ #
28
+ # ==== Raises
29
+ # TemplateNotFound::
30
+ # There is no template for the specified location.
31
+ #
32
+ # ==== Alternatives
33
+ # If you pass a Hash as the first parameter, it will be moved to
34
+ # opts and “thing” will be the current action
35
+ #
36
+ #—
37
+ # @public
38
+ def render(thing = nil, opts = {})
39
+ <snip>
40
+ end
@@ -0,0 +1,51 @@
1
+ ## TEMPLATES
2
+
3
+ # Render an action
4
+ render :symbol
5
+
6
+ # Render a string
7
+ render "string"
8
+
9
+ # Render an object; will call to_#{content-type} on this if the default template is not found
10
+ display @obj
11
+
12
+ # Provide an alternative default thing to render; note that we can use strings here for template paths
13
+ # because strings would never fail and fallback to the @obj
14
+ display @obj, :symbol
15
+ display @obj, "full/path/to/template"
16
+
17
+ # Render a template
18
+ render_template "full/path/to/template"
19
+
20
+ # Render with a mime-type (same as render, but with added mime-type set)
21
+ render_json :symbol
22
+ render_json "string"
23
+
24
+ # Render nothing at all
25
+ render_nothing
26
+
27
+ # TEMPLATE OPTIONS (all functions above can use these options)
28
+
29
+ # :format can be used to override the mime-type arrived at via content-negotiation
30
+ render :symbol, :format => :xml
31
+
32
+ # :status can set the status that will be returned to the browser
33
+ render :symbol, :status => Successful::Accepted
34
+ # or
35
+ render :symbol, :status => 202
36
+
37
+ # :layout sets the layout to use; default: controller.to_path || :application; :none means no layout
38
+ render :symbol, :layout => :none
39
+
40
+ ## PARTIALS
41
+
42
+ # Render a partial
43
+ partial :symbol
44
+
45
+ # Render a partial with an object (it will default to the local var "symbol" in the partial)
46
+ partial :symbol, :with => @object
47
+ partial :symbol, :with => @object, :as => "something"
48
+
49
+ # Render a partial with a collection of objects (same :as semantics)
50
+ partial :symbol, :with => [col, lec, tion]
51
+ partial :symbol, :with => [col, lec, tion], :as => "name"
@@ -0,0 +1,603 @@
1
+ #---
2
+ # require 'merb' must happen after Merb::Config is instantiated
3
+ require 'rubygems'
4
+ require 'set'
5
+ require 'fileutils'
6
+ require 'socket'
7
+ require 'pathname'
8
+ require "extlib"
9
+
10
+ __DIR__ = File.dirname(__FILE__)
11
+
12
+ $LOAD_PATH.unshift __DIR__ unless
13
+ $LOAD_PATH.include?(__DIR__) ||
14
+ $LOAD_PATH.include?(File.expand_path(__DIR__))
15
+
16
+ require 'merb-core' / 'vendor' / 'facets'
17
+
18
+ module Merb
19
+ module GlobalHelpers; end
20
+ class << self
21
+
22
+ # Merge environment settings
23
+ # Can allow you to have a "localdev" that runs like your "development"
24
+ # OR
25
+ # A "staging" environment that runs like your "production"
26
+ #
27
+ # ==== Examples
28
+ # From any environment config file (ie, development.rb, custom.rb, localdev.rb, etc)
29
+ # staging.rb:
30
+ # Merb.merge_env "production" #We want to use all the settings production uses
31
+ # Merb::Config.use { |c|
32
+ # c[:log_level] = "debug" #except we want debug log level
33
+ # c[:exception_details] = true #and we want to see exception details
34
+ # }
35
+ #
36
+ # ==== Parameters
37
+ # env<~String>:: Environment to run like
38
+ # use_db<~Boolean>:: Should Merb use the merged environments DB connection
39
+ # Defaults to +false+
40
+ def merge_env(env,use_db=false)
41
+ if Merb.environment_info.nil?
42
+ Merb.environment_info = {
43
+ :real_env => Merb.environment,
44
+ :merged_envs => [],
45
+ :db_env => Merb.environment
46
+ }
47
+ end
48
+
49
+ #Only load if it hasn't been loaded
50
+ unless Merb.environment_info[:merged_envs].member? env
51
+ Merb.environment_info[:merged_envs] << env
52
+
53
+ env_file = Merb.dir_for(:config) / "environments" / ("#{env}.rb")
54
+ if File.exists?(env_file)
55
+ load(env_file)
56
+ else
57
+ Merb.logger.warn! "Environment file does not exist! #{env_file}"
58
+ end
59
+
60
+ end
61
+
62
+ # Mark specific environment to load when ORM loads,
63
+ # if multiple environments are loaded, the last one
64
+ # with use_db as TRUE will be loaded
65
+ if use_db
66
+ Merb.environment_info[:db_env] = env
67
+ end
68
+ end
69
+
70
+
71
+ # Startup Merb by setting up the Config and starting the server.
72
+ # This is where Merb application environment and root path are set.
73
+ #
74
+ # ==== Parameters
75
+ # argv<String, Hash>::
76
+ # The config arguments to start Merb with. Defaults to +ARGV+.
77
+ def start(argv=ARGV)
78
+ if Hash === argv
79
+ Merb::Config.setup(argv)
80
+ else
81
+ Merb::Config.parse_args(argv)
82
+ end
83
+ Merb.environment = Merb::Config[:environment]
84
+ Merb.root = Merb::Config[:merb_root]
85
+ case Merb::Config[:action]
86
+ when :kill
87
+ Merb::Server.kill(Merb::Config[:port], 1)
88
+ when :kill_9
89
+ Merb::Server.kill(Merb::Config[:port], 9)
90
+ else
91
+ Merb::Server.start(Merb::Config[:port], Merb::Config[:cluster])
92
+ end
93
+ end
94
+
95
+ # Start the Merb environment, but only if it hasn't been loaded yet.
96
+ #
97
+ # ==== Parameters
98
+ # argv<String, Hash>::
99
+ # The config arguments to start Merb with. Defaults to +ARGV+.
100
+ def start_environment(argv=ARGV)
101
+ unless (@started ||= false)
102
+ start(argv)
103
+ @started = true
104
+ end
105
+ end
106
+
107
+ # Restart the Merb environment explicitly.
108
+ #
109
+ # ==== Parameters
110
+ # argv<String, Hash>::
111
+ # The config arguments to restart Merb with. Defaults to +Merb::Config+.
112
+ def restart_environment(argv={})
113
+ @started = false
114
+ start_environment(Merb::Config.to_hash.merge(argv))
115
+ end
116
+
117
+ attr_accessor :environment, :load_paths, :adapter, :environment_info, :started
118
+
119
+ alias :env :environment
120
+ alias :started? :started
121
+
122
+ Merb.load_paths = Dictionary.new { [Merb.root] } unless Merb.load_paths.is_a?(Dictionary)
123
+
124
+ # This is the core mechanism for setting up your application layout.
125
+ # There are three application layouts in Merb:
126
+ #
127
+ # Regular app/:type layout of Ruby on Rails fame:
128
+ #
129
+ # app/models for models
130
+ # app/mailers for mailers (special type of controllers)
131
+ # app/parts for parts, Merb components
132
+ # app/views for templates
133
+ # app/controllers for controller
134
+ # lib for libraries
135
+ #
136
+ # Flat application layout:
137
+ #
138
+ # application.rb for models, controllers, mailers, etc
139
+ # config/init.rb for initialization and router configuration
140
+ # config/framework.rb for framework and dependencies configuration
141
+ # views for views
142
+ #
143
+ # and Camping-style "very flat" application layout, where the whole Merb
144
+ # application and configs fit into a single file.
145
+ #
146
+ # ==== Notes
147
+ # Autoloading for lib uses empty glob by default. If you
148
+ # want to have your libraries under lib use autoload, add
149
+ # the following to Merb init file:
150
+ #
151
+ # Merb.push_path(:lib, Merb.root / "lib", "**/*.rb") # glob set explicity.
152
+ #
153
+ # Then lib/magicwand/lib/magicwand.rb with MagicWand module will
154
+ # be autoloaded when you first access that constant.
155
+ #
156
+ # ==== Examples
157
+ # This method gives you a way to build up your own application
158
+ # structure, for instance, to reflect the structure Rails
159
+ # uses to simplify transition of legacy application, you can
160
+ # set it up like this:
161
+ #
162
+ # Merb.push_path(:model, Merb.root / "app" / "models", "**/*.rb")
163
+ # Merb.push_path(:mailer, Merb.root / "app" / "models", "**/*.rb")
164
+ # Merb.push_path(:controller, Merb.root / "app" / "controllers", "**/*.rb")
165
+ # Merb.push_path(:view, Merb.root / "app" / "views", "**/*.rb")
166
+ #
167
+ # ==== Parameters
168
+ # type<Symbol>:: The type of path being registered (i.e. :view)
169
+ # path<String>:: The full path
170
+ # file_glob<String>::
171
+ # A glob that will be used to autoload files under the path. Defaults to
172
+ # "**/*.rb".
173
+ def push_path(type, path, file_glob = "**/*.rb")
174
+ enforce!(type => Symbol)
175
+ load_paths[type] = [Pathname.new(path), file_glob]
176
+ end
177
+
178
+ # Removes given types of application components
179
+ # from load path Merb uses for autoloading.
180
+ #
181
+ # ==== Parameters
182
+ # *args<Array(Symbol)>::
183
+ # components names, for instance, :views, :models
184
+ #
185
+ # ==== Examples
186
+ # Using this combined with Merb::GlobalHelpers.push_path
187
+ # you can make your Merb application use legacy Rails
188
+ # application components.
189
+ #
190
+ # Merb.root = "path/to/legacy/app/root"
191
+ # Merb.remove_paths(:mailer)
192
+ # Merb.push_path(:mailer, Merb.root / "app" / "models", "**/*.rb")
193
+ #
194
+ # Will make Merb use app/models for mailers just like Ruby on Rails does.
195
+ def remove_paths(*args)
196
+ args.each {|arg| load_paths.delete(arg)}
197
+ end
198
+
199
+ # ==== Parameters
200
+ # type<Symbol>:: The type of path to retrieve directory for, e.g. :view.
201
+ #
202
+ # ==== Returns
203
+ # String:: The directory for the requested type.
204
+ def dir_for(type)
205
+ Merb.load_paths[type].first
206
+ end
207
+
208
+ # ==== Parameters
209
+ # type<Symbol>:: The type of path to retrieve glob for, e.g. :view.
210
+ #
211
+ # ===== Returns
212
+ # String:: The pattern with which to match files within the type directory.
213
+ def glob_for(type)
214
+ Merb.load_paths[type][1]
215
+ end
216
+
217
+ # ==== Returns
218
+ # String:: The Merb root path.
219
+ def root
220
+ app_root = @root || Merb::Config[:merb_root] || Dir.pwd
221
+
222
+ Pathname.new(app_root)
223
+ end
224
+
225
+ # ==== Parameters
226
+ # value<String>:: Path to the root directory.
227
+ def root=(value)
228
+ @root = Pathname.new(value)
229
+ end
230
+
231
+ # ==== Parameters
232
+ # *path::
233
+ # The relative path (or list of path components) to a directory under the
234
+ # root of the application.
235
+ #
236
+ # ==== Returns
237
+ # String:: The full path including the root.
238
+ #
239
+ # ==== Examples
240
+ # Merb.root = "/home/merb/app"
241
+ # Merb.path("images") # => "/home/merb/app/images"
242
+ # Merb.path("views", "admin") # => "/home/merb/app/views/admin"
243
+ #---
244
+ # @public
245
+ def root_path(*path)
246
+ Pathname.new(File.join(root, *path))
247
+ end
248
+
249
+ # Logger settings
250
+ attr_accessor :logger
251
+
252
+ # ==== Returns
253
+ # String::
254
+ # The path to the log file. If this Merb instance is running as a daemon
255
+ # this will return +STDOUT+.
256
+ def log_file
257
+ if Merb::Config[:log_file]
258
+ Merb::Config[:log_file]
259
+ elsif Merb.testing?
260
+ log_path / "merb_test.log"
261
+ elsif !(Merb::Config[:daemonize] || Merb::Config[:cluster])
262
+ STDOUT
263
+ else
264
+ log_path / "merb.#{Merb::Config[:port]}.log"
265
+ end
266
+ end
267
+
268
+ # ==== Returns
269
+ # String:: Path to directory that contains the log file.
270
+ def log_path
271
+ path = case Merb::Config[:log_file]
272
+ when String then File.dirname(Merb::Config[:log_file])
273
+ else Merb.root_path("log")
274
+ end
275
+
276
+ Pathname.new(path)
277
+ end
278
+
279
+ # ==== Returns
280
+ # String:: The path of root directory of the Merb framework.
281
+ def framework_root
282
+ @framework_root ||= Pathname(File.dirname(__FILE__))
283
+ end
284
+
285
+ # ==== Returns
286
+ # RegExp::
287
+ # Regular expression against which deferred actions
288
+ # are matched by Rack application handler.
289
+ #
290
+ # ==== Notes
291
+ # Concatenates :deferred_actions configuration option
292
+ # values.
293
+ def deferred_actions
294
+ @deferred ||= begin
295
+ if Merb::Config[:deferred_actions].empty?
296
+ /^\0$/
297
+ else
298
+ /#{Merb::Config[:deferred_actions].join("|")}/
299
+ end
300
+ end
301
+ end
302
+
303
+ # Allows flat apps by setting no default framework directories and yielding
304
+ # a Merb::Router instance. This is optional since the router will
305
+ # automatically configure the app with default routes.
306
+ #
307
+ # ==== Block parameters
308
+ # r<Merb::Router::Behavior>::
309
+ # The root behavior upon which new routes can be added.
310
+ def flat!(framework = {})
311
+ Merb::Config[:framework] = framework
312
+
313
+ Merb::Router.prepare do |r|
314
+ yield(r) if block_given?
315
+ r.default_routes
316
+ end
317
+ end
318
+
319
+ # Set up default variables under Merb
320
+ attr_accessor :generator_scope, :klass_hashes, :orm_generator_scope, :test_framework_generator_scope
321
+
322
+ # Returns registered ORM generators as symbols,
323
+ # for instance, :datamapper.
324
+ #
325
+ # ==== Returns
326
+ # <Array(Symbol>:: registered ORM generators.
327
+ def orm_generator_scope
328
+ @orm_generator_scope ||= :merb_default
329
+ end
330
+
331
+ # Returns registered test framework generators.
332
+ #
333
+ # ==== Returns
334
+ # <Array(Symbol>:: registred test framework generators.
335
+ def test_framework_generator_scope
336
+ @test_framework_generator_scope ||= :rspec
337
+ end
338
+
339
+ # Returns all registered generators plus Merb generator.
340
+ #
341
+ # ==== Returns
342
+ # <Array(Symbol>::
343
+ # all registered generators, inc. needed by Merb itself.
344
+ def generator_scope
345
+ [:merb, orm_generator_scope, test_framework_generator_scope]
346
+ end
347
+
348
+
349
+ Merb.klass_hashes = []
350
+
351
+ attr_reader :registered_session_types
352
+
353
+ # ==== Parameters
354
+ # name<~to_s>:: Name of the session type to register.
355
+ # file<String>:: The file that defines this session type.
356
+ # description<String>:: An optional description of the session type.
357
+ #
358
+ # ==== Notes
359
+ # Merb currently supports memory, cookie and memcache session
360
+ # types.
361
+ def register_session_type(name, file, description = nil)
362
+ @registered_session_types ||= Dictionary.new
363
+ @registered_session_types[name] = {
364
+ :file => file,
365
+ :description => (description || "Using #{name} sessions")
366
+ }
367
+ end
368
+
369
+ attr_accessor :frozen
370
+
371
+ # ==== Returns
372
+ # Boolean:: True if Merb is running via merb-freezer or other freezer.
373
+ #
374
+ # ==== Notes
375
+ # Freezing means bundling framework libraries with your application
376
+ # making it independent from environment it runs in. This is a good
377
+ # practice to freeze application framework and gems it uses and
378
+ # very useful when application is run in some sort of sandbox,
379
+ # for instance, shared hosting with preconfigured gems.
380
+ def frozen?
381
+ @frozen
382
+ end
383
+
384
+ # Used by merb-freezer and other freezers to mark Merb as frozen.
385
+ # See Merb::GlobalHelpers.frozen? for more details on framework freezing.
386
+ def frozen!
387
+ @frozen = true
388
+ end
389
+
390
+ # Load configuration and assign logger.
391
+ #
392
+ # ==== Parameters
393
+ # options<Hash>:: Options to pass on to the Merb config.
394
+ #
395
+ # ==== Options
396
+ # :host<String>:: host to bind to,
397
+ # default is 0.0.0.0.
398
+ #
399
+ # :port<Fixnum>:: port to run Merb application on,
400
+ # default is 4000.
401
+ #
402
+ # :adapter<String>:: name of Rack adapter to use,
403
+ # default is "runner"
404
+ #
405
+ # :rackup<String>:: name of Rack init file to use,
406
+ # default is "rack.rb"
407
+ #
408
+ # :reload_classes<Boolean>:: whether Merb should reload
409
+ # classes on each request,
410
+ # default is true
411
+ #
412
+ # :environment<String>:: name of environment to use,
413
+ # default is development
414
+ #
415
+ # :merb_root<String>:: Merb application root,
416
+ # default is Dir.pwd
417
+ #
418
+ # :use_mutex<Boolean>:: turns action dispatch synchronization
419
+ # on or off, default is on (true)
420
+ #
421
+ # :session_id_key<String>:: session identifier,
422
+ # default is _session_id
423
+ #
424
+ # :session_store<String>:: session store to use (one of cookies,
425
+ # memcache or memory)
426
+ #
427
+ # :log_delimiter<String>:: what Merb logger uses as delimiter
428
+ # between message sections, default is " ~ "
429
+ #
430
+ # :log_auto_flush<Boolean>:: whether the log should automatically
431
+ # flush after new messages are
432
+ # added, defaults to true.
433
+ #
434
+ # :log_file<IO>:: IO for logger. Default is STDOUT.
435
+ #
436
+ # :log_level<Symbol>:: logger level, default is :warn
437
+ #
438
+ # :disabled_components<Array[Symbol]>::
439
+ # array of disabled component names,
440
+ # for instance, to disable json gem,
441
+ # specify :json. Default is empty array.
442
+ #
443
+ # :deferred_actions<Array(Symbol, String)]>::
444
+ # names of actions that should be deferred
445
+ # no matter what controller they belong to.
446
+ # Default is empty array.
447
+ #
448
+ # Some of these options come from command line on Merb
449
+ # application start, some of them are set in Merb init file
450
+ # or environment-specific.
451
+ def load_config(options = {})
452
+ Merb::Config.setup({ :log_file => STDOUT, :log_level => :warn, :log_auto_flush => true }.merge(options))
453
+ Merb::BootLoader::Logger.run
454
+ end
455
+
456
+ # Load all basic dependencies (selected BootLoaders only).
457
+ # This sets up Merb framework component paths
458
+ # (directories for models, controllers, etc) using
459
+ # framework.rb or default layout, loads init file
460
+ # and dependencies specified in it and runs before_app_loads hooks.
461
+ #
462
+ # ==== Parameters
463
+ # options<Hash>:: Options to pass on to the Merb config.
464
+ def load_dependencies(options = {})
465
+ load_config(options)
466
+ Merb::BootLoader::BuildFramework.run
467
+ Merb::BootLoader::Dependencies.run
468
+ Merb::BootLoader::BeforeAppLoads.run
469
+ end
470
+
471
+ # Reload application and framework classes.
472
+ # See Merb::BootLoader::ReloadClasses for details.
473
+ def reload
474
+ Merb::BootLoader::ReloadClasses.reload
475
+ end
476
+
477
+ # ==== Returns
478
+ # Boolean:: True if Merb environment is testing for instance,
479
+ # Merb is running with RSpec, Test::Unit of other testing facility.
480
+ def testing?
481
+ $TESTING || Merb::Config[:testing]
482
+ end
483
+
484
+ # Ask the question about which environment you're in.
485
+ # ==== Parameters
486
+ # env<Symbol, String>:: Name of the environment to query
487
+ #
488
+ # ==== Examples
489
+ # Merb.env #=> production
490
+ # Merb.env?(:production) #=> true
491
+ # Merb.env?(:development) #=> false
492
+ def env?(env)
493
+ Merb.env == env.to_s
494
+ end
495
+
496
+ # If block was given configures using the block.
497
+ #
498
+ # ==== Parameters
499
+ # &block:: Configuration parameter block, see example below.
500
+ #
501
+ # ==== Returns
502
+ # Hash:: The current configuration.
503
+ #
504
+ # ==== Notes
505
+ # See Merb::GlobalHelpers.load_config for configuration
506
+ # options list.
507
+ #
508
+ # ==== Examples
509
+ # Merb.config do
510
+ # beer "good"
511
+ # hashish :foo => "bar"
512
+ # environment "development"
513
+ # log_level "debug"
514
+ # use_mutex false
515
+ # session_store "cookie"
516
+ # session_secret_key "0d05a226affa226623eb18700"
517
+ # exception_details true
518
+ # reload_classes true
519
+ # reload_time 0.5
520
+ # end
521
+ def config(&block)
522
+ Merb::Config.configure(&block) if block_given?
523
+ Config
524
+ end
525
+
526
+ # Disables the given core components, like a Gem for example.
527
+ #
528
+ # ==== Parameters
529
+ # *args:: One or more symbols of Merb internal components.
530
+ def disable(*components)
531
+ disabled_components.push *components
532
+ end
533
+
534
+ # ==== Parameters
535
+ # Array:: All components that should be disabled.
536
+ def disabled_components=(components)
537
+ disabled_components.replace components
538
+ end
539
+
540
+ # ==== Returns
541
+ # Array:: All components that have been disabled.
542
+ def disabled_components
543
+ Merb::Config[:disabled_components] ||= []
544
+ end
545
+
546
+ # ==== Returns
547
+ # Boolean:: True if all components (or just one) are disabled.
548
+ def disabled?(*components)
549
+ components.all? { |c| disabled_components.include?(c) }
550
+ end
551
+
552
+ # ==== Returns
553
+ # Array(String):: Paths Rakefiles are loaded from.
554
+ #
555
+ # ==== Notes
556
+ # Recommended way to find out what paths Rakefiles
557
+ # are loaded from.
558
+ def rakefiles
559
+ @rakefiles ||= ['merb-core' / 'test' / 'tasks' / 'spectasks']
560
+ end
561
+
562
+ # === Returns
563
+ # Array(String):: Paths generators are loaded from
564
+ #
565
+ # === Notes
566
+ # Recommended way to find out what paths generators
567
+ # are loaded from.
568
+ def generators
569
+ @generators ||= []
570
+ end
571
+
572
+ # ==== Parameters
573
+ # *rakefiles:: Rakefile pathss to add to the list of Rakefiles.
574
+ #
575
+ # ==== Notes
576
+ # Recommended way to add Rakefiles load path for plugins authors.
577
+ def add_rakefiles(*rakefiles)
578
+ @rakefiles ||= ['merb-core' / 'test' / 'tasks' / 'spectasks']
579
+ @rakefiles += rakefiles
580
+ end
581
+
582
+ # ==== Parameters
583
+ # *generators:: Generator paths to add to the list of generators.
584
+ #
585
+ # ==== Notes
586
+ # Recommended way to add Generator load paths for plugin authors.
587
+ def add_generators(*generators)
588
+ @generators ||= []
589
+ @generators += generators
590
+ end
591
+
592
+ end
593
+ end
594
+
595
+ require 'merb-core' / 'autoload'
596
+ require 'merb-core' / 'server'
597
+ require 'merb-core' / 'gem_ext/erubis'
598
+ require 'merb-core' / 'logger'
599
+ require 'merb-core' / 'version'
600
+ require 'merb-core' / 'controller/mime'
601
+
602
+ # Set the environment if it hasn't already been set.
603
+ Merb.environment ||= ENV['MERB_ENV'] || Merb::Config[:environment] || (Merb.testing? ? 'test' : 'development')