merb-core 0.9.2

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 (246) hide show
  1. data/LICENSE +20 -0
  2. data/README +21 -0
  3. data/Rakefile +285 -0
  4. data/TODO +0 -0
  5. data/bin/merb +8 -0
  6. data/bin/merb-specs +5 -0
  7. data/docs/bootloading.dox +57 -0
  8. data/docs/documentation_standards +40 -0
  9. data/docs/new_render_api +51 -0
  10. data/lib/merb-core.rb +304 -0
  11. data/lib/merb-core/autoload.rb +29 -0
  12. data/lib/merb-core/bootloader.rb +601 -0
  13. data/lib/merb-core/config.rb +284 -0
  14. data/lib/merb-core/constants.rb +43 -0
  15. data/lib/merb-core/controller/abstract_controller.rb +531 -0
  16. data/lib/merb-core/controller/exceptions.rb +257 -0
  17. data/lib/merb-core/controller/merb_controller.rb +214 -0
  18. data/lib/merb-core/controller/mime.rb +88 -0
  19. data/lib/merb-core/controller/mixins/controller.rb +262 -0
  20. data/lib/merb-core/controller/mixins/render.rb +324 -0
  21. data/lib/merb-core/controller/mixins/responder.rb +464 -0
  22. data/lib/merb-core/controller/template.rb +205 -0
  23. data/lib/merb-core/core_ext.rb +12 -0
  24. data/lib/merb-core/core_ext/class.rb +192 -0
  25. data/lib/merb-core/core_ext/hash.rb +422 -0
  26. data/lib/merb-core/core_ext/kernel.rb +304 -0
  27. data/lib/merb-core/core_ext/mash.rb +154 -0
  28. data/lib/merb-core/core_ext/object.rb +136 -0
  29. data/lib/merb-core/core_ext/object_space.rb +14 -0
  30. data/lib/merb-core/core_ext/rubygems.rb +28 -0
  31. data/lib/merb-core/core_ext/set.rb +41 -0
  32. data/lib/merb-core/core_ext/string.rb +69 -0
  33. data/lib/merb-core/dispatch/cookies.rb +92 -0
  34. data/lib/merb-core/dispatch/dispatcher.rb +233 -0
  35. data/lib/merb-core/dispatch/exceptions.html.erb +297 -0
  36. data/lib/merb-core/dispatch/request.rb +560 -0
  37. data/lib/merb-core/dispatch/router.rb +141 -0
  38. data/lib/merb-core/dispatch/router/behavior.rb +777 -0
  39. data/lib/merb-core/dispatch/router/cached_proc.rb +52 -0
  40. data/lib/merb-core/dispatch/router/route.rb +212 -0
  41. data/lib/merb-core/dispatch/session.rb +28 -0
  42. data/lib/merb-core/dispatch/session/cookie.rb +166 -0
  43. data/lib/merb-core/dispatch/session/memcached.rb +161 -0
  44. data/lib/merb-core/dispatch/session/memory.rb +234 -0
  45. data/lib/merb-core/gem_ext/erubis.rb +19 -0
  46. data/lib/merb-core/logger.rb +230 -0
  47. data/lib/merb-core/plugins.rb +25 -0
  48. data/lib/merb-core/rack.rb +15 -0
  49. data/lib/merb-core/rack/adapter.rb +42 -0
  50. data/lib/merb-core/rack/adapter/ebb.rb +22 -0
  51. data/lib/merb-core/rack/adapter/evented_mongrel.rb +24 -0
  52. data/lib/merb-core/rack/adapter/fcgi.rb +16 -0
  53. data/lib/merb-core/rack/adapter/irb.rb +108 -0
  54. data/lib/merb-core/rack/adapter/mongrel.rb +25 -0
  55. data/lib/merb-core/rack/adapter/runner.rb +27 -0
  56. data/lib/merb-core/rack/adapter/thin.rb +27 -0
  57. data/lib/merb-core/rack/adapter/webrick.rb +35 -0
  58. data/lib/merb-core/rack/application.rb +77 -0
  59. data/lib/merb-core/rack/handler/mongrel.rb +97 -0
  60. data/lib/merb-core/server.rb +184 -0
  61. data/lib/merb-core/test.rb +10 -0
  62. data/lib/merb-core/test/helpers.rb +9 -0
  63. data/lib/merb-core/test/helpers/controller_helper.rb +8 -0
  64. data/lib/merb-core/test/helpers/multipart_request_helper.rb +175 -0
  65. data/lib/merb-core/test/helpers/request_helper.rb +257 -0
  66. data/lib/merb-core/test/helpers/route_helper.rb +33 -0
  67. data/lib/merb-core/test/helpers/view_helper.rb +121 -0
  68. data/lib/merb-core/test/matchers.rb +9 -0
  69. data/lib/merb-core/test/matchers/controller_matchers.rb +269 -0
  70. data/lib/merb-core/test/matchers/route_matchers.rb +136 -0
  71. data/lib/merb-core/test/matchers/view_matchers.rb +293 -0
  72. data/lib/merb-core/test/run_specs.rb +38 -0
  73. data/lib/merb-core/test/tasks/spectasks.rb +39 -0
  74. data/lib/merb-core/test/test_ext/hpricot.rb +32 -0
  75. data/lib/merb-core/test/test_ext/object.rb +14 -0
  76. data/lib/merb-core/vendor/facets.rb +2 -0
  77. data/lib/merb-core/vendor/facets/dictionary.rb +433 -0
  78. data/lib/merb-core/vendor/facets/inflect.rb +211 -0
  79. data/lib/merb-core/version.rb +11 -0
  80. data/spec/private/config/adapter_spec.rb +32 -0
  81. data/spec/private/config/config_spec.rb +139 -0
  82. data/spec/private/config/environment_spec.rb +13 -0
  83. data/spec/private/config/spec_helper.rb +1 -0
  84. data/spec/private/core_ext/hash_spec.rb +506 -0
  85. data/spec/private/core_ext/kernel_spec.rb +46 -0
  86. data/spec/private/core_ext/object_spec.rb +39 -0
  87. data/spec/private/core_ext/set_spec.rb +26 -0
  88. data/spec/private/core_ext/string_spec.rb +9 -0
  89. data/spec/private/dispatch/cookies_spec.rb +107 -0
  90. data/spec/private/dispatch/dispatch_spec.rb +26 -0
  91. data/spec/private/dispatch/fixture/app/controllers/application.rb +4 -0
  92. data/spec/private/dispatch/fixture/app/controllers/exceptions.rb +27 -0
  93. data/spec/private/dispatch/fixture/app/controllers/foo.rb +21 -0
  94. data/spec/private/dispatch/fixture/app/helpers/global_helpers.rb +8 -0
  95. data/spec/private/dispatch/fixture/app/views/exeptions/client_error.html.erb +37 -0
  96. data/spec/private/dispatch/fixture/app/views/exeptions/internal_server_error.html.erb +216 -0
  97. data/spec/private/dispatch/fixture/app/views/exeptions/not_acceptable.html.erb +38 -0
  98. data/spec/private/dispatch/fixture/app/views/exeptions/not_found.html.erb +40 -0
  99. data/spec/private/dispatch/fixture/app/views/foo/bar.html.erb +0 -0
  100. data/spec/private/dispatch/fixture/app/views/layout/application.html.erb +11 -0
  101. data/spec/private/dispatch/fixture/config/environments/development.rb +6 -0
  102. data/spec/private/dispatch/fixture/config/environments/production.rb +5 -0
  103. data/spec/private/dispatch/fixture/config/environments/test.rb +6 -0
  104. data/spec/private/dispatch/fixture/config/init.rb +45 -0
  105. data/spec/private/dispatch/fixture/config/rack.rb +1 -0
  106. data/spec/private/dispatch/fixture/config/router.rb +35 -0
  107. data/spec/private/dispatch/fixture/log/development.log +1 -0
  108. data/spec/private/dispatch/fixture/log/merb.4000.pid +1 -0
  109. data/spec/private/dispatch/fixture/log/merb_test.log +2040 -0
  110. data/spec/private/dispatch/fixture/log/production.log +1 -0
  111. data/spec/private/dispatch/fixture/merb.4000.pid +1 -0
  112. data/spec/private/dispatch/fixture/public/images/merb.jpg +0 -0
  113. data/spec/private/dispatch/fixture/public/merb.fcgi +4 -0
  114. data/spec/private/dispatch/fixture/public/stylesheets/master.css +119 -0
  115. data/spec/private/dispatch/route_params_spec.rb +24 -0
  116. data/spec/private/dispatch/spec_helper.rb +1 -0
  117. data/spec/private/plugins/plugin_spec.rb +81 -0
  118. data/spec/private/rack/application_spec.rb +43 -0
  119. data/spec/public/DEFINITIONS +11 -0
  120. data/spec/public/abstract_controller/controllers/alt_views/layout/application.erb +1 -0
  121. data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb +1 -0
  122. data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb +1 -0
  123. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb +1 -0
  124. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb +1 -0
  125. data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
  126. data/spec/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb +1 -0
  127. data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb +1 -0
  128. data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb +1 -0
  129. data/spec/public/abstract_controller/controllers/display.rb +54 -0
  130. data/spec/public/abstract_controller/controllers/filters.rb +167 -0
  131. data/spec/public/abstract_controller/controllers/helpers.rb +31 -0
  132. data/spec/public/abstract_controller/controllers/partial.rb +106 -0
  133. data/spec/public/abstract_controller/controllers/render.rb +86 -0
  134. data/spec/public/abstract_controller/controllers/views/helpers/capture/index.erb +1 -0
  135. data/spec/public/abstract_controller/controllers/views/helpers/concat/index.erb +1 -0
  136. data/spec/public/abstract_controller/controllers/views/layout/alt.erb +1 -0
  137. data/spec/public/abstract_controller/controllers/views/layout/custom.erb +1 -0
  138. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb +1 -0
  139. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb +1 -0
  140. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb +1 -0
  141. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_app_layout/index.erb +0 -0
  142. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb +1 -0
  143. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
  144. data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb +1 -0
  145. data/spec/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb +1 -0
  146. data/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb +1 -0
  147. data/spec/public/abstract_controller/controllers/views/partial/basic_partial/index.erb +1 -0
  148. data/spec/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb +1 -0
  149. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb +1 -0
  150. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb +1 -0
  151. data/spec/public/abstract_controller/controllers/views/partial/nested_partial/index.erb +1 -0
  152. data/spec/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb +1 -0
  153. data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb +1 -0
  154. data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb +1 -0
  155. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb +1 -0
  156. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb +1 -0
  157. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb +1 -0
  158. data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb +1 -0
  159. data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb +1 -0
  160. data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb +1 -0
  161. data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb +1 -0
  162. data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb +1 -0
  163. data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb +1 -0
  164. data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb +1 -0
  165. data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb +1 -0
  166. data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb +1 -0
  167. data/spec/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb +1 -0
  168. data/spec/public/abstract_controller/controllers/views/partial/with_partial/index.erb +1 -0
  169. data/spec/public/abstract_controller/controllers/views/test_display/foo.html.erb +1 -0
  170. data/spec/public/abstract_controller/controllers/views/test_render/foo.html.erb +0 -0
  171. data/spec/public/abstract_controller/controllers/views/wonderful/index.erb +1 -0
  172. data/spec/public/abstract_controller/display_spec.rb +33 -0
  173. data/spec/public/abstract_controller/filter_spec.rb +80 -0
  174. data/spec/public/abstract_controller/helper_spec.rb +13 -0
  175. data/spec/public/abstract_controller/partial_spec.rb +53 -0
  176. data/spec/public/abstract_controller/render_spec.rb +70 -0
  177. data/spec/public/abstract_controller/spec_helper.rb +27 -0
  178. data/spec/public/boot_loader/boot_loader_spec.rb +33 -0
  179. data/spec/public/boot_loader/spec_helper.rb +1 -0
  180. data/spec/public/controller/base_spec.rb +31 -0
  181. data/spec/public/controller/controllers/base.rb +41 -0
  182. data/spec/public/controller/controllers/display.rb +40 -0
  183. data/spec/public/controller/controllers/responder.rb +67 -0
  184. data/spec/public/controller/controllers/url.rb +7 -0
  185. data/spec/public/controller/controllers/views/layout/custom.html.erb +1 -0
  186. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb +1 -0
  187. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb +1 -0
  188. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb +1 -0
  189. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb +1 -0
  190. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb +1 -0
  191. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb +1 -0
  192. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb +1 -0
  193. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb +1 -0
  194. data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb +1 -0
  195. data/spec/public/controller/display_spec.rb +34 -0
  196. data/spec/public/controller/log/merb.4000.pid +1 -0
  197. data/spec/public/controller/responder_spec.rb +95 -0
  198. data/spec/public/controller/spec_helper.rb +9 -0
  199. data/spec/public/controller/url_spec.rb +152 -0
  200. data/spec/public/directory_structure/directory/app/controllers/application.rb +3 -0
  201. data/spec/public/directory_structure/directory/app/controllers/base.rb +13 -0
  202. data/spec/public/directory_structure/directory/app/controllers/custom.rb +19 -0
  203. data/spec/public/directory_structure/directory/app/views/base/template.html.erb +1 -0
  204. data/spec/public/directory_structure/directory/app/views/wonderful/template.erb +1 -0
  205. data/spec/public/directory_structure/directory/config/router.rb +3 -0
  206. data/spec/public/directory_structure/directory/log/merb.4000.pid +1 -0
  207. data/spec/public/directory_structure/directory/log/merb_test.log +265 -0
  208. data/spec/public/directory_structure/directory/merb.4000.pid +1 -0
  209. data/spec/public/directory_structure/directory_spec.rb +44 -0
  210. data/spec/public/logger/logger_spec.rb +175 -0
  211. data/spec/public/logger/spec_helper.rb +1 -0
  212. data/spec/public/reloading/directory/app/controllers/application.rb +3 -0
  213. data/spec/public/reloading/directory/app/controllers/reload.rb +6 -0
  214. data/spec/public/reloading/directory/config/init.rb +2 -0
  215. data/spec/public/reloading/directory/log/merb.4000.pid +1 -0
  216. data/spec/public/reloading/directory/log/merb_test.log +59 -0
  217. data/spec/public/reloading/directory/merb.4000.pid +1 -0
  218. data/spec/public/reloading/reload_spec.rb +80 -0
  219. data/spec/public/request/multipart_spec.rb +15 -0
  220. data/spec/public/request/request_spec.rb +207 -0
  221. data/spec/public/router/default_spec.rb +21 -0
  222. data/spec/public/router/deferred_spec.rb +22 -0
  223. data/spec/public/router/namespace_spec.rb +113 -0
  224. data/spec/public/router/nested_resources_spec.rb +34 -0
  225. data/spec/public/router/resource_spec.rb +45 -0
  226. data/spec/public/router/resources_spec.rb +57 -0
  227. data/spec/public/router/spec_helper.rb +72 -0
  228. data/spec/public/router/special_spec.rb +44 -0
  229. data/spec/public/router/string_spec.rb +61 -0
  230. data/spec/public/template/template_spec.rb +92 -0
  231. data/spec/public/template/templates/error.html.erb +2 -0
  232. data/spec/public/template/templates/template.html.erb +1 -0
  233. data/spec/public/template/templates/template.html.myt +1 -0
  234. data/spec/public/test/controller_matchers_spec.rb +378 -0
  235. data/spec/public/test/controllers/controller_assertion_mock.rb +7 -0
  236. data/spec/public/test/controllers/dispatch_controller.rb +11 -0
  237. data/spec/public/test/controllers/spec_helper_controller.rb +30 -0
  238. data/spec/public/test/multipart_request_helper_spec.rb +159 -0
  239. data/spec/public/test/multipart_upload_text_file.txt +1 -0
  240. data/spec/public/test/request_helper_spec.rb +153 -0
  241. data/spec/public/test/route_helper_spec.rb +54 -0
  242. data/spec/public/test/route_matchers_spec.rb +133 -0
  243. data/spec/public/test/view_helper_spec.rb +96 -0
  244. data/spec/public/test/view_matchers_spec.rb +107 -0
  245. data/spec/spec_helper.rb +71 -0
  246. metadata +488 -0
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Ezra Zygmuntowicz
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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 myapp # a "normal" merb app
19
+ $ merb-gen myapp --flat # a flattened app
20
+ $ merb-gen myapp --very-flat # a single-file app
21
+
@@ -0,0 +1,285 @@
1
+ require "rake"
2
+ require "rake/clean"
3
+ require "rake/gempackagetask"
4
+ require "rake/rdoctask"
5
+ require "rake/testtask"
6
+ require "spec/rake/spectask"
7
+ require "fileutils"
8
+
9
+ def __DIR__
10
+ File.dirname(__FILE__)
11
+ end
12
+
13
+ require __DIR__ + "/tools/rakehelp"
14
+ require __DIR__ + "/tools/annotation_extract"
15
+
16
+ include FileUtils
17
+
18
+ NAME = "merb-core"
19
+
20
+ require "lib/merb-core/version"
21
+ require "lib/merb-core/test/run_specs"
22
+
23
+ ##############################################################################
24
+ # Packaging & Installation
25
+ ##############################################################################
26
+ CLEAN.include ["**/.*.sw?", "pkg", "lib/*.bundle", "*.gem", "doc/rdoc", ".config", "coverage", "cache"]
27
+
28
+ windows = (PLATFORM =~ /win32|cygwin/) rescue nil
29
+
30
+ SUDO = windows ? "" : "sudo"
31
+
32
+ desc "Packages up Merb."
33
+ task :default => :package
34
+
35
+ task :merb => [:clean, :rdoc, :package]
36
+
37
+ spec = Gem::Specification.new do |s|
38
+ s.name = NAME
39
+ s.version = Merb::VERSION
40
+ s.platform = Gem::Platform::RUBY
41
+ s.author = "Ezra Zygmuntowicz"
42
+ s.email = "ez@engineyard.com"
43
+ s.homepage = "http://merb.devjavu.com"
44
+ s.summary = "Merb. Pocket rocket web framework."
45
+ s.bindir = "bin"
46
+ s.description = s.summary
47
+ s.executables = %w( merb )
48
+ s.require_path = "lib"
49
+ 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}/**/*"]
50
+
51
+ # rdoc
52
+ s.has_rdoc = true
53
+ s.extra_rdoc_files = %w( README LICENSE TODO )
54
+ #s.rdoc_options += RDOC_OPTS + ["--exclude", "^(app|uploads)"]
55
+
56
+ # Dependencies
57
+ s.add_dependency "erubis"
58
+ s.add_dependency "rake"
59
+ s.add_dependency "json_pure"
60
+ s.add_dependency "rspec"
61
+ s.add_dependency "rack"
62
+ s.add_dependency "hpricot"
63
+ s.add_dependency "mime-types"
64
+ # Requirements
65
+ s.requirements << "install the json gem to get faster json parsing"
66
+ s.required_ruby_version = ">= 1.8.4"
67
+ end
68
+
69
+ Rake::GemPackageTask.new(spec) do |package|
70
+ package.gem_spec = spec
71
+ end
72
+
73
+ desc "Run :package and install the resulting .gem"
74
+ task :install => :package do
75
+ sh %{#{SUDO} gem install --local pkg/#{NAME}-#{Merb::VERSION}.gem --no-rdoc --no-ri}
76
+ end
77
+
78
+ desc "Run :package and install the resulting .gem with jruby"
79
+ task :jinstall => :package do
80
+ sh %{#{SUDO} jruby -S gem install pkg/#{NAME}-#{Merb::VERSION}.gem --no-rdoc --no-ri}
81
+ end
82
+
83
+ desc "Run :clean and uninstall the .gem"
84
+ task :uninstall => :clean do
85
+ sh %{#{SUDO} gem uninstall #{NAME}}
86
+ end
87
+
88
+ ##############################################################################
89
+ # Documentation
90
+ ##############################################################################
91
+ task :doc => [:rdoc]
92
+ namespace :doc do
93
+
94
+ Rake::RDocTask.new do |rdoc|
95
+ files = ["README", "LICENSE", "CHANGELOG", "lib/**/*.rb"]
96
+ rdoc.rdoc_files.add(files)
97
+ rdoc.main = "README"
98
+ rdoc.title = "Merb Docs"
99
+ rdoc.template = __DIR__ + "/tools/allison-2.0.2/lib/allison.rb"
100
+ rdoc.rdoc_dir = "doc/rdoc"
101
+ rdoc.options << "--line-numbers" << "--inline-source"
102
+ end
103
+
104
+ desc "run webgen"
105
+ task :webgen do
106
+ sh %{cd doc/site; webgen}
107
+ end
108
+
109
+ desc "rdoc to rubyforge"
110
+ task :rubyforge do
111
+ # sh %{rake doc}
112
+ sh %{#{SUDO} chmod -R 755 doc} unless windows
113
+ sh %{/usr/bin/scp -r -p doc/rdoc/* ezmobius@rubyforge.org:/var/www/gforge-projects/merb}
114
+ end
115
+
116
+ end
117
+
118
+ ##############################################################################
119
+ # rSpec & rcov
120
+ ##############################################################################
121
+ desc "Run :specs, :rcov"
122
+ task :aok => [:specs, :rcov]
123
+
124
+ # desc "Run all specs"
125
+ # Spec::Rake::SpecTask.new("specs") do |t|
126
+ # t.spec_opts = ["--format", "specdoc", "--colour"]
127
+ # t.spec_files = Dir["spec/**/*_spec.rb"].sort
128
+ # end
129
+
130
+ def setup_specs(name, spec_cmd='spec')
131
+ desc "Run all specs (#{name})"
132
+ task "specs:#{name}" do
133
+ run_specs("spec/**/*_spec.rb", spec_cmd)
134
+ end
135
+
136
+ desc "Run private specs (#{name})"
137
+ task "specs:#{name}:private" do
138
+ run_specs("spec/private/**/*_spec.rb", spec_cmd)
139
+ end
140
+
141
+ desc "Run public specs (#{name})"
142
+ task "specs:#{name}:public" do
143
+ run_specs("spec/public/**/*_spec.rb", spec_cmd)
144
+ end
145
+ end
146
+
147
+ setup_specs("mri", "spec")
148
+ setup_specs("jruby", "jruby -S spec")
149
+
150
+ task "specs" => ["specs:mri"]
151
+ task "specs:private" => ["specs:mri:private"]
152
+ task "specs:public" => ["specs:mri:public"]
153
+
154
+ desc "Run coverage suite"
155
+ task :rcov do
156
+ require 'fileutils'
157
+ FileUtils.rm_rf("coverage") if File.directory?("coverage")
158
+ FileUtils.mkdir("coverage")
159
+ path = File.expand_path(Dir.pwd)
160
+ files = Dir["spec/**/*_spec.rb"]
161
+ files.each do |spec|
162
+ puts "Getting coverage for #{File.expand_path(spec)}"
163
+ command = %{rcov #{File.expand_path(spec)} --aggregate #{path}/coverage/data.data --exclude ".*" --include-file "lib/merb-core(?!\/vendor)"}
164
+ command += " --no-html" unless spec == files.last
165
+ `#{command} 2>&1`
166
+ end
167
+ end
168
+
169
+ desc "Run a specific spec with TASK=xxxx"
170
+ Spec::Rake::SpecTask.new("spec") do |t|
171
+ t.spec_opts = ["--format", "specdoc", "--colour"]
172
+ t.libs = ["lib", "server/lib" ]
173
+ t.spec_files = (ENV["TASK"] || '').split(',').map do |task|
174
+ "spec/**/#{task}_spec.rb"
175
+ end
176
+ end
177
+
178
+ desc "Run all specs output html"
179
+ Spec::Rake::SpecTask.new("specs_html") do |t|
180
+ t.spec_opts = ["--format", "html"]
181
+ t.libs = ["lib", "server/lib" ]
182
+ t.spec_files = Dir["spec/**/*_spec.rb"].sort
183
+ end
184
+
185
+ # desc "RCov"
186
+ # Spec::Rake::SpecTask.new("rcov") do |t|
187
+ # t.rcov_opts = ["--exclude", "gems", "--exclude", "spec"]
188
+ # t.spec_opts = ["--format", "specdoc", "--colour"]
189
+ # t.spec_files = Dir["spec/**/*_spec.rb"].sort
190
+ # t.libs = ["lib", "server/lib"]
191
+ # t.rcov = true
192
+ # end
193
+
194
+ STATS_DIRECTORIES = [
195
+ ['Code', 'lib/'],
196
+ ['Unit tests', 'spec']
197
+ ].collect { |name, dir| [ name, "./#{dir}" ] }.
198
+ select { |name, dir| File.directory?(dir) }
199
+
200
+ desc "Report code statistics (KLOCs, etc) from the application"
201
+ task :stats do
202
+ require __DIR__ + "/tools/code_statistics"
203
+ # require "extra/stats"
204
+ verbose = true
205
+ CodeStatistics.new(*STATS_DIRECTORIES).to_s
206
+ end
207
+
208
+ task :release => :package do
209
+ if ENV["RELEASE"]
210
+ sh %{rubyforge add_release merb merb "#{ENV["RELEASE"]}" pkg/#{NAME}-#{Merb::VERSION}.gem}
211
+ else
212
+ puts "Usage: rake release RELEASE='Clever tag line goes here'"
213
+ end
214
+ end
215
+
216
+ ##############################################################################
217
+ # SYNTAX CHECKING
218
+ ##############################################################################
219
+
220
+ task :check_syntax do
221
+ `find . -name "*.rb" |xargs -n1 ruby -c |grep -v "Syntax OK"`
222
+ puts "* Done"
223
+ end
224
+
225
+ ##############################################################################
226
+ # SVN
227
+ ##############################################################################
228
+ namespace :repo do
229
+
230
+ desc "Add new files to repository"
231
+ task :add do
232
+ if File.directory?(".git")
233
+ system "git add *"
234
+ elsif File.directory?(".svn")
235
+ system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add"
236
+ end
237
+ end
238
+
239
+ desc "Fetch changes from master repository"
240
+ task :rebase do
241
+ if File.directory?(".git")
242
+ system "git stash ; git svn rebase ; git stash apply"
243
+ elsif File.directory?(".svn")
244
+ system "svn update"
245
+ end
246
+ end
247
+
248
+ desc "commit modified changes to the repository"
249
+ task :commit do
250
+ if File.directory?(".git")
251
+ system "git commit"
252
+ elsif File.directory?(".svn")
253
+ system "svn commit"
254
+ end
255
+ end
256
+
257
+ end
258
+
259
+ # Run specific tests or test files. Searches nested spec directories as well.
260
+ #
261
+ # Based on a technique popularized by Geoffrey Grosenbach
262
+ rule "" do |t|
263
+ spec_cmd = (RUBY_PLATFORM =~ /java/) ? "jruby -S spec" : "spec"
264
+ # spec:spec_file:spec_name
265
+ if /spec:(.*)$/.match(t.name)
266
+ arguments = t.name.split(':')
267
+
268
+ file_name = arguments[1]
269
+ spec_name = arguments[2..-1]
270
+
271
+ spec_filename = "#{file_name}_spec.rb"
272
+ specs = Dir["spec/**/#{spec_filename}"]
273
+
274
+ if path = specs.detect { |f| spec_filename == File.basename(f) }
275
+ run_file_name = path
276
+ else
277
+ puts "No specs found for #{t.name.inspect}"
278
+ exit
279
+ end
280
+
281
+ example = " -e '#{spec_name}'" unless spec_name.empty?
282
+
283
+ sh "#{spec_cmd} #{run_file_name} --format specdoc --colour #{example}"
284
+ end
285
+ end
data/TODO ADDED
File without changes
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ require "merb-core"
3
+
4
+ unless %w[-a --adapter -i --irb-console -r --script-runner].any? { |o| ARGV.index(o) }
5
+ ARGV.push *%w[-a mongrel]
6
+ end
7
+
8
+ Merb.start
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.join(File.dirname(__FILE__),"..","lib","merb-core","test","run_specs")
4
+
5
+ run_specs ARGV
@@ -0,0 +1,57 @@
1
+ The Merb boot process starts when you run the Merb binary, which calls `Merb.start`. Merb.start performs the
2
+ following tasks:
3
+
4
+ list.
5
+ * Loads merb.yml from the root directory or config directory and puts them in the Merb::Config hash
6
+ * Parses config arguments from the command-line and adds them to the Merb::Config hash
7
+ * Runs the BootLoaders (see below)
8
+ * Starts the Merb Rack adapter
9
+
10
+ The BootLoader is a configurable process, which, by default, runs the following processes:
11
+
12
+ deflist.
13
+ Environment: Sets the Merb environment based on any -e flag passed the merb binary
14
+ BuildFramework: Set the framework paths, which can either be set in the Merb::Config[:framework]
15
+ variable or defaults to the paths described below.
16
+ Dependencies: Load dependencies.rb, which should include any plugins that will be loaded, as well
17
+ as an after_app_loaded hook.
18
+ Logger: Set up the logger in the `Merb.dir_for(:log)` directory. In test mode, it will be called
19
+ `test_logger`. In other modes, it will be set to `merb.#{pid}.log`. The log level will default
20
+ to `info` but can be specified via the Merb::Config[:log_level] option.
21
+ LoadRouter: The router is loaded from `Merb.dir_for(:config)/router.rb`.
22
+ LoadClasses: Files in all of the load paths are `require`d, and classes added during the load of
23
+ each files are tracked so they can be removed later during the reloading process.
24
+ Templates: All templates under the `_template_root` of any loaded controllers, as well as all
25
+ templates under `Merb.dir_for(:view)` are registered as inlined templates.
26
+ MimeTypes: Register all MimeTypes (see below for defaults).
27
+ AfterAppLoads: Call any `after_app_loads` hooks that were registered in dependencies.rb
28
+ MixinSessionContainer: Register the session types and set the app to use one if
29
+ `Merb::Config[:session_type]` is set.
30
+ ChooseAdapter: Set `Merb.adapter` to be the adapter chosen via Merb::Config[:adapter] (which
31
+ can be specified via the `-a foo` command-line parameter).
32
+ RackUpApplication: Set up a default rack application. Alternatively, allow for additional configuration
33
+ in `Merb.dir_for(:config)/rack.rb`, which will be evaluated in the context of a Rack::Builder.new
34
+ block.
35
+ ReloadClasses: If Merb::Config[:reload_classes] is set, begin the process of reloading classes
36
+ every time a class is modified.
37
+
38
+ deflist: Default Framework Paths.
39
+ application: Merb.root/app/controller/application.rb
40
+ config: Merb.root/config
41
+ lib: Merb.root/lib
42
+ log: Merb.root/log
43
+ view: Merb.root/app/views
44
+ model: Merb.root/app/models
45
+ controller: Merb.root/app/controllers
46
+ helper: Merb.root/app/helpers
47
+ mailer: Merb.root/app/mailers
48
+ part: Merb.root/app/parts
49
+
50
+ deflist: MimeTypes.
51
+ \:all: no transform, */*
52
+ \:yaml: to_yaml, application/x-yaml or text/yaml
53
+ \:text: to_text, text/plain
54
+ \:html: to_html, text/html or application/xhtml+xml or application/html
55
+ \:xml: to_xml, application/xml or text/xml or application/x-xml, adds "Encoding: UTF-8" response header
56
+ \:js: to_json, text/javascript ot application/javascript or application/x-javascript
57
+ \:json: to_json, application/json or text/x-json
@@ -0,0 +1,40 @@
1
+ Every method should have documentation above the method definition that fits this basic model...
2
+
3
+ # Render the specified item, with the specified options.
4
+ #
5
+ # ==== Parameters
6
+ # thing<String, Symbol, nil>::
7
+ # The thing to render. This will default to the current action
8
+ # opts<Hash>:: An options hash (see below)
9
+ #
10
+ # ==== Options (opts)
11
+ # :format<Symbol>:: A registered mime-type format
12
+ # :template<String>::
13
+ # The path to the template relative to the template root
14
+ # :status<~to_i>::
15
+ # The status to send to the client. Typically, this would
16
+ # be an integer (200), or a Merb status code (Accepted)
17
+ # :layout<~to_s>::
18
+ # A layout to use instead of the default. This should be
19
+ # relative to the layout root. By default, the layout will
20
+ # be either the controller_name or application. If you
21
+ # want to use an alternative content-type than the one
22
+ # that the base template was rendered as, you will need
23
+ # to do :layout => “foo.#{content_type}” (i.e. “foo.json”)
24
+ #
25
+ # ==== Returns
26
+ # String:: The rendered template, including layout, if appropriate.
27
+ #
28
+ # ==== Raises
29
+ # TemplateNotFound::
30
+ # There is no template for the specified location.
31
+ #
32
+ # ==== Alternatives
33
+ # If you pass a Hash as the first parameter, it will be moved to
34
+ # opts and “thing” will be the current action
35
+ #
36
+ #—
37
+ # @public
38
+ def render(thing = nil, opts = {})
39
+ <snip>
40
+ end
@@ -0,0 +1,51 @@
1
+ ## TEMPLATES
2
+
3
+ # Render an action
4
+ render :symbol
5
+
6
+ # Render a string
7
+ render "string"
8
+
9
+ # Render an object; will call to_#{content-type} on this if the default template is not found
10
+ display @obj
11
+
12
+ # Provide an alternative default thing to render; note that we can use strings here for template paths
13
+ # because strings would never fail and fallback to the @obj
14
+ display @obj, :symbol
15
+ display @obj, "full/path/to/template"
16
+
17
+ # Render a template
18
+ render_template "full/path/to/template"
19
+
20
+ # Render with a mime-type (same as render, but with added mime-type set)
21
+ render_json :symbol
22
+ render_json "string"
23
+
24
+ # Render nothing at all
25
+ render_nothing
26
+
27
+ # TEMPLATE OPTIONS (all functions above can use these options)
28
+
29
+ # :format can be used to override the mime-type arrived at via content-negotiation
30
+ render :symbol, :format => :xml
31
+
32
+ # :status can set the status that will be returned to the browser
33
+ render :symbol, :status => Successful::Accepted
34
+ # or
35
+ render :symbol, :status => 202
36
+
37
+ # :layout sets the layout to use; default: controller.to_path || :application; :none means no layout
38
+ render :symbol, :layout => :none
39
+
40
+ ## PARTIALS
41
+
42
+ # Render a partial
43
+ partial :symbol
44
+
45
+ # Render a partial with an object (it will default to the local var "symbol" in the partial)
46
+ partial :symbol, :with => @object
47
+ partial :symbol, :with => @object, :as => "something"
48
+
49
+ # Render a partial with a collection of objects (same :as semantics)
50
+ partial :symbol, :with => [col, lec, tion]
51
+ partial :symbol, :with => [col, lec, tion], :as => "name"