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,28 @@
1
+ module Merb
2
+ class Worker
3
+
4
+ attr_accessor :thread
5
+
6
+ def initialize
7
+ @thread = Thread.new { loop { process_queue } }
8
+ end
9
+
10
+ def process_queue
11
+ begin
12
+ while blk = Merb::Dispatcher.work_queue.pop
13
+ # we've been blocking on the queue waiting for an item sleeping.
14
+ # when someone pushes an item it wakes up this thread so we
15
+ # immediately pass execution to the scheduler so we don't
16
+ # accidentally run this block before the action finishes
17
+ # it's own processing
18
+ Thread.pass
19
+ blk.call
20
+ end
21
+ rescue Exception => e
22
+ Merb.logger.warn! %Q!Worker Thread Crashed with Exception:\n#{Merb.exception(e)}\nRestarting Worker Thread!
23
+ retry
24
+ end
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,77 @@
1
+ require 'erubis'
2
+ module Erubis
3
+ module Basic::Converter
4
+ def convert_input(src, input)
5
+ pat = @pattern
6
+ regexp = pat.nil? || pat == '<% %>' ? DEFAULT_REGEXP : pattern_regexp(pat)
7
+ pos = 0
8
+ is_bol = true # is beginning of line
9
+ input.scan(regexp) do |indicator, code, tailch, rspace|
10
+ match = Regexp.last_match()
11
+ len = match.begin(0) - pos
12
+ text = input[pos, len]
13
+ pos = match.end(0)
14
+ ch = indicator ? indicator[0] : nil
15
+ lspace = ch == ?= ? nil : detect_spaces_at_bol(text, is_bol)
16
+ is_bol = rspace ? true : false
17
+ add_text(src, text) if text && !text.empty?
18
+ ## * when '<%= %>', do nothing
19
+ ## * when '<% %>' or '<%# %>', delete spaces iff only spaces are around '<% %>'
20
+ if ch == ?= # <%= %>
21
+ rspace = nil if tailch && !tailch.empty?
22
+ add_text(src, lspace) if lspace
23
+ add_expr(src, code, indicator)
24
+ add_text(src, rspace) if rspace
25
+ elsif ch == ?\# # <%# %>
26
+ n = code.count("\n") + (rspace ? 1 : 0)
27
+ if @trim && lspace && rspace
28
+ add_stmt(src, "\n" * n)
29
+ else
30
+ add_text(src, lspace) if lspace
31
+ add_stmt(src, "\n" * n)
32
+ add_text(src, rspace) if rspace
33
+ end
34
+ elsif ch == ?% # <%% %>
35
+ s = "#{lspace}#{@prefix||='<%'}#{code}#{tailch}#{@postfix||='%>'}#{rspace}"
36
+ add_text(src, s)
37
+ else # <% %>
38
+ if @trim && lspace && rspace
39
+ if respond_to?(:add_stmt2)
40
+ add_stmt2(src, "#{lspace}#{code}#{rspace}", tailch)
41
+ else
42
+ add_stmt(src, "#{lspace}#{code}#{rspace}")
43
+ end
44
+ else
45
+ add_text(src, lspace) if lspace
46
+ if respond_to?(:add_stmt2)
47
+ add_stmt2(src, code, tailch)
48
+ else
49
+ add_stmt(src, code)
50
+ end
51
+ add_text(src, rspace) if rspace
52
+ end
53
+ end
54
+ end
55
+ #rest = $' || input # ruby1.8
56
+ rest = pos == 0 ? input : input[pos..-1] # ruby1.9
57
+ add_text(src, rest)
58
+ end
59
+
60
+ end
61
+
62
+ class MEruby < Erubis::Eruby
63
+ include PercentLineEnhancer
64
+ include StringBufferEnhancer
65
+ end
66
+
67
+ # Loads a file, runs it through Erubis and parses it as YAML.
68
+ #
69
+ # ===== Parameters
70
+ # file<String>:: The name of the file to load.
71
+ # binding<Binding>::
72
+ # The binding to use when evaluating the ERB tags. Defaults to the current
73
+ # binding.
74
+ def self.load_yaml_file(file, binding = binding)
75
+ YAML::load(Erubis::MEruby.new(IO.read(File.expand_path(file))).result(binding))
76
+ end
77
+ end
@@ -31,7 +31,7 @@ require "time" # httpdate
31
31
  #
32
32
  # To initialize the logger you create a new object, proxies to set_log.
33
33
  # Merb::Logger.new(log{String, IO},level{Symbol, String})
34
- module Extlib
34
+ module Merb
35
35
 
36
36
  class << self
37
37
  attr_accessor :logger
@@ -60,7 +60,7 @@ module Extlib
60
60
  :warn => 4,
61
61
  :info => 3,
62
62
  :debug => 0
63
- }
63
+ } unless const_defined?(:Levels)
64
64
 
65
65
  private
66
66
 
@@ -0,0 +1,59 @@
1
+ module Merb
2
+
3
+ module Plugins
4
+
5
+ # ==== Returns
6
+ # Hash::
7
+ # The configuration loaded from Merb.root / "config/plugins.yml" or, if
8
+ # the load fails, an empty hash whose default value is another Hash.
9
+ def self.config
10
+ @config ||= begin
11
+ # this is so you can do Merb.plugins.config[:helpers][:awesome] = "bar"
12
+ config_hash = Hash.new {|h,k| h[k] = {}}
13
+ file = Merb.root / "config" / "plugins.yml"
14
+ config_hash.merge((File.exists?(file) && YAML.load_file(file)) || {})
15
+ end
16
+ end
17
+
18
+ # ==== Returns
19
+ # Array(String):: All Rakefile load paths Merb uses for plugins.
20
+ def self.rakefiles
21
+ Merb.rakefiles
22
+ end
23
+
24
+ # ==== Returns
25
+ # Array(String):: All Generator load paths Merb uses for plugins.
26
+ def self.generators
27
+ Merb.generators
28
+ end
29
+
30
+ # ==== Parameters
31
+ # *rakefiles:: Rakefiles to add to the list of plugin Rakefiles.
32
+ #
33
+ # ==== Notes
34
+ #
35
+ # This is a recommended way to register your plugin's Raketasks
36
+ # in Merb.
37
+ #
38
+ # ==== Examples
39
+ # From merb_sequel plugin:
40
+ #
41
+ # if defined(Merb::Plugins)
42
+ # Merb::Plugins.add_rakefiles "merb_sequel" / "merbtasks"
43
+ # end
44
+ def self.add_rakefiles(*rakefiles)
45
+ Merb.add_rakefiles *rakefiles
46
+ end
47
+
48
+ # ==== Parameters
49
+ # *generators:: Generator paths to add to the list of plugin generators.
50
+ #
51
+ # ==== Notes
52
+ #
53
+ # This is the recommended way to register your plugin's generators
54
+ # in Merb.
55
+ def self.add_generators(*generators)
56
+ Merb.add_generators *generators
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,21 @@
1
+ require 'rack'
2
+ module Merb
3
+ module Rack
4
+ autoload :Application, 'merb-core' / 'rack' / 'application'
5
+ autoload :Adapter, 'merb-core' / 'rack' / 'adapter'
6
+ autoload :Ebb, 'merb-core' / 'rack' / 'adapter' / 'ebb'
7
+ autoload :EventedMongrel, 'merb-core' / 'rack' / 'adapter' / 'evented_mongrel'
8
+ autoload :FastCGI, 'merb-core' / 'rack' / 'adapter' / 'fcgi'
9
+ autoload :Irb, 'merb-core' / 'rack' / 'adapter' / 'irb'
10
+ autoload :Middleware, 'merb-core' / 'rack' / 'middleware'
11
+ autoload :Mongrel, 'merb-core' / 'rack' / 'adapter' / 'mongrel'
12
+ autoload :Runner, 'merb-core' / 'rack' / 'adapter' / 'runner'
13
+ autoload :SwiftipliedMongrel, 'merb-core' / 'rack' / 'adapter' / 'swiftiplied_mongrel'
14
+ autoload :Thin, 'merb-core' / 'rack' / 'adapter' / 'thin'
15
+ autoload :ThinTurbo, 'merb-core' / 'rack' / 'adapter' / 'thin_turbo'
16
+ autoload :WEBrick, 'merb-core' / 'rack' / 'adapter' / 'webrick'
17
+ autoload :PathPrefix, 'merb-core' / 'rack' / 'middleware' / 'path_prefix'
18
+ autoload :Static, 'merb-core' / 'rack' / 'middleware' / 'static'
19
+ autoload :Profiler, 'merb-core' / 'rack' / 'middleware' / 'profiler'
20
+ end # Rack
21
+ end # Merb
@@ -0,0 +1,44 @@
1
+ module Merb
2
+
3
+ module Rack
4
+
5
+ class Adapter
6
+
7
+ class << self
8
+ # ==== Parameters
9
+ # id<String>:: The identifier of the Rack adapter class to retrieve.
10
+ #
11
+ # ==== Returns.
12
+ # Class:: The adapter class.
13
+ def get(id)
14
+ Object.full_const_get(@adapters[id])
15
+ end
16
+
17
+ # Registers a new Rack adapter.
18
+ #
19
+ # ==== Parameters
20
+ # ids<Array>:: Identifiers by which this adapter is recognized by.
21
+ # adapter_class<Class>:: The Rack adapter class.
22
+ def register(ids, adapter_class)
23
+ @adapters ||= Hash.new
24
+ ids.each { |id| @adapters[id] = "Merb::Rack::#{adapter_class}" }
25
+ end
26
+ end # class << self
27
+
28
+ end # Adapter
29
+
30
+ # Register some Rack adapters
31
+ Adapter.register %w{ebb}, :Ebb
32
+ Adapter.register %w{emongrel}, :EventedMongrel
33
+ Adapter.register %w{fastcgi fcgi}, :FastCGI
34
+ Adapter.register %w{irb}, :Irb
35
+ Adapter.register %w{mongrel}, :Mongrel
36
+ Adapter.register %w{runner}, :Runner
37
+ Adapter.register %w{smongrel swift}, :SwiftipliedMongrel
38
+ Adapter.register %w{thin}, :Thin
39
+ Adapter.register %w{thin-turbo}, :ThinTurbo
40
+ Adapter.register %w{webrick}, :WEBrick
41
+
42
+ end # Rack
43
+ end # Merb
44
+
@@ -0,0 +1,25 @@
1
+ require 'ebb'
2
+ module Merb
3
+
4
+ module Rack
5
+
6
+ class Ebb
7
+ # start an Ebb server on given host and port.
8
+
9
+ # ==== Parameters
10
+ # opts<Hash>:: Options for Ebb (see below).
11
+ #
12
+ # ==== Options (opts)
13
+ # :host<String>:: The hostname that Ebb should serve.
14
+ # :port<Fixnum>:: The port Ebb should bind to.
15
+ # :app:: The application
16
+ def self.start(opts={})
17
+ Merb.logger.warn!("Using Ebb adapter")
18
+ Merb::Dispatcher.use_mutex = false
19
+ th = Thread.new { ::Ebb.start_server(opts[:app], opts) }
20
+ Merb::Server.change_privilege
21
+ th.join
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ require 'swiftcore/evented_mongrel'
2
+ require 'merb-core/rack/handler/mongrel'
3
+ module Merb
4
+ module Rack
5
+
6
+ class EventedMongrel < Mongrel
7
+ # Starts Mongrel as evented.
8
+ #
9
+ # ==== Parameters
10
+ # opts<Hash>:: Options for Mongrel (see below).
11
+ #
12
+ # ==== Options (opts)
13
+ # :host<String>:: The hostname that Mongrel should serve.
14
+ # :port<Fixnum>:: The port Mongrel should bind to.
15
+ # :app<String>>:: The application name.
16
+ def self.start(opts={})
17
+ Merb.logger.warn!("Using EventedMongrel adapter")
18
+ Merb::Dispatcher.use_mutex = false
19
+ server = ::Mongrel::HttpServer.new(opts[:host], opts[:port].to_i)
20
+ Merb::Server.change_privilege
21
+ server.register('/', ::Merb::Rack::Handler::Mongrel.new(opts[:app]))
22
+ server.run.join
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ module Merb
2
+ module Rack
3
+
4
+ class FastCGI
5
+ # ==== Parameters
6
+ # opts<Hash>:: Options for FastCGI (see below).
7
+ #
8
+ # ==== Options (opts)
9
+ # :app<String>>:: The application name.
10
+ def self.start(opts={})
11
+ Merb.logger.warn!("Using FastCGI adapter")
12
+ Merb::Server.change_privilege
13
+ ::Rack::Handler::FastCGI.run(opts[:app], opts)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,118 @@
1
+ module Merb
2
+ module Rack
3
+ class Console
4
+ # ==== Parameters
5
+ # name<~to_sym, Hash>:: The name of the route to generate.
6
+ # params<Hash>:: The params to use in the route generation.
7
+ #
8
+ # ==== Returns
9
+ # String:: The generated URL.
10
+ #
11
+ # ==== Alternatives
12
+ # If name is a hash, it will be merged with params.
13
+ def url(name, params={})
14
+ Merb::Router.generate(name, params)
15
+ end
16
+
17
+ # Reloads classes using Merb::BootLoader::ReloadClasses.
18
+ def reload!
19
+ Merb::BootLoader::ReloadClasses.reload
20
+ end
21
+
22
+ # Prints all routes for the application.
23
+ def show_routes
24
+ seen = []
25
+ unless Merb::Router.named_routes.empty?
26
+ puts "==== Named routes"
27
+ Merb::Router.named_routes.each do |name,route|
28
+ # something weird happens when you combine sprintf and irb
29
+ puts "Helper : #{name}"
30
+ meth = $1.upcase if route.conditions[:method].to_s =~ /(get|post|put|delete)/
31
+ puts "HTTP method: #{meth || 'GET'}"
32
+ puts "Route : #{route}"
33
+ puts "Params : #{route.params.inspect}"
34
+ puts
35
+ seen << route
36
+ end
37
+ end
38
+ puts "==== Anonymous routes"
39
+ (Merb::Router.routes - seen).each do |route|
40
+ meth = $1.upcase if route.conditions[:method].to_s =~ /(get|post|put|delete)/
41
+ puts "HTTP method: #{meth || 'GET'}"
42
+ puts "Route : #{route}"
43
+ puts "Params : #{route.params.inspect}"
44
+ puts
45
+ end
46
+ nil
47
+ end
48
+
49
+ # Starts a sandboxed session (delegates to any Merb::Orms::* modules).
50
+ #
51
+ # An ORM should implement Merb::Orms::MyOrm#open_sandbox! to support this.
52
+ # Usually this involves starting a transaction.
53
+ def open_sandbox!
54
+ puts "Loading #{Merb.environment} environment in sandbox (Merb #{Merb::VERSION})"
55
+ puts "Any modifications you make will be rolled back on exit"
56
+ orm_modules.each { |orm| orm.open_sandbox! if orm.respond_to?(:open_sandbox!) }
57
+ end
58
+
59
+ # Ends a sandboxed session (delegates to any Merb::Orms::* modules).
60
+ #
61
+ # An ORM should implement Merb::Orms::MyOrm#close_sandbox! to support this.
62
+ # Usually this involves rolling back a transaction.
63
+ def close_sandbox!
64
+ orm_modules.each { |orm| orm.close_sandbox! if orm.respond_to?(:close_sandbox!) }
65
+ puts "Modifications have been rolled back"
66
+ end
67
+
68
+ # Explictly show logger output during IRB session
69
+ def trace_log!
70
+ Merb.logger.auto_flush = true
71
+ end
72
+
73
+ private
74
+
75
+ # ==== Returns
76
+ # Array:: All Merb::Orms::* modules.
77
+ def orm_modules
78
+ if Merb.const_defined?('Orms')
79
+ Merb::Orms.constants.map { |c| Merb::Orms::const_get(c) }
80
+ else
81
+ []
82
+ end
83
+ end
84
+
85
+ end
86
+
87
+ class Irb
88
+ # ==== Parameters
89
+ # opts<Hash>:
90
+ # Options for IRB. Currently this is not used by the IRB adapter.
91
+ #
92
+ # ==== Notes
93
+ # If the +.irbrc+ file exists, it will be loaded into the IRBRC
94
+ # environment variable.
95
+ def self.start(opts={})
96
+ m = Merb::Rack::Console.new
97
+ m.extend Merb::Test::RequestHelper
98
+ Object.send(:define_method, :merb) { m }
99
+ ARGV.clear # Avoid passing args to IRB
100
+ m.open_sandbox! if sandboxed?
101
+ require 'irb'
102
+ require 'irb/completion'
103
+ if File.exists? ".irbrc"
104
+ ENV['IRBRC'] = ".irbrc"
105
+ end
106
+ IRB.start
107
+ at_exit do merb.close_sandbox! if sandboxed? end
108
+ exit
109
+ end
110
+
111
+ private
112
+
113
+ def self.sandboxed?
114
+ Merb::Config[:sandbox]
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,26 @@
1
+ require 'mongrel'
2
+ require 'merb-core/rack/handler/mongrel'
3
+ module Merb
4
+
5
+ module Rack
6
+
7
+ class Mongrel
8
+ # start server on given host and port.
9
+
10
+ # ==== Parameters
11
+ # opts<Hash>:: Options for Mongrel (see below).
12
+ #
13
+ # ==== Options (opts)
14
+ # :host<String>:: The hostname that Mongrel should serve.
15
+ # :port<Fixnum>:: The port Mongrel should bind to.
16
+ # :app<String>>:: The application name.
17
+ def self.start(opts={})
18
+ Merb.logger.warn!("Using Mongrel adapter")
19
+ server = ::Mongrel::HttpServer.new(opts[:host], opts[:port].to_i)
20
+ Merb::Server.change_privilege
21
+ server.register('/', ::Merb::Rack::Handler::Mongrel.new(opts[:app]))
22
+ server.run.join
23
+ end
24
+ end
25
+ end
26
+ end