thorero 0.9.4.4 → 0.9.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -0,0 +1,44 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
2
+ Merb.start :environment => 'test',
3
+ :merb_root => File.dirname(__FILE__) / "directory"
4
+
5
+ describe "The default Merb directory structure" do
6
+
7
+ it "should load in controllers" do
8
+ calling { Base }.should_not raise_error
9
+ end
10
+
11
+ it "should be able to complete the dispatch cycle" do
12
+ controller = dispatch_to(Base, :string)
13
+ controller.body.should == "String"
14
+ end
15
+
16
+ it "should be able to complete the dispatch cycle with templates" do
17
+ controller = dispatch_to(Base, :template)
18
+ controller.body.should == "Template ERB"
19
+ end
20
+
21
+ end
22
+
23
+ describe "Modifying the _template_path" do
24
+
25
+ it "should move the templates to a new location" do
26
+ controller = dispatch_to(Custom, :template)
27
+ controller.body.should == "Wonderful Template"
28
+ end
29
+
30
+ end
31
+
32
+ describe "Merb.root_path" do
33
+
34
+ it "should return a path relative to Merb.root" do
35
+ path = Merb.root_path('/app/controllers/base.rb')
36
+ path.to_s.should == File.join(Merb.root, '/app/controllers/base.rb')
37
+ end
38
+
39
+ it "should accept multiple arguments like File.join" do
40
+ path = Merb.root_path('app', 'controllers', 'base.rb')
41
+ path.to_s.should == File.join(Merb.root, 'app', 'controllers', 'base.rb')
42
+ end
43
+
44
+ end
@@ -0,0 +1,181 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+
3
+ describe Merb do
4
+
5
+ describe "Command Line Options" do
6
+
7
+ it "should allow -l / --log_level to set the log_level" do
8
+ pending("How do we spec these?")
9
+ end
10
+
11
+ it "should allow -L / --log_file to set the log_file" do
12
+ pending("How do we spec these?")
13
+ # Run an instance of merb from the command line
14
+ # using system and test if the file was created?
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+
21
+ describe Merb::Logger do
22
+
23
+ describe "#new" do
24
+ it "should call set_log with the arguments it was passed." do
25
+ logger = Merb::Logger.allocate # create an object sans initialization
26
+ logger.should_receive(:set_log).with('a partridge', 'a pear tree', 'a time bomb').and_return(true)
27
+ logger.send(:initialize, 'a partridge', 'a pear tree', 'a time bomb')
28
+ end
29
+ end
30
+
31
+ describe "#set_log" do
32
+
33
+ before(:each) do
34
+ @logger = Merb::Logger.new(Merb.log_file)
35
+ end
36
+
37
+ it "should set the log level to :warn (4) when second parameter is :warn" do
38
+ Merb::Logger.new(Merb.log_file, :warn).level.should eql(4)
39
+ end
40
+
41
+ it "should set the log level to :debug (0) when Merb.environment is development" do
42
+ Merb.should_receive(:environment).and_return("development")
43
+ @logger.set_log(Merb.log_path / "development.log")
44
+ @logger.level.should eql(0)
45
+ end
46
+
47
+ it "should set the log level to :error (6) when Merb.environment is production" do
48
+ Merb.should_receive(:environment).and_return("production")
49
+ @logger.set_log(Merb.log_path / "production.log")
50
+ @logger.level.should eql(4)
51
+ end
52
+
53
+ it "should initialize the buffer to an empty array" do
54
+ @logger.buffer.should eql([])
55
+ end
56
+
57
+ it "should default the delimiter to ' ~ '" do
58
+ @logger.delimiter.should eql(" ~ ")
59
+ end
60
+
61
+ it "should assign the newly created object to Merb.logger" do
62
+ @logger = Merb::Logger.new(Merb.log_file)
63
+ Merb.logger.should eql(@logger)
64
+ end
65
+
66
+ end
67
+
68
+ describe "#flush" do
69
+
70
+ before(:each) do
71
+ @logger = Merb::Logger.new(Merb.log_file)
72
+ end
73
+
74
+ it "should immediately return if the buffer is empty" do
75
+ @logger.should_not_receive(:write)
76
+ @logger.flush
77
+ end
78
+
79
+ it "should call the write_method with the stringified contents of the buffer if the buffer is non-empty" do
80
+ @logger.send(:<<, "a message")
81
+ @logger.send(:<<, "another message")
82
+ @logger.log.should_receive(:write).with(" ~ a message\n ~ another message\n")
83
+ @logger.flush
84
+ end
85
+
86
+ end
87
+
88
+ describe "#close" do
89
+ before(:each) do
90
+ @logger = Merb::Logger.new(Merb.log_file)
91
+ end
92
+
93
+ it "should flush the buffer before closing" do
94
+ # TODO: how to specify order? eg. flush then close
95
+ @logger.should_receive(:flush)
96
+ @logger.log.should_receive(:close)
97
+ @logger.close
98
+ end
99
+
100
+ it "should call the close method if the log responds to close" do
101
+ @logger.log.should_receive(:close)
102
+ @logger.close
103
+ end
104
+
105
+ it "shouldn't call the close method if the log is a terminal" do
106
+ @logger.log.should_receive(:tty?).and_return(true)
107
+ @logger.log.should_not_receive(:close)
108
+ @logger.close
109
+ end
110
+
111
+ it "should set the stored log attribute to nil" do
112
+ @logger.close
113
+ @logger.log.should eql(nil)
114
+ end
115
+
116
+ end
117
+
118
+ describe "<<" do
119
+
120
+ end
121
+
122
+ describe "level methods" do
123
+
124
+ before(:all) do
125
+ @logger = Merb::Logger.new(Merb.log_file)
126
+ end
127
+
128
+ it "should provide a #debug method which can be used to log" do
129
+ @logger.should respond_to(:debug)
130
+ @logger.should_receive(:<<).with("message").and_return(true)
131
+ @logger.debug("message")
132
+ end
133
+
134
+ it "should provide a #info method which can be used to log" do
135
+ @logger.should respond_to(:info)
136
+ @logger.should_receive(:<<).with("message").and_return(true)
137
+ @logger.info("message")
138
+ end
139
+
140
+ it "should provide a #warn method which can be used to log" do
141
+ @logger.should respond_to(:warn)
142
+ @logger.should_receive(:<<).with("message").and_return(true)
143
+ @logger.warn("message")
144
+ end
145
+
146
+ it "should provide a #error method which can be used to log" do
147
+ @logger.should respond_to(:error)
148
+ @logger.should_receive(:<<).with("message").and_return(true)
149
+ @logger.error("message")
150
+ end
151
+
152
+ it "should provide a #fatal method which can be used to log" do
153
+ @logger.should respond_to(:fatal)
154
+ @logger.should_receive(:<<).with("message").and_return(true)
155
+ @logger.fatal("message")
156
+ end
157
+
158
+ # TODO: add positive and negative tests for each of the methods below:
159
+ it "should provide a #debug? method" do
160
+ @logger.should respond_to(:debug?)
161
+ end
162
+
163
+ it "should provide a #info? method" do
164
+ @logger.should respond_to(:info?)
165
+ end
166
+
167
+ it "should provide a #warn? method" do
168
+ @logger.should respond_to(:warn?)
169
+ end
170
+
171
+ it "should provide a #error? method" do
172
+ @logger.should respond_to(:error?)
173
+ end
174
+
175
+ it "should provide a #fatal? method" do
176
+ @logger.should respond_to(:fatal?)
177
+ end
178
+
179
+ end
180
+
181
+ end
@@ -0,0 +1 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
@@ -0,0 +1,3 @@
1
+
2
+
3
+ class Application < Merb::Controller; end
@@ -0,0 +1,6 @@
1
+
2
+ class Reloader < Application
3
+ end
4
+
5
+ class Hello < Application
6
+ end
@@ -0,0 +1,2 @@
1
+ Merb::Config[:reload_classes] = true
2
+ Merb::Config[:reload_time] = 0.5
@@ -0,0 +1,138 @@
1
+ Thu, 15 May 2008 23:38:50 GMT ~ info ~ Logfile created
2
+ ~ Not Using Sessions
3
+ ~ Not Using Sessions
4
+ ~ Not Using Sessions
5
+ ~ Not Using Sessions
6
+ ~ Not Using Sessions
7
+ ~ Not Using Sessions
8
+ ~ Not Using Sessions
9
+ ~ Not Using Sessions
10
+ ~ Not Using Sessions
11
+ ~ Not Using Sessions
12
+ ~ Not Using Sessions
13
+ ~ Not Using Sessions
14
+ ~ Not Using Sessions
15
+ ~ Not Using Sessions
16
+ ~ Not Using Sessions
17
+ ~ Not Using Sessions
18
+ ~ Not Using Sessions
19
+ ~ Not Using Sessions
20
+ ~ Not Using Sessions
21
+ ~ Not Using Sessions
22
+ ~ Not Using Sessions
23
+ ~ Not Using Sessions
24
+ ~ Not Using Sessions
25
+ ~ Not Using Sessions
26
+ ~ Not Using Sessions
27
+ ~ Not Using Sessions
28
+ ~ Not Using Sessions
29
+ ~ Not Using Sessions
30
+ ~ Not Using Sessions
31
+ ~ Not Using Sessions
32
+ ~ Not Using Sessions
33
+ ~ Not Using Sessions
34
+ ~ Not Using Sessions
35
+ ~ Not Using Sessions
36
+ ~ Not Using Sessions
37
+ ~ Not Using Sessions
38
+ ~ Not Using Sessions
39
+ ~ Not Using Sessions
40
+ ~ Not Using Sessions
41
+ ~ Not Using Sessions
42
+ ~ Not Using Sessions
43
+ ~ Not Using Sessions
44
+ ~ Not Using Sessions
45
+ ~ Not Using Sessions
46
+ ~ Not Using Sessions
47
+ ~ Not Using Sessions
48
+ ~ Not Using Sessions
49
+ ~ Not Using Sessions
50
+ ~ Not Using Sessions
51
+ ~ Not Using Sessions
52
+ ~ Not Using Sessions
53
+ ~ Not Using Sessions
54
+ ~ Not Using Sessions
55
+ ~ Not Using Sessions
56
+ ~ Not Using Sessions
57
+ ~ Not Using Sessions
58
+ ~ Not Using Sessions
59
+ ~ Not Using Sessions
60
+ ~ Not Using Sessions
61
+ ~ Not Using Sessions
62
+ ~ Not Using Sessions
63
+ ~ Not Using Sessions
64
+ ~ Not Using Sessions
65
+ ~ Not Using Sessions
66
+ ~ Not Using Sessions
67
+ ~ Not Using Sessions
68
+ ~ Not Using Sessions
69
+ ~ Not Using Sessions
70
+ ~ Not Using Sessions
71
+ ~ Not Using Sessions
72
+ ~ Not Using Sessions
73
+ ~ Not Using Sessions
74
+ ~ Not Using Sessions
75
+ ~ Not Using Sessions
76
+ ~ Not Using Sessions
77
+ ~ Not Using Sessions
78
+ ~ Not Using Sessions
79
+ ~ Not Using Sessions
80
+ ~ Not Using Sessions
81
+ ~ Not Using Sessions
82
+ ~ Not Using Sessions
83
+ ~ Not Using Sessions
84
+ ~ Not Using Sessions
85
+ ~ Not Using Sessions
86
+ ~ Not Using Sessions
87
+ ~ Not Using Sessions
88
+ ~ Not Using Sessions
89
+ ~ Not Using Sessions
90
+ ~ Not Using Sessions
91
+ ~ Not Using Sessions
92
+ ~ Not Using Sessions
93
+ ~ Not Using Sessions
94
+ ~ Not Using Sessions
95
+ ~ Not Using Sessions
96
+ ~ Not Using Sessions
97
+ ~ Not Using Sessions
98
+ ~ Not Using Sessions
99
+ ~ Not Using Sessions
100
+ ~ Not Using Sessions
101
+ ~ Not Using Sessions
102
+ ~ Not Using Sessions
103
+ ~ Not Using Sessions
104
+ ~ Not Using Sessions
105
+ ~ Not Using Sessions
106
+ ~ Not Using Sessions
107
+ ~ Not Using Sessions
108
+ ~ Not Using Sessions
109
+ ~ Not Using Sessions
110
+ ~ Not Using Sessions
111
+ ~ Not Using Sessions
112
+ ~ Not Using Sessions
113
+ ~ Not Using Sessions
114
+ ~ Not Using Sessions
115
+ ~ Not Using Sessions
116
+ ~ Not Using Sessions
117
+ ~ Not Using Sessions
118
+ ~ Not Using Sessions
119
+ ~ Not Using Sessions
120
+ ~ Not Using Sessions
121
+ ~ Not Using Sessions
122
+ ~ Not Using Sessions
123
+ ~ Not Using Sessions
124
+ ~ Not Using Sessions
125
+ ~ Not Using Sessions
126
+ ~ Not Using Sessions
127
+ ~ Not Using Sessions
128
+ ~ Not Using Sessions
129
+ ~ Not Using Sessions
130
+ ~ Not Using Sessions
131
+ ~ Not Using Sessions
132
+ ~ Not Using Sessions
133
+ ~ Not Using Sessions
134
+ ~ Not Using Sessions
135
+ ~ Not Using Sessions
136
+ ~ Not Using Sessions
137
+ ~ Not Using Sessions
138
+ ~ Not Using Sessions
@@ -0,0 +1,103 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
2
+
3
+ class MockTimedExecutor
4
+ def self.every(seconds, &block)
5
+ @@scheduled_action = block
6
+ end
7
+ def self.run_task
8
+ @@scheduled_action.call
9
+ end
10
+ end
11
+
12
+ RealTimedExecutor = Merb::BootLoader::ReloadClasses::TimedExecutor
13
+ Merb::BootLoader::ReloadClasses::TimedExecutor = MockTimedExecutor
14
+
15
+ Merb.start :environment => 'test',
16
+ :merb_root => File.dirname(__FILE__) / "directory"
17
+
18
+ describe "TimedExecutor" do
19
+ it "should call a block of code repeatedly in the background" do
20
+ list_of_things = []
21
+
22
+ RealTimedExecutor.every(0.1) do
23
+ list_of_things << "Something"
24
+ end
25
+
26
+ sleep 0.5
27
+
28
+ list_of_things.should_not be_empty
29
+ list_of_things.size.should > 1
30
+ end
31
+
32
+ end
33
+
34
+ describe "The reloader" do
35
+
36
+ before :all do
37
+ @reload_file = File.dirname(__FILE__) / "directory" / "app" / "controllers" / "reload.rb"
38
+ @text = <<-END
39
+
40
+ class Reloader < Application
41
+ end
42
+
43
+ class Hello < Application
44
+ end
45
+ END
46
+ update_file @text
47
+ MockTimedExecutor.run_task
48
+ end
49
+
50
+ def update_file(contents)
51
+ mtime = File.mtime(@reload_file)
52
+ f = File.open(@reload_file, "w") do |f|
53
+ f.puts contents
54
+ end
55
+ File.utime(mtime+30, mtime+30, @reload_file)
56
+ end
57
+
58
+ it "should reload files that were changed" do
59
+ defined?(Hello).should_not be_nil
60
+ defined?(Reloader).should_not be_nil
61
+ defined?(Reloader2).should be_nil
62
+
63
+ update_file <<-END
64
+
65
+ class Reloader < Application
66
+ end
67
+
68
+ class Reloader2
69
+ end
70
+ END
71
+
72
+ MockTimedExecutor.run_task
73
+
74
+ defined?(Hello).should be_nil
75
+ defined?(Reloader).should_not be_nil
76
+ defined?(Reloader2).should_not be_nil
77
+ end
78
+
79
+ it "should remove classes for _abstract_subclasses" do
80
+
81
+ update_file <<-END
82
+
83
+ class Reloader < Application
84
+ end
85
+
86
+ class Reloader2 < Application
87
+ end
88
+ END
89
+
90
+ MockTimedExecutor.run_task
91
+
92
+ Merb::AbstractController._abstract_subclasses.should include("Reloader")
93
+ Merb::AbstractController._abstract_subclasses.should include("Reloader2")
94
+ defined?(Hello).should be_nil
95
+ defined?(Reloader).should_not be_nil
96
+ defined?(Reloader2).should_not be_nil
97
+ end
98
+
99
+ after :each do
100
+ update_file @text
101
+ MockTimedExecutor.run_task
102
+ end
103
+ end