thorero 0.9.4.4 → 0.9.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (298) hide show
  1. data/LICENSE +1 -1
  2. data/README +21 -0
  3. data/Rakefile +275 -108
  4. data/TODO +0 -0
  5. data/bin/merb +12 -0
  6. data/bin/merb-specs +5 -0
  7. data/docs/bootloading.dox +58 -0
  8. data/docs/documentation_standards +40 -0
  9. data/docs/merb-core-call-stack-diagram.mmap +0 -0
  10. data/docs/merb-core-call-stack-diagram.pdf +0 -0
  11. data/docs/merb-core-call-stack-diagram.png +0 -0
  12. data/docs/new_render_api +51 -0
  13. data/lib/merb-core.rb +603 -0
  14. data/lib/merb-core/autoload.rb +32 -0
  15. data/lib/merb-core/bootloader.rb +708 -0
  16. data/lib/merb-core/config.rb +303 -0
  17. data/lib/merb-core/constants.rb +43 -0
  18. data/lib/merb-core/controller/abstract_controller.rb +578 -0
  19. data/lib/merb-core/controller/exceptions.rb +302 -0
  20. data/lib/merb-core/controller/merb_controller.rb +256 -0
  21. data/lib/merb-core/controller/mime.rb +106 -0
  22. data/lib/merb-core/controller/mixins/authentication.rb +87 -0
  23. data/lib/merb-core/controller/mixins/controller.rb +290 -0
  24. data/lib/merb-core/controller/mixins/render.rb +481 -0
  25. data/lib/merb-core/controller/mixins/responder.rb +472 -0
  26. data/lib/merb-core/controller/template.rb +254 -0
  27. data/lib/merb-core/core_ext.rb +8 -0
  28. data/lib/merb-core/core_ext/kernel.rb +319 -0
  29. data/lib/merb-core/dispatch/cookies.rb +91 -0
  30. data/lib/merb-core/dispatch/dispatcher.rb +278 -0
  31. data/lib/merb-core/dispatch/exceptions.html.erb +303 -0
  32. data/lib/merb-core/dispatch/request.rb +603 -0
  33. data/lib/merb-core/dispatch/router.rb +179 -0
  34. data/lib/merb-core/dispatch/router/behavior.rb +867 -0
  35. data/lib/merb-core/dispatch/router/cached_proc.rb +52 -0
  36. data/lib/merb-core/dispatch/router/route.rb +321 -0
  37. data/lib/merb-core/dispatch/session.rb +78 -0
  38. data/lib/merb-core/dispatch/session/cookie.rb +168 -0
  39. data/lib/merb-core/dispatch/session/memcached.rb +184 -0
  40. data/lib/merb-core/dispatch/session/memory.rb +241 -0
  41. data/lib/merb-core/dispatch/worker.rb +28 -0
  42. data/lib/merb-core/gem_ext/erubis.rb +77 -0
  43. data/lib/{extlib → merb-core}/logger.rb +2 -2
  44. data/lib/merb-core/plugins.rb +59 -0
  45. data/lib/merb-core/rack.rb +21 -0
  46. data/lib/merb-core/rack/adapter.rb +44 -0
  47. data/lib/merb-core/rack/adapter/ebb.rb +25 -0
  48. data/lib/merb-core/rack/adapter/evented_mongrel.rb +26 -0
  49. data/lib/merb-core/rack/adapter/fcgi.rb +17 -0
  50. data/lib/merb-core/rack/adapter/irb.rb +118 -0
  51. data/lib/merb-core/rack/adapter/mongrel.rb +26 -0
  52. data/lib/merb-core/rack/adapter/runner.rb +28 -0
  53. data/lib/merb-core/rack/adapter/swiftiplied_mongrel.rb +26 -0
  54. data/lib/merb-core/rack/adapter/thin.rb +39 -0
  55. data/lib/merb-core/rack/adapter/thin_turbo.rb +24 -0
  56. data/lib/merb-core/rack/adapter/webrick.rb +36 -0
  57. data/lib/merb-core/rack/application.rb +18 -0
  58. data/lib/merb-core/rack/handler/mongrel.rb +97 -0
  59. data/lib/merb-core/rack/middleware.rb +26 -0
  60. data/lib/merb-core/rack/middleware/path_prefix.rb +31 -0
  61. data/lib/merb-core/rack/middleware/profiler.rb +19 -0
  62. data/lib/merb-core/rack/middleware/static.rb +45 -0
  63. data/lib/merb-core/server.rb +252 -0
  64. data/lib/merb-core/tasks/audit.rake +68 -0
  65. data/lib/merb-core/tasks/merb.rb +1 -0
  66. data/lib/merb-core/tasks/merb_rake_helper.rb +12 -0
  67. data/lib/merb-core/test.rb +11 -0
  68. data/lib/merb-core/test/helpers.rb +9 -0
  69. data/lib/merb-core/test/helpers/controller_helper.rb +8 -0
  70. data/lib/merb-core/test/helpers/multipart_request_helper.rb +175 -0
  71. data/lib/merb-core/test/helpers/request_helper.rb +344 -0
  72. data/lib/merb-core/test/helpers/route_helper.rb +33 -0
  73. data/lib/merb-core/test/helpers/view_helper.rb +121 -0
  74. data/lib/merb-core/test/matchers.rb +9 -0
  75. data/lib/merb-core/test/matchers/controller_matchers.rb +319 -0
  76. data/lib/merb-core/test/matchers/route_matchers.rb +136 -0
  77. data/lib/merb-core/test/matchers/view_matchers.rb +335 -0
  78. data/lib/merb-core/test/run_specs.rb +47 -0
  79. data/lib/merb-core/test/tasks/spectasks.rb +68 -0
  80. data/lib/merb-core/test/test_ext/hpricot.rb +32 -0
  81. data/lib/merb-core/test/test_ext/object.rb +14 -0
  82. data/lib/merb-core/test/test_ext/string.rb +14 -0
  83. data/lib/merb-core/vendor/facets.rb +2 -0
  84. data/lib/merb-core/vendor/facets/dictionary.rb +433 -0
  85. data/lib/merb-core/vendor/facets/inflect.rb +345 -0
  86. data/lib/merb-core/version.rb +11 -0
  87. data/spec/private/config/adapter_spec.rb +32 -0
  88. data/spec/private/config/config_spec.rb +202 -0
  89. data/spec/private/config/environment_spec.rb +13 -0
  90. data/spec/private/config/spec_helper.rb +1 -0
  91. data/spec/private/core_ext/kernel_spec.rb +169 -0
  92. data/spec/private/dispatch/bootloader_spec.rb +24 -0
  93. data/spec/private/dispatch/cookies_spec.rb +107 -0
  94. data/spec/private/dispatch/dispatch_spec.rb +35 -0
  95. data/spec/private/dispatch/fixture/app/controllers/application.rb +4 -0
  96. data/spec/private/dispatch/fixture/app/controllers/exceptions.rb +27 -0
  97. data/spec/private/dispatch/fixture/app/controllers/foo.rb +21 -0
  98. data/spec/private/dispatch/fixture/app/helpers/global_helpers.rb +8 -0
  99. data/spec/private/dispatch/fixture/app/views/exeptions/client_error.html.erb +37 -0
  100. data/spec/private/dispatch/fixture/app/views/exeptions/internal_server_error.html.erb +216 -0
  101. data/spec/private/dispatch/fixture/app/views/exeptions/not_acceptable.html.erb +38 -0
  102. data/spec/private/dispatch/fixture/app/views/exeptions/not_found.html.erb +40 -0
  103. data/spec/private/dispatch/fixture/app/views/foo/bar.html.erb +0 -0
  104. data/spec/private/dispatch/fixture/app/views/layout/application.html.erb +11 -0
  105. data/spec/private/dispatch/fixture/config/black_hole.rb +12 -0
  106. data/spec/private/dispatch/fixture/config/environments/development.rb +6 -0
  107. data/spec/private/dispatch/fixture/config/environments/production.rb +5 -0
  108. data/spec/private/dispatch/fixture/config/environments/test.rb +6 -0
  109. data/spec/private/dispatch/fixture/config/init.rb +45 -0
  110. data/spec/private/dispatch/fixture/config/rack.rb +11 -0
  111. data/spec/private/dispatch/fixture/config/router.rb +35 -0
  112. data/spec/private/dispatch/fixture/log/merb_test.log +1874 -0
  113. data/spec/private/dispatch/fixture/public/images/merb.jpg +0 -0
  114. data/spec/private/dispatch/fixture/public/merb.fcgi +4 -0
  115. data/spec/private/dispatch/fixture/public/stylesheets/master.css +119 -0
  116. data/spec/private/dispatch/route_params_spec.rb +24 -0
  117. data/spec/private/dispatch/session_mixin_spec.rb +47 -0
  118. data/spec/private/dispatch/spec_helper.rb +1 -0
  119. data/spec/private/plugins/plugin_spec.rb +166 -0
  120. data/spec/private/rack/application_spec.rb +49 -0
  121. data/spec/private/router/behavior_spec.rb +60 -0
  122. data/spec/private/router/fixture/log/merb_test.log +139 -0
  123. data/spec/private/router/route_spec.rb +414 -0
  124. data/spec/private/router/router_spec.rb +175 -0
  125. data/spec/private/vendor/facets/plural_spec.rb +564 -0
  126. data/spec/private/vendor/facets/singular_spec.rb +489 -0
  127. data/spec/public/DEFINITIONS +11 -0
  128. data/spec/public/abstract_controller/controllers/alt_views/layout/application.erb +1 -0
  129. data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb +1 -0
  130. data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb +1 -0
  131. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb +1 -0
  132. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb +1 -0
  133. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
  134. data/spec/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb +1 -0
  135. data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb +1 -0
  136. data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb +1 -0
  137. data/spec/public/abstract_controller/controllers/cousins.rb +41 -0
  138. data/spec/public/abstract_controller/controllers/display.rb +54 -0
  139. data/spec/public/abstract_controller/controllers/filters.rb +193 -0
  140. data/spec/public/abstract_controller/controllers/helpers.rb +41 -0
  141. data/spec/public/abstract_controller/controllers/partial.rb +121 -0
  142. data/spec/public/abstract_controller/controllers/render.rb +113 -0
  143. data/spec/public/abstract_controller/controllers/views/helpers/capture/index.erb +1 -0
  144. data/spec/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb +1 -0
  145. data/spec/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb +1 -0
  146. data/spec/public/abstract_controller/controllers/views/helpers/concat/index.erb +1 -0
  147. data/spec/public/abstract_controller/controllers/views/layout/alt.erb +1 -0
  148. data/spec/public/abstract_controller/controllers/views/layout/custom.erb +1 -0
  149. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb +1 -0
  150. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb +1 -0
  151. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb +1 -0
  152. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_app_layout/index.erb +0 -0
  153. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb +1 -0
  154. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
  155. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb +1 -0
  156. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_throw_contents/index.erb +1 -0
  157. data/spec/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb +1 -0
  158. data/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb +1 -0
  159. data/spec/public/abstract_controller/controllers/views/partial/basic_partial/index.erb +1 -0
  160. data/spec/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb +1 -0
  161. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb +1 -0
  162. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb +1 -0
  163. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/index.erb +1 -0
  164. data/spec/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb +1 -0
  165. data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb +1 -0
  166. data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb +1 -0
  167. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb +1 -0
  168. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb +1 -0
  169. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb +1 -0
  170. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb +1 -0
  171. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb +1 -0
  172. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb +1 -0
  173. data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb +1 -0
  174. data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb +1 -0
  175. data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb +1 -0
  176. data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb +1 -0
  177. data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb +1 -0
  178. data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb +1 -0
  179. data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb +1 -0
  180. data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb +1 -0
  181. data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb +1 -0
  182. data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb +1 -0
  183. data/spec/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb +1 -0
  184. data/spec/public/abstract_controller/controllers/views/partial/with_partial/index.erb +1 -0
  185. data/spec/public/abstract_controller/controllers/views/test_display/foo.html.erb +1 -0
  186. data/spec/public/abstract_controller/controllers/views/test_render/foo.html.erb +0 -0
  187. data/spec/public/abstract_controller/controllers/views/wonderful/index.erb +1 -0
  188. data/spec/public/abstract_controller/display_spec.rb +33 -0
  189. data/spec/public/abstract_controller/filter_spec.rb +106 -0
  190. data/spec/public/abstract_controller/helper_spec.rb +21 -0
  191. data/spec/public/abstract_controller/partial_spec.rb +61 -0
  192. data/spec/public/abstract_controller/render_spec.rb +90 -0
  193. data/spec/public/abstract_controller/spec_helper.rb +31 -0
  194. data/spec/public/boot_loader/boot_loader_spec.rb +33 -0
  195. data/spec/public/boot_loader/spec_helper.rb +1 -0
  196. data/spec/public/controller/authentication_spec.rb +103 -0
  197. data/spec/public/controller/base_spec.rb +36 -0
  198. data/spec/public/controller/controllers/authentication.rb +45 -0
  199. data/spec/public/controller/controllers/base.rb +36 -0
  200. data/spec/public/controller/controllers/display.rb +118 -0
  201. data/spec/public/controller/controllers/redirect.rb +30 -0
  202. data/spec/public/controller/controllers/responder.rb +93 -0
  203. data/spec/public/controller/controllers/url.rb +7 -0
  204. data/spec/public/controller/controllers/views/layout/custom.html.erb +1 -0
  205. data/spec/public/controller/controllers/views/layout/custom_arg.html.erb +1 -0
  206. data/spec/public/controller/controllers/views/layout/custom_arg.json.erb +1 -0
  207. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb +1 -0
  208. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb +1 -0
  209. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb +1 -0
  210. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb +1 -0
  211. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb +1 -0
  212. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb +1 -0
  213. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb +1 -0
  214. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb +1 -0
  215. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb +1 -0
  216. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb +1 -0
  217. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb +1 -0
  218. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb +1 -0
  219. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb +1 -0
  220. data/spec/public/controller/display_spec.rb +84 -0
  221. data/spec/public/controller/redirect_spec.rb +27 -0
  222. data/spec/public/controller/responder_spec.rb +163 -0
  223. data/spec/public/controller/spec_helper.rb +11 -0
  224. data/spec/public/controller/url_spec.rb +180 -0
  225. data/spec/public/core/merb_core_spec.rb +45 -0
  226. data/spec/public/core_ext/class_spec.rb +91 -0
  227. data/spec/public/core_ext/fixtures/core_ext_dependency.rb +2 -0
  228. data/spec/public/core_ext/kernel_spec.rb +9 -0
  229. data/spec/public/core_ext/spec_helper.rb +1 -0
  230. data/spec/public/directory_structure/directory/app/controllers/application.rb +3 -0
  231. data/spec/public/directory_structure/directory/app/controllers/base.rb +13 -0
  232. data/spec/public/directory_structure/directory/app/controllers/custom.rb +19 -0
  233. data/spec/public/directory_structure/directory/app/views/base/template.html.erb +1 -0
  234. data/spec/public/directory_structure/directory/app/views/wonderful/template.erb +1 -0
  235. data/spec/public/directory_structure/directory/config/router.rb +3 -0
  236. data/spec/public/directory_structure/directory/log/merb_test.log +562 -0
  237. data/spec/public/directory_structure/directory_spec.rb +44 -0
  238. data/spec/public/logger/logger_spec.rb +181 -0
  239. data/spec/public/logger/spec_helper.rb +1 -0
  240. data/spec/public/reloading/directory/app/controllers/application.rb +3 -0
  241. data/spec/public/reloading/directory/app/controllers/reload.rb +6 -0
  242. data/spec/public/reloading/directory/config/init.rb +2 -0
  243. data/spec/public/reloading/directory/log/merb_test.log +138 -0
  244. data/spec/public/reloading/reload_spec.rb +103 -0
  245. data/spec/public/request/multipart_spec.rb +41 -0
  246. data/spec/public/request/request_spec.rb +228 -0
  247. data/spec/public/router/default_spec.rb +21 -0
  248. data/spec/public/router/deferred_spec.rb +22 -0
  249. data/spec/public/router/fixation_spec.rb +27 -0
  250. data/spec/public/router/fixture/log/merb_test.log +1556 -0
  251. data/spec/public/router/namespace_spec.rb +113 -0
  252. data/spec/public/router/nested_matches_spec.rb +97 -0
  253. data/spec/public/router/nested_resources_spec.rb +41 -0
  254. data/spec/public/router/resource_spec.rb +37 -0
  255. data/spec/public/router/resources_spec.rb +82 -0
  256. data/spec/public/router/spec_helper.rb +90 -0
  257. data/spec/public/router/special_spec.rb +61 -0
  258. data/spec/public/router/string_spec.rb +61 -0
  259. data/spec/public/template/template_spec.rb +104 -0
  260. data/spec/public/template/templates/error.html.erb +2 -0
  261. data/spec/public/template/templates/template.html.erb +1 -0
  262. data/spec/public/template/templates/template.html.myt +1 -0
  263. data/spec/public/test/controller_matchers_spec.rb +402 -0
  264. data/spec/public/test/controllers/controller_assertion_mock.rb +7 -0
  265. data/spec/public/test/controllers/dispatch_controller.rb +11 -0
  266. data/spec/public/test/controllers/spec_helper_controller.rb +38 -0
  267. data/spec/public/test/multipart_request_helper_spec.rb +159 -0
  268. data/spec/public/test/multipart_upload_text_file.txt +1 -0
  269. data/spec/public/test/request_helper_spec.rb +221 -0
  270. data/spec/public/test/route_helper_spec.rb +71 -0
  271. data/spec/public/test/route_matchers_spec.rb +162 -0
  272. data/spec/public/test/view_helper_spec.rb +96 -0
  273. data/spec/public/test/view_matchers_spec.rb +183 -0
  274. data/spec/spec_helper.rb +68 -0
  275. metadata +493 -41
  276. data/README.txt +0 -3
  277. data/lib/extlib.rb +0 -32
  278. data/lib/extlib/assertions.rb +0 -8
  279. data/lib/extlib/blank.rb +0 -42
  280. data/lib/extlib/class.rb +0 -175
  281. data/lib/extlib/hash.rb +0 -410
  282. data/lib/extlib/hook.rb +0 -366
  283. data/lib/extlib/inflection.rb +0 -141
  284. data/lib/extlib/lazy_array.rb +0 -106
  285. data/lib/extlib/mash.rb +0 -143
  286. data/lib/extlib/module.rb +0 -37
  287. data/lib/extlib/object.rb +0 -165
  288. data/lib/extlib/object_space.rb +0 -13
  289. data/lib/extlib/pathname.rb +0 -5
  290. data/lib/extlib/pooling.rb +0 -233
  291. data/lib/extlib/rubygems.rb +0 -38
  292. data/lib/extlib/simple_set.rb +0 -39
  293. data/lib/extlib/string.rb +0 -132
  294. data/lib/extlib/struct.rb +0 -8
  295. data/lib/extlib/tasks/release.rb +0 -9
  296. data/lib/extlib/time.rb +0 -12
  297. data/lib/extlib/version.rb +0 -3
  298. data/lib/extlib/virtual_file.rb +0 -10
data/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