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
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008 Sam Smoot.
1
+ Copyright (c) 2008 Engine Yard Inc.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README ADDED
@@ -0,0 +1,21 @@
1
+ merb-core is a new branch of Merb (also referred to as merb-next or the 0.9 series) which aims to provide a stable, stripped down API for a future Merb 1.0 release.
2
+
3
+ This branch is based off the 0.5 release series but with significant rewrites.
4
+
5
+ Goals of this release:
6
+
7
+ * Stabilize the @public interface methods to provide for a more consistent application development experience.
8
+ * Remove features until nothing except a central application API is left
9
+ * Improve comments on methods using a standard documentation methodology as described in DOCUMENTATION_STANDARDS
10
+ * Separate the tests into two sections... "private" and "public"
11
+ * Public methods are methods tagged with @public that will be part of the standard, stable Merb API
12
+ * Private methods are implementation methods that might
13
+ * Implement a new render API
14
+ * Build more extensions to regain selected features when needed
15
+
16
+ To familiarize yourself with how a merb-core application might look,
17
+ use merb-gen (from merb-more) to generate a few apps:
18
+ $ merb-gen app myapp # a "normal" merb app
19
+ $ merb-gen app myapp --flat # a flattened app
20
+ $ merb-gen app myapp --very-flat # a single-file app
21
+
data/Rakefile CHANGED
@@ -1,33 +1,43 @@
1
- #!/usr/bin/env ruby
2
- require 'pathname'
3
- require 'rubygems'
4
- require 'rake'
1
+ require "rake"
5
2
  require "rake/clean"
6
3
  require "rake/gempackagetask"
4
+ require "rake/rdoctask"
5
+ require "rake/testtask"
6
+ require "spec/rake/spectask"
7
7
  require "fileutils"
8
- require Pathname('spec/rake/spectask')
9
- require Pathname('lib/extlib/version')
8
+ require "extlib"
10
9
 
11
- ROOT = Pathname(__FILE__).dirname.expand_path
10
+ def __DIR__
11
+ File.dirname(__FILE__)
12
+ end
13
+
14
+ require __DIR__ + "/tools/rakehelp"
15
+ require __DIR__ + "/tools/annotation_extract"
16
+
17
+ include FileUtils
18
+
19
+ require "lib/merb-core/version"
20
+ require "lib/merb-core/test/run_specs"
21
+ require 'lib/merb-core/tasks/merb_rake_helper'
12
22
 
13
23
  ##############################################################################
14
24
  # Package && release
15
25
  ##############################################################################
16
26
  RUBY_FORGE_PROJECT = "thorero"
17
- PROJECT_URL = "http://thorero.rubyforge.org"
18
- PROJECT_SUMMARY = "DataMapper and Merb support library."
27
+ PROJECT_URL = "http://merbivore.com"
28
+ PROJECT_SUMMARY = "Merb. Pocket rocket web framework."
19
29
  PROJECT_DESCRIPTION = PROJECT_SUMMARY
20
30
 
21
31
  AUTHOR = "test"
22
- EMAIL = "test@gmail.com"
32
+ EMAIL = "test@test.test"
23
33
 
24
34
  GEM_NAME = "thorero"
25
35
  PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
26
- GEM_VERSION = Extlib::VERSION + PKG_BUILD
36
+ GEM_VERSION = Merb::VERSION + PKG_BUILD
27
37
 
28
38
  RELEASE_NAME = "REL #{GEM_VERSION}"
29
39
 
30
- require "lib/extlib/tasks/release"
40
+ require "extlib/tasks/release"
31
41
 
32
42
  spec = Gem::Specification.new do |s|
33
43
  s.name = GEM_NAME
@@ -37,149 +47,306 @@ spec = Gem::Specification.new do |s|
37
47
  s.email = EMAIL
38
48
  s.homepage = PROJECT_URL
39
49
  s.summary = PROJECT_SUMMARY
50
+ s.bindir = "bin"
40
51
  s.description = PROJECT_DESCRIPTION
52
+ s.executables = %w( merb )
41
53
  s.require_path = "lib"
42
- s.files = ["LICENSE", "README.txt", "Rakefile"] + Dir["lib/**/*"]
54
+ s.files = %w( LICENSE README Rakefile TODO ) + Dir["{docs,bin,spec,lib,examples,app_generators,merb_generators,merb_default_generators,rspec_generators,test_unit_generators,script}/**/*"]
43
55
 
44
56
  # rdoc
45
- s.has_rdoc = false
46
- s.extra_rdoc_files = ["LICENSE", "README.txt"]
57
+ s.has_rdoc = true
58
+ s.extra_rdoc_files = %w( README LICENSE TODO )
59
+ #s.rdoc_options += RDOC_OPTS + ["--exclude", "^(app|uploads)"]
47
60
 
48
61
  # Dependencies
49
- s.add_dependency "english", ">=0.2.0"
62
+ s.add_dependency "extlib", ">=0.9.3"
63
+ s.add_dependency "erubis"
64
+ s.add_dependency "rake"
65
+ s.add_dependency "json_pure"
66
+ s.add_dependency "rspec"
67
+ s.add_dependency "rack"
68
+ s.add_dependency "mime-types"
69
+ # Requirements
70
+ s.requirements << "install the json gem to get faster json parsing"
71
+ s.required_ruby_version = ">= 1.8.4"
50
72
  end
51
73
 
52
74
  Rake::GemPackageTask.new(spec) do |package|
53
75
  package.gem_spec = spec
54
76
  end
55
77
 
56
- desc 'Remove all package, docs and spec products'
57
- task :clobber_all => %w[ clobber_package clobber_doc extlib:clobber_spec ]
78
+ desc "Run :package and install the resulting .gem"
79
+ task :install => :package do
80
+ sh %{#{sudo} gem install #{install_home} --local pkg/#{GEM_NAME}-#{GEM_VERSION}.gem --no-rdoc --no-ri}
81
+ end
82
+
83
+ desc "Run :package and install the resulting .gem with jruby"
84
+ task :jinstall => :package do
85
+ sh %{#{sudo} jruby -S gem install #{install_home} pkg/#{NAME}-#{Merb::VERSION}.gem --no-rdoc --no-ri}
86
+ end
87
+
88
+ desc "Run :clean and uninstall the .gem"
89
+ task :uninstall => :clean do
90
+ sh %{#{sudo} gem uninstall #{NAME}}
91
+ end
92
+
93
+ CLEAN.include ["**/.*.sw?", "pkg", "lib/*.bundle", "*.gem", "doc/rdoc", ".config", "coverage", "cache"]
94
+
95
+ desc "Run the specs."
96
+ task :default => :specs
97
+
98
+ task :merb => [:clean, :rdoc, :package]
58
99
 
59
100
  ##############################################################################
60
- # Specs and continous integration
101
+ # Github
61
102
  ##############################################################################
62
- task :default => 'extlib:spec'
63
- task :spec => 'extlib:spec'
64
-
65
- namespace :extlib do
66
- Spec::Rake::SpecTask.new(:spec) do |t|
67
- t.spec_opts << '--format' << 'specdoc' << '--colour'
68
- t.spec_opts << '--loadby' << 'random'
69
- t.spec_files = Pathname.glob(ENV['FILES'] || 'spec/**/*_spec.rb')
70
-
71
- begin
72
- t.rcov = ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true
73
- t.rcov_opts << '--exclude' << 'spec'
74
- t.rcov_opts << '--text-summary'
75
- t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
76
- rescue Exception
77
- # rcov not installed
103
+ namespace :github do
104
+ desc "Update Github Gemspec"
105
+ task :update_gemspec do
106
+ skip_fields = %w(new_platform original_platform)
107
+ integer_fields = %w(specification_version)
108
+
109
+ result = "Gem::Specification.new do |s|\n"
110
+ spec.instance_variables.each do |ivar|
111
+ value = spec.instance_variable_get(ivar)
112
+ name = ivar.split("@").last
113
+ next if skip_fields.include?(name) || value.nil? || value == "" || (value.respond_to?(:empty?) && value.empty?)
114
+ if name == "dependencies"
115
+ value.each do |d|
116
+ dep, *ver = d.to_s.split(" ")
117
+ result << " s.add_dependency #{dep.inspect}, #{ver.join(" ").inspect.gsub(/[()]/, "")}\n"
118
+ end
119
+ else
120
+ case value
121
+ when Array
122
+ value = name != "files" ? value.inspect : value.inspect.split(",").join(",\n")
123
+ when String
124
+ value = value.to_i if integer_fields.include?(name)
125
+ value = value.inspect
126
+ else
127
+ value = value.to_s.inspect
128
+ end
129
+ result << " s.#{name} = #{value}\n"
130
+ end
78
131
  end
132
+ result << "end"
133
+ File.open(File.join(File.dirname(__FILE__), "#{spec.name}.gemspec"), "w"){|f| f << result}
79
134
  end
80
135
  end
81
136
 
82
-
83
137
  ##############################################################################
84
138
  # Documentation
85
139
  ##############################################################################
86
- desc "Generate documentation"
87
- task :doc do
88
- begin
89
- require 'yard'
90
- exec 'yardoc'
91
- rescue LoadError
92
- puts 'You will need to install the latest version of Yard to generate the
93
- documentation for extlib.'
140
+ task :doc => [:rdoc]
141
+ namespace :doc do
142
+
143
+ Rake::RDocTask.new do |rdoc|
144
+ files = ["README", "LICENSE", "CHANGELOG", "lib/**/*.rb"]
145
+ rdoc.rdoc_files.add(files)
146
+ rdoc.main = "README"
147
+ rdoc.title = "Merb Docs"
148
+ rdoc.template = __DIR__ + "/tools/allison-2.0.2/lib/allison.rb"
149
+ rdoc.rdoc_dir = "doc/rdoc"
150
+ rdoc.options << "--line-numbers" << "--inline-source"
94
151
  end
95
- end
96
152
 
97
- WINDOWS = (RUBY_PLATFORM =~ /win32|mingw|bccwin|cygwin/) rescue nil
98
- SUDO = WINDOWS ? '' : ('sudo' unless ENV['SUDOLESS'])
153
+ desc "run webgen"
154
+ task :webgen do
155
+ sh %{cd doc/site; webgen}
156
+ end
99
157
 
158
+ desc "rdoc to rubyforge"
159
+ task :rubyforge do
160
+ # sh %{rake doc}
161
+ sh %{#{sudo} chmod -R 755 doc} unless windows?
162
+ sh %{/usr/bin/scp -r -p doc/rdoc/* ezmobius@rubyforge.org:/var/www/gforge-projects/merb}
163
+ end
100
164
 
101
- desc "Install #{GEM_NAME}"
102
- task :install => :package do
103
- sh %{#{SUDO} gem install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources}
104
165
  end
105
166
 
106
- if WINDOWS
107
- namespace :dev do
108
- desc 'Install for development (for windows)'
109
- task :winstall => :gem do
110
- system %{gem install --no-rdoc --no-ri -l pkg/#{GEM_NAME}-#{GEM_VERSION}.gem}
111
- end
167
+ ##############################################################################
168
+ # rSpec & rcov
169
+ ##############################################################################
170
+ desc "Run :specs, :rcov"
171
+ task :aok => [:specs, :rcov]
172
+
173
+ # desc "Run all specs"
174
+ # Spec::Rake::SpecTask.new("specs") do |t|
175
+ # t.spec_opts = ["--format", "specdoc", "--colour"]
176
+ # t.spec_files = Dir["spec/**/*_spec.rb"].sort
177
+ # end
178
+
179
+ def setup_specs(name, spec_cmd='spec', run_opts = "-c -f s")
180
+ desc "Run all specs (#{name})"
181
+ task "specs:#{name}" do
182
+ run_specs("spec/**/*_spec.rb", spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
112
183
  end
113
- end
114
184
 
115
- namespace :ci do
185
+ desc "Run private specs (#{name})"
186
+ task "specs:#{name}:private" do
187
+ run_specs("spec/private/**/*_spec.rb", spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
188
+ end
116
189
 
117
- task :prepare do
118
- rm_rf ROOT + "ci"
119
- mkdir_p ROOT + "ci"
120
- mkdir_p ROOT + "ci/doc"
121
- mkdir_p ROOT + "ci/cyclomatic"
122
- mkdir_p ROOT + "ci/token"
190
+ desc "Run public specs (#{name})"
191
+ task "specs:#{name}:public" do
192
+ run_specs("spec/public/**/*_spec.rb", spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
123
193
  end
124
194
 
125
- task :publish do
126
- out = ENV['CC_BUILD_ARTIFACTS'] || "out"
127
- mkdir_p out unless File.directory? out
195
+ # With profiling formatter
196
+ desc "Run all specs (#{name}) with profiling formatter"
197
+ task "specs:#{name}_profiled" do
198
+ run_specs("spec/**/*_spec.rb", spec_cmd, "-c -f o")
199
+ end
128
200
 
129
- mv "ci/unit_rspec_report.html", "#{out}/unit_rspec_report.html"
130
- mv "ci/unit_coverage", "#{out}/unit_coverage"
131
- mv "ci/integration_rspec_report.html", "#{out}/integration_rspec_report.html"
132
- mv "ci/integration_coverage", "#{out}/integration_coverage"
133
- mv "ci/doc", "#{out}/doc"
134
- mv "ci/cyclomatic", "#{out}/cyclomatic_complexity"
135
- mv "ci/token", "#{out}/token_complexity"
201
+ desc "Run private specs (#{name}) with profiling formatter"
202
+ task "specs:#{name}_profiled:private" do
203
+ run_specs("spec/private/**/*_spec.rb", spec_cmd, "-c -f o")
136
204
  end
137
205
 
206
+ desc "Run public specs (#{name}) with profiling formatter"
207
+ task "specs:#{name}_profiled:public" do
208
+ run_specs("spec/public/**/*_spec.rb", spec_cmd, "-c -f o")
209
+ end
210
+ end
138
211
 
139
- Spec::Rake::SpecTask.new("spec:unit" => :prepare) do |t|
140
- t.spec_opts = ["--format", "specdoc", "--format", "html:#{ROOT}/ci/unit_rspec_report.html", "--diff"]
141
- t.spec_files = Pathname.glob(ROOT + "spec/unit/**/*_spec.rb")
142
- unless ENV['NO_RCOV']
143
- t.rcov = true
144
- t.rcov_opts << '--exclude' << "spec,gems"
145
- t.rcov_opts << '--text-summary'
146
- t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
147
- t.rcov_opts << '--only-uncovered'
148
- end
212
+ setup_specs("mri", "spec")
213
+ setup_specs("jruby", "jruby -S spec")
214
+
215
+ task "specs" => ["specs:mri"]
216
+ task "specs:private" => ["specs:mri:private"]
217
+ task "specs:public" => ["specs:mri:public"]
218
+
219
+ desc "Run coverage suite"
220
+ task :rcov do
221
+ require 'fileutils'
222
+ FileUtils.rm_rf("coverage") if File.directory?("coverage")
223
+ FileUtils.mkdir("coverage")
224
+ path = File.expand_path(Dir.pwd)
225
+ files = Dir["spec/**/*_spec.rb"]
226
+ files.each do |spec|
227
+ puts "Getting coverage for #{File.expand_path(spec)}"
228
+ command = %{rcov #{File.expand_path(spec)} --aggregate #{path}/coverage/data.data --exclude ".*" --include-file "lib/merb-core(?!\/vendor)"}
229
+ command += " --no-html" unless spec == files.last
230
+ `#{command} 2>&1`
149
231
  end
232
+ end
150
233
 
151
- Spec::Rake::SpecTask.new("spec:integration" => :prepare) do |t|
152
- t.spec_opts = ["--format", "specdoc", "--format", "html:#{ROOT}/ci/integration_rspec_report.html", "--diff"]
153
- t.spec_files = Pathname.glob(ROOT + "spec/integration/**/*_spec.rb")
154
- unless ENV['NO_RCOV']
155
- t.rcov = true
156
- t.rcov_opts << '--exclude' << "spec,gems"
157
- t.rcov_opts << '--text-summary'
158
- t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
159
- t.rcov_opts << '--only-uncovered'
160
- end
234
+ desc "Run a specific spec with TASK=xxxx"
235
+ Spec::Rake::SpecTask.new("spec") do |t|
236
+ t.spec_opts = ["--format", "specdoc", "--colour"]
237
+ t.libs = ["lib", "server/lib" ]
238
+ t.spec_files = (ENV["TASK"] || '').split(',').map do |task|
239
+ "spec/**/#{task}_spec.rb"
161
240
  end
241
+ end
242
+
243
+ desc "Run all specs output html"
244
+ Spec::Rake::SpecTask.new("specs_html") do |t|
245
+ t.spec_opts = ["--format", "html"]
246
+ t.libs = ["lib", "server/lib" ]
247
+ t.spec_files = Dir["spec/**/*_spec.rb"].sort
248
+ end
249
+
250
+ # desc "RCov"
251
+ # Spec::Rake::SpecTask.new("rcov") do |t|
252
+ # t.rcov_opts = ["--exclude", "gems", "--exclude", "spec"]
253
+ # t.spec_opts = ["--format", "specdoc", "--colour"]
254
+ # t.spec_files = Dir["spec/**/*_spec.rb"].sort
255
+ # t.libs = ["lib", "server/lib"]
256
+ # t.rcov = true
257
+ # end
258
+
259
+ STATS_DIRECTORIES = [
260
+ ['Code', 'lib/'],
261
+ ['Unit tests', 'spec']
262
+ ].collect { |name, dir| [ name, "./#{dir}" ] }.
263
+ select { |name, dir| File.directory?(dir) }
264
+
265
+ desc "Report code statistics (KLOCs, etc) from the application"
266
+ task :stats do
267
+ require __DIR__ + "/tools/code_statistics"
268
+ # require "extra/stats"
269
+ verbose = true
270
+ CodeStatistics.new(*STATS_DIRECTORIES).to_s
271
+ end
162
272
 
163
- task :spec do
164
- Rake::Task["ci:spec:unit"].invoke
165
- mv ROOT + "coverage", ROOT + "ci/unit_coverage"
273
+ ##############################################################################
274
+ # SYNTAX CHECKING
275
+ ##############################################################################
276
+
277
+ task :check_syntax do
278
+ `find . -name "*.rb" |xargs -n1 ruby -c |grep -v "Syntax OK"`
279
+ puts "* Done"
280
+ end
281
+
282
+ ##############################################################################
283
+ # SVN
284
+ ##############################################################################
285
+ namespace :repo do
286
+
287
+ desc "Add new files to repository"
288
+ task :add do
289
+ if File.directory?(".git")
290
+ system "git add *"
291
+ elsif File.directory?(".svn")
292
+ system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add"
293
+ end
294
+ end
166
295
 
167
- Rake::Task["ci:spec:integration"].invoke
168
- mv ROOT + "coverage", ROOT + "ci/integration_coverage"
296
+ desc "Fetch changes from master repository"
297
+ task :rebase do
298
+ if File.directory?(".git")
299
+ system "git stash ; git svn rebase ; git stash apply"
300
+ elsif File.directory?(".svn")
301
+ system "svn update"
302
+ end
169
303
  end
170
304
 
171
- task :doc do
172
- require 'yardoc'
173
- sh 'yardoc'
305
+ desc "commit modified changes to the repository"
306
+ task :commit do
307
+ if File.directory?(".git")
308
+ system "git commit"
309
+ elsif File.directory?(".svn")
310
+ system "svn commit"
311
+ end
174
312
  end
175
313
 
176
- task :saikuro => :prepare do
177
- system "saikuro -c -i lib -y 0 -w 10 -e 15 -o ci/cyclomatic"
178
- mv 'ci/cyclomatic/index_cyclo.html', 'ci/cyclomatic/index.html'
314
+ end
179
315
 
180
- system "saikuro -t -i lib -y 0 -w 20 -e 30 -o ci/token"
181
- mv 'ci/token/index_token.html', 'ci/token/index.html'
316
+ # Run specific tests or test files. Searches nested spec directories as well.
317
+ #
318
+ # Based on a technique popularized by Geoffrey Grosenbach
319
+ rule "" do |t|
320
+ spec_cmd = (RUBY_PLATFORM =~ /java/) ? "jruby -S spec" : "spec"
321
+ # spec:spec_file:spec_name
322
+ if /spec:(.*)$/.match(t.name)
323
+ arguments = t.name.split(':')
324
+
325
+ file_name = arguments[1]
326
+ spec_name = arguments[2..-1]
327
+
328
+ spec_filename = "#{file_name}_spec.rb"
329
+ specs = Dir["spec/**/#{spec_filename}"]
330
+
331
+ if path = specs.detect { |f| spec_filename == File.basename(f) }
332
+ run_file_name = path
333
+ else
334
+ puts "No specs found for #{t.name.inspect}"
335
+ exit
336
+ end
337
+
338
+ example = " -e '#{spec_name}'" unless spec_name.empty?
339
+
340
+ sh "#{spec_cmd} #{run_file_name} --format specdoc --colour #{example}"
182
341
  end
183
342
  end
184
343
 
185
- task :ci => ["ci:spec", "ci:doc", "ci:saikuro", :install, :publish]
344
+
345
+ namespace :tools do
346
+ namespace :tags do
347
+ desc "Generates Emacs tags using Exuberant Ctags."
348
+ task :emacs do
349
+ sh "ctags -e --Ruby-kinds=-f -o TAGS -R lib"
350
+ end
351
+ end
352
+ end