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
@@ -0,0 +1 @@
1
+ Fri, 29 Feb 2008 08:16:44 GMT ~ info ~ Logfile created
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ argv = ARGV + %w[-a fcgi]
4
+ Merb.start(argv)
@@ -0,0 +1,119 @@
1
+ body {
2
+ font-family: Arial, Verdana, sans-serif;
3
+ font-size: 12px;
4
+ background-color: #fff;
5
+ }
6
+ * {
7
+ margin: 0px;
8
+ padding: 0px;
9
+ text-decoration: none;
10
+ }
11
+ html {
12
+ height: 100%;
13
+ margin-bottom: 1px;
14
+ }
15
+ #container {
16
+ width: 80%;
17
+ text-align: left;
18
+ background-color: #fff;
19
+ margin-right: auto;
20
+ margin-left: auto;
21
+ }
22
+ #header-container {
23
+ width: 100%;
24
+ padding-top: 15px;
25
+ }
26
+ #header-container h1, #header-container h2 {
27
+ margin-left: 6px;
28
+ margin-bottom: 6px;
29
+ }
30
+ .spacer {
31
+ width: 100%;
32
+ height: 15px;
33
+ }
34
+ hr {
35
+ border: 0px;
36
+ color: #ccc;
37
+ background-color: #cdcdcd;
38
+ height: 1px;
39
+ width: 100%;
40
+ text-align: left;
41
+ }
42
+ h1 {
43
+ font-size: 28px;
44
+ color: #c55;
45
+ background-color: #fff;
46
+ font-family: Arial, Verdana, sans-serif;
47
+ font-weight: 300;
48
+ }
49
+ h2 {
50
+ font-size: 15px;
51
+ color: #999;
52
+ font-family: Arial, Verdana, sans-serif;
53
+ font-weight: 300;
54
+ background-color: #fff;
55
+ }
56
+ h3 {
57
+ color: #4d9b12;
58
+ font-size: 15px;
59
+ text-align: left;
60
+ font-weight: 300;
61
+ padding: 5px;
62
+ margin-top: 5px;
63
+ }
64
+
65
+ #left-container {
66
+ float: left;
67
+ width: 250px;
68
+ background-color: #FFFFFF;
69
+ color: black;
70
+ }
71
+
72
+ #left-container h3 {
73
+ color: #c55;
74
+ }
75
+
76
+ #main-container {
77
+ margin: 5px 5px 5px 260px;
78
+ padding: 15px;
79
+ border-left: 1px solid silver;
80
+ min-height: 400px;
81
+ }
82
+ p {
83
+ color: #000;
84
+ background-color: #fff;
85
+ line-height: 20px;
86
+ padding: 5px;
87
+ }
88
+ a {
89
+ color: #4d9b12;
90
+ background-color: #fff;
91
+ text-decoration: none;
92
+ }
93
+ a:hover {
94
+ color: #4d9b12;
95
+ background-color: #fff;
96
+ text-decoration: underline;
97
+ }
98
+ #footer-container {
99
+ clear: both;
100
+ font-size: 12px;
101
+ font-family: Verdana, Arial, sans-serif;
102
+ }
103
+ .right {
104
+ float: right;
105
+ font-size: 100%;
106
+ margin-top: 5px;
107
+ color: #999;
108
+ background-color: #fff;
109
+ }
110
+ .left {
111
+ float: left;
112
+ font-size: 100%;
113
+ margin-top: 5px;
114
+ color: #999;
115
+ background-color: #fff;
116
+ }
117
+ #main-container ul {
118
+ margin-left: 3.0em;
119
+ }
@@ -0,0 +1,24 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+ require 'rack/mock'
3
+ require 'stringio'
4
+ Merb.start :environment => 'test',
5
+ :merb_root => File.dirname(__FILE__) / 'fixture'
6
+
7
+ describe Merb::Dispatcher, "route params" do
8
+ before(:each) do
9
+ env = Rack::MockRequest.env_for("/foo/bar/54")
10
+ env['REQUEST_URI'] = "/foo/bar/54" # MockRequest doesn't set this
11
+ @controller = Merb::Dispatcher.handle(env)
12
+ end
13
+
14
+ it "should properly set the route params" do
15
+ @controller.request.route_params[:id].should == '54'
16
+ end
17
+
18
+ it "should properly add route_params to params" do
19
+ @controller.request.route_params.each { |k,v|
20
+ @controller.request.params[k].should == v
21
+ }
22
+ end
23
+
24
+ end
@@ -0,0 +1 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
@@ -0,0 +1,81 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
2
+
3
+ Merb.environment = 'test'
4
+
5
+ describe "Plugins", "default GENERATOR_SCOPE" do
6
+ it "should have :merb_default first" do
7
+ Merb.generator_scope.first.should == :merb_default
8
+ end
9
+
10
+ it "should have :merb" do
11
+ Merb.generator_scope.should include(:merb)
12
+ end
13
+
14
+ it "should have :rspec last" do
15
+ Merb.generator_scope.last.should == :rspec
16
+ end
17
+ end
18
+
19
+ describe "Plugins","use_orm" do
20
+ before(:each) do
21
+ Merb.generator_scope.replace [:merb_default, :merb, :rspec]
22
+ Kernel.stub!(:dependency)
23
+ end
24
+
25
+ it "should raise an error if use_orm is called twice" do
26
+ use_orm(:activerecord)
27
+ lambda { use_orm(:datamapper) }.should raise_error
28
+ end
29
+
30
+ it "should not have :merb_default in GENERATOR_SCOPE with use_orm(:activerecord)" do
31
+ use_orm(:activerecord)
32
+ Merb.generator_scope.should_not include(:merb_default)
33
+ end
34
+
35
+ it "should have :activerecord in GENERATOR_SCOPE with use_orm(:activerecord)" do
36
+ use_orm(:activerecord)
37
+ Merb.generator_scope.should include(:activerecord)
38
+ end
39
+
40
+ it "should have :activerecord first in GENERATOR_SCOPE with use_orm(:activerecord)" do
41
+ use_orm(:activerecord)
42
+ Merb.generator_scope.first.should == :activerecord
43
+ end
44
+
45
+ it "should call dependency :merb_activerecord with use_orm(:activerecord)" do
46
+ Kernel.should_receive(:dependency).with("merb_activerecord").once.
47
+ and_return(true)
48
+ use_orm(:activerecord)
49
+ end
50
+
51
+ end
52
+
53
+ describe "Plugins","use_test" do
54
+ before(:each) do
55
+ Merb.generator_scope.replace [:merb_default, :merb, :rspec]
56
+ Kernel.stub!(:dependency)
57
+ end
58
+
59
+ it "should have :rspec in GENERATOR_SCOPE by default" do
60
+ Merb.generator_scope.should include(:rspec)
61
+ end
62
+
63
+ it "should not have :rspec in GENERATOR_SCOPE with use_test(:test_unit)" do
64
+ use_test(:test_unit)
65
+ Merb.generator_scope.should_not include(:rspec)
66
+ end
67
+
68
+ it "should have :test_unit in GENERATOR_SCOPE with use_test(:test_unit)" do
69
+ use_test(:test_unit)
70
+ Merb.generator_scope.should include(:test_unit)
71
+ end
72
+
73
+ it "should have :test_unit last in GENERATOR_SCOPE with use_test(:test_unit)" do
74
+ use_test(:test_unit)
75
+ Merb.generator_scope.last.should == :test_unit
76
+ end
77
+
78
+ it "should raise an error if called with an unsupported test framework" do
79
+ lambda { use_test(:fiddlefaddle) }.should raise_error
80
+ end
81
+ end
@@ -0,0 +1,43 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
2
+ require 'rack/mock'
3
+
4
+ Merb.start :environment => 'test'
5
+
6
+ describe Merb::Rack::Application do
7
+
8
+ before do
9
+ @app = Merb::Rack::Application.new
10
+ end
11
+
12
+ it "should return a MockResponse" do
13
+ res = Rack::MockRequest.new(@app).get("")
14
+ res.should be_kind_of Rack::MockResponse
15
+ end
16
+
17
+ end
18
+
19
+ describe Merb::Rack::Application, "with :path_prefix set" do
20
+
21
+ before do
22
+ Merb::Config[:path_prefix] = "/quux"
23
+ @app = Merb::Rack::Application.new
24
+ @nullobj = mock('controller', :null_object => true)
25
+ end
26
+
27
+ it "should strip the path_prefix from a request's REQUEST_URI and PATH_INFO" do
28
+ Merb::Dispatcher.should_receive(:handle).with(
29
+ {'REQUEST_URI' => "/foo/bar", 'PATH_INFO' => "/foo/bar"}
30
+ ).and_return @nullobj
31
+
32
+ @app.call('REQUEST_URI' => "/quux/foo/bar", 'PATH_INFO' => "/quux/foo/bar")
33
+ end
34
+
35
+ it "should not leave REQUEST_URI or PATH_INFO empty" do
36
+ Merb::Dispatcher.should_receive(:handle).with(
37
+ {'REQUEST_URI' => "/", 'PATH_INFO' => "/"}
38
+ ).and_return @nullobj
39
+
40
+ @app.call('REQUEST_URI' => "/quux", 'PATH_INFO' => "/quux")
41
+ end
42
+
43
+ end
@@ -0,0 +1,11 @@
1
+ ==== Public API
2
+ This is the API that is available in your app itself. Anything not in the public API is subject to change.
3
+
4
+ ==== Semipublic API
5
+ This is the API that is guaranteed to be available between components of Merb. If something in the semipublic
6
+ API changes, this will likely require changes in other parts of Merb. Additionally, items in the semipublic
7
+ API can be relied upon for introspection, for testing purposes.
8
+
9
+ For instance, AbstractController#_body should not be used in Merb apps themselves, as it may change, but
10
+ it may be used in other components of Merb and in the Merb tests themselves. Including it in the semipublic
11
+ API is designed to alert Merb's maintainers that changing it will have framework-wide repercussions.
@@ -0,0 +1 @@
1
+ App: <%= catch_content(:for_layout) %>
@@ -0,0 +1,54 @@
1
+
2
+
3
+ module Merb::Test::Fixtures
4
+
5
+ module Abstract
6
+
7
+ class SomeModel; end
8
+
9
+ class Testing < Merb::AbstractController
10
+ self._template_root = File.dirname(__FILE__) / "views"
11
+ end
12
+
13
+ class DisplayObject < Testing
14
+ def index
15
+ @obj = SomeModel.new
16
+ display @obj
17
+ end
18
+ end
19
+
20
+ class DisplayObjectWithAction < Testing
21
+ def create
22
+ @obj = SomeModel.new
23
+ display @obj, :new
24
+ end
25
+ end
26
+
27
+ class DisplayObjectWithPath < Testing
28
+ def index
29
+ @obj = SomeModel.new
30
+ display @obj, "test_display/foo.html"
31
+ end
32
+ end
33
+
34
+
35
+ class DisplayObjectWithMultipleRoots < DisplayObject
36
+ self._template_roots << [File.dirname(__FILE__) / "alt_views", :_template_location]
37
+
38
+ def show
39
+ @obj = SomeModel.new
40
+ display @obj, nil, :layout=>"alt"
41
+ end
42
+
43
+ def another
44
+ @obj = SomeModel.new
45
+ display @obj, "test_display/foo.html", :layout=>false
46
+ end
47
+
48
+ def wonderful
49
+ true
50
+ end
51
+ end
52
+ end
53
+
54
+ end
@@ -0,0 +1,167 @@
1
+ # ==== Methodology
2
+ # Each of the controllers tested here tests a discrete, single case. This
3
+ # is to ensure that each test is actually testing exactly what we want,
4
+ # and that other features (or lack thereof), are not causing tests to fail
5
+ # that would otherwise pass.
6
+ module Merb::Test::Fixtures
7
+
8
+ module Abstract
9
+
10
+ class Testing < Merb::AbstractController
11
+ self._template_root = File.dirname(__FILE__) / "views"
12
+ end
13
+
14
+ class TestBeforeFilter < Testing
15
+ before :foo
16
+
17
+ def index
18
+ "#{@x}"
19
+ end
20
+
21
+ private
22
+
23
+ def foo
24
+ @x = "foo filter"
25
+ end
26
+ end
27
+
28
+ class TestAfterFilter < Testing
29
+ after :foo
30
+
31
+ def index
32
+ "index action"
33
+ end
34
+
35
+ private
36
+
37
+ def foo
38
+ @body = "foo filter"
39
+ end
40
+ end
41
+
42
+ class TestSkipFilter < TestBeforeFilter
43
+ skip_before :foo
44
+ end
45
+
46
+ class TestBeforeFilterOrder < TestBeforeFilter
47
+ before :bar
48
+
49
+ def index
50
+ "#{@x}"
51
+ end
52
+
53
+ private
54
+
55
+ def bar
56
+ @x = "bar filter"
57
+ end
58
+ end
59
+
60
+ class TestAfterFilterOrder < TestAfterFilter
61
+ after :bar
62
+
63
+ def index
64
+ "index action"
65
+ end
66
+
67
+ private
68
+
69
+ def bar
70
+ @body = "bar filter"
71
+ end
72
+ end
73
+
74
+ class TestProcFilter < Testing
75
+ before { @x = "proc filter1" }
76
+ before Proc.new { @y = "proc filter2" }
77
+
78
+ def index
79
+ "#{@x} #{@y}"
80
+ end
81
+ end
82
+
83
+ class TestExcludeFilter < Testing
84
+ before :foo, :exclude => :index
85
+ before :bar, :exclude => [:index]
86
+
87
+ def index
88
+ "#{@x} #{@y}"
89
+ end
90
+
91
+ def show
92
+ "#{@x} #{@y}"
93
+ end
94
+
95
+ private
96
+
97
+ def foo
98
+ @x = "foo filter"
99
+ end
100
+
101
+ def bar
102
+ @y = "bar filter"
103
+ end
104
+ end
105
+
106
+ class TestOnlyFilter < Testing
107
+ before :foo, :only => :index
108
+ before :bar, :only => [:index]
109
+
110
+ def index
111
+ "#{@x} #{@y}"
112
+ end
113
+
114
+ def show
115
+ "#{@x} #{@y}"
116
+ end
117
+
118
+ private
119
+
120
+ def foo
121
+ @x = "foo filter"
122
+ end
123
+
124
+ def bar
125
+ @y = "bar filter"
126
+ end
127
+ end
128
+
129
+ class TestConditionalFilterWithMethod < Testing
130
+ before :foo, :if => :bar
131
+
132
+ attr_accessor :bar
133
+
134
+ def index
135
+ "#{@x}"
136
+ end
137
+
138
+ private
139
+ def foo
140
+ @x = "foo filter"
141
+ end
142
+ end
143
+
144
+ class TestConditionalFilterWithProc < Testing
145
+ after :foo, :unless => lambda { |x| x.bar == "bar" }
146
+
147
+ attr_accessor :bar
148
+
149
+ def index
150
+ "index action"
151
+ end
152
+
153
+ private
154
+ def foo
155
+ @body = "foo filter"
156
+ end
157
+ end
158
+
159
+ class TestConditionalFilterWithNoProcOrSymbol < Testing
160
+ after :foo, :unless => true
161
+
162
+ def index
163
+ "index action"
164
+ end
165
+ end
166
+ end
167
+ end