thorero 0.9.4.4 → 0.9.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +1 -1
- data/README +21 -0
- data/Rakefile +275 -108
- data/TODO +0 -0
- data/bin/merb +12 -0
- data/bin/merb-specs +5 -0
- data/docs/bootloading.dox +58 -0
- data/docs/documentation_standards +40 -0
- data/docs/merb-core-call-stack-diagram.mmap +0 -0
- data/docs/merb-core-call-stack-diagram.pdf +0 -0
- data/docs/merb-core-call-stack-diagram.png +0 -0
- data/docs/new_render_api +51 -0
- data/lib/merb-core.rb +603 -0
- data/lib/merb-core/autoload.rb +32 -0
- data/lib/merb-core/bootloader.rb +708 -0
- data/lib/merb-core/config.rb +303 -0
- data/lib/merb-core/constants.rb +43 -0
- data/lib/merb-core/controller/abstract_controller.rb +578 -0
- data/lib/merb-core/controller/exceptions.rb +302 -0
- data/lib/merb-core/controller/merb_controller.rb +256 -0
- data/lib/merb-core/controller/mime.rb +106 -0
- data/lib/merb-core/controller/mixins/authentication.rb +87 -0
- data/lib/merb-core/controller/mixins/controller.rb +290 -0
- data/lib/merb-core/controller/mixins/render.rb +481 -0
- data/lib/merb-core/controller/mixins/responder.rb +472 -0
- data/lib/merb-core/controller/template.rb +254 -0
- data/lib/merb-core/core_ext.rb +8 -0
- data/lib/merb-core/core_ext/kernel.rb +319 -0
- data/lib/merb-core/dispatch/cookies.rb +91 -0
- data/lib/merb-core/dispatch/dispatcher.rb +278 -0
- data/lib/merb-core/dispatch/exceptions.html.erb +303 -0
- data/lib/merb-core/dispatch/request.rb +603 -0
- data/lib/merb-core/dispatch/router.rb +179 -0
- data/lib/merb-core/dispatch/router/behavior.rb +867 -0
- data/lib/merb-core/dispatch/router/cached_proc.rb +52 -0
- data/lib/merb-core/dispatch/router/route.rb +321 -0
- data/lib/merb-core/dispatch/session.rb +78 -0
- data/lib/merb-core/dispatch/session/cookie.rb +168 -0
- data/lib/merb-core/dispatch/session/memcached.rb +184 -0
- data/lib/merb-core/dispatch/session/memory.rb +241 -0
- data/lib/merb-core/dispatch/worker.rb +28 -0
- data/lib/merb-core/gem_ext/erubis.rb +77 -0
- data/lib/{extlib → merb-core}/logger.rb +2 -2
- data/lib/merb-core/plugins.rb +59 -0
- data/lib/merb-core/rack.rb +21 -0
- data/lib/merb-core/rack/adapter.rb +44 -0
- data/lib/merb-core/rack/adapter/ebb.rb +25 -0
- data/lib/merb-core/rack/adapter/evented_mongrel.rb +26 -0
- data/lib/merb-core/rack/adapter/fcgi.rb +17 -0
- data/lib/merb-core/rack/adapter/irb.rb +118 -0
- data/lib/merb-core/rack/adapter/mongrel.rb +26 -0
- data/lib/merb-core/rack/adapter/runner.rb +28 -0
- data/lib/merb-core/rack/adapter/swiftiplied_mongrel.rb +26 -0
- data/lib/merb-core/rack/adapter/thin.rb +39 -0
- data/lib/merb-core/rack/adapter/thin_turbo.rb +24 -0
- data/lib/merb-core/rack/adapter/webrick.rb +36 -0
- data/lib/merb-core/rack/application.rb +18 -0
- data/lib/merb-core/rack/handler/mongrel.rb +97 -0
- data/lib/merb-core/rack/middleware.rb +26 -0
- data/lib/merb-core/rack/middleware/path_prefix.rb +31 -0
- data/lib/merb-core/rack/middleware/profiler.rb +19 -0
- data/lib/merb-core/rack/middleware/static.rb +45 -0
- data/lib/merb-core/server.rb +252 -0
- data/lib/merb-core/tasks/audit.rake +68 -0
- data/lib/merb-core/tasks/merb.rb +1 -0
- data/lib/merb-core/tasks/merb_rake_helper.rb +12 -0
- data/lib/merb-core/test.rb +11 -0
- data/lib/merb-core/test/helpers.rb +9 -0
- data/lib/merb-core/test/helpers/controller_helper.rb +8 -0
- data/lib/merb-core/test/helpers/multipart_request_helper.rb +175 -0
- data/lib/merb-core/test/helpers/request_helper.rb +344 -0
- data/lib/merb-core/test/helpers/route_helper.rb +33 -0
- data/lib/merb-core/test/helpers/view_helper.rb +121 -0
- data/lib/merb-core/test/matchers.rb +9 -0
- data/lib/merb-core/test/matchers/controller_matchers.rb +319 -0
- data/lib/merb-core/test/matchers/route_matchers.rb +136 -0
- data/lib/merb-core/test/matchers/view_matchers.rb +335 -0
- data/lib/merb-core/test/run_specs.rb +47 -0
- data/lib/merb-core/test/tasks/spectasks.rb +68 -0
- data/lib/merb-core/test/test_ext/hpricot.rb +32 -0
- data/lib/merb-core/test/test_ext/object.rb +14 -0
- data/lib/merb-core/test/test_ext/string.rb +14 -0
- data/lib/merb-core/vendor/facets.rb +2 -0
- data/lib/merb-core/vendor/facets/dictionary.rb +433 -0
- data/lib/merb-core/vendor/facets/inflect.rb +345 -0
- data/lib/merb-core/version.rb +11 -0
- data/spec/private/config/adapter_spec.rb +32 -0
- data/spec/private/config/config_spec.rb +202 -0
- data/spec/private/config/environment_spec.rb +13 -0
- data/spec/private/config/spec_helper.rb +1 -0
- data/spec/private/core_ext/kernel_spec.rb +169 -0
- data/spec/private/dispatch/bootloader_spec.rb +24 -0
- data/spec/private/dispatch/cookies_spec.rb +107 -0
- data/spec/private/dispatch/dispatch_spec.rb +35 -0
- data/spec/private/dispatch/fixture/app/controllers/application.rb +4 -0
- data/spec/private/dispatch/fixture/app/controllers/exceptions.rb +27 -0
- data/spec/private/dispatch/fixture/app/controllers/foo.rb +21 -0
- data/spec/private/dispatch/fixture/app/helpers/global_helpers.rb +8 -0
- data/spec/private/dispatch/fixture/app/views/exeptions/client_error.html.erb +37 -0
- data/spec/private/dispatch/fixture/app/views/exeptions/internal_server_error.html.erb +216 -0
- data/spec/private/dispatch/fixture/app/views/exeptions/not_acceptable.html.erb +38 -0
- data/spec/private/dispatch/fixture/app/views/exeptions/not_found.html.erb +40 -0
- data/spec/private/dispatch/fixture/app/views/foo/bar.html.erb +0 -0
- data/spec/private/dispatch/fixture/app/views/layout/application.html.erb +11 -0
- data/spec/private/dispatch/fixture/config/black_hole.rb +12 -0
- data/spec/private/dispatch/fixture/config/environments/development.rb +6 -0
- data/spec/private/dispatch/fixture/config/environments/production.rb +5 -0
- data/spec/private/dispatch/fixture/config/environments/test.rb +6 -0
- data/spec/private/dispatch/fixture/config/init.rb +45 -0
- data/spec/private/dispatch/fixture/config/rack.rb +11 -0
- data/spec/private/dispatch/fixture/config/router.rb +35 -0
- data/spec/private/dispatch/fixture/log/merb_test.log +1874 -0
- data/spec/private/dispatch/fixture/public/images/merb.jpg +0 -0
- data/spec/private/dispatch/fixture/public/merb.fcgi +4 -0
- data/spec/private/dispatch/fixture/public/stylesheets/master.css +119 -0
- data/spec/private/dispatch/route_params_spec.rb +24 -0
- data/spec/private/dispatch/session_mixin_spec.rb +47 -0
- data/spec/private/dispatch/spec_helper.rb +1 -0
- data/spec/private/plugins/plugin_spec.rb +166 -0
- data/spec/private/rack/application_spec.rb +49 -0
- data/spec/private/router/behavior_spec.rb +60 -0
- data/spec/private/router/fixture/log/merb_test.log +139 -0
- data/spec/private/router/route_spec.rb +414 -0
- data/spec/private/router/router_spec.rb +175 -0
- data/spec/private/vendor/facets/plural_spec.rb +564 -0
- data/spec/private/vendor/facets/singular_spec.rb +489 -0
- data/spec/public/DEFINITIONS +11 -0
- data/spec/public/abstract_controller/controllers/alt_views/layout/application.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/cousins.rb +41 -0
- data/spec/public/abstract_controller/controllers/display.rb +54 -0
- data/spec/public/abstract_controller/controllers/filters.rb +193 -0
- data/spec/public/abstract_controller/controllers/helpers.rb +41 -0
- data/spec/public/abstract_controller/controllers/partial.rb +121 -0
- data/spec/public/abstract_controller/controllers/render.rb +113 -0
- data/spec/public/abstract_controller/controllers/views/helpers/capture/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/helpers/concat/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/layout/alt.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/layout/custom.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_app_layout/index.erb +0 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_throw_contents/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/basic_partial/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/nested_partial/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/partial/with_partial/index.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/test_display/foo.html.erb +1 -0
- data/spec/public/abstract_controller/controllers/views/test_render/foo.html.erb +0 -0
- data/spec/public/abstract_controller/controllers/views/wonderful/index.erb +1 -0
- data/spec/public/abstract_controller/display_spec.rb +33 -0
- data/spec/public/abstract_controller/filter_spec.rb +106 -0
- data/spec/public/abstract_controller/helper_spec.rb +21 -0
- data/spec/public/abstract_controller/partial_spec.rb +61 -0
- data/spec/public/abstract_controller/render_spec.rb +90 -0
- data/spec/public/abstract_controller/spec_helper.rb +31 -0
- data/spec/public/boot_loader/boot_loader_spec.rb +33 -0
- data/spec/public/boot_loader/spec_helper.rb +1 -0
- data/spec/public/controller/authentication_spec.rb +103 -0
- data/spec/public/controller/base_spec.rb +36 -0
- data/spec/public/controller/controllers/authentication.rb +45 -0
- data/spec/public/controller/controllers/base.rb +36 -0
- data/spec/public/controller/controllers/display.rb +118 -0
- data/spec/public/controller/controllers/redirect.rb +30 -0
- data/spec/public/controller/controllers/responder.rb +93 -0
- data/spec/public/controller/controllers/url.rb +7 -0
- data/spec/public/controller/controllers/views/layout/custom.html.erb +1 -0
- data/spec/public/controller/controllers/views/layout/custom_arg.html.erb +1 -0
- data/spec/public/controller/controllers/views/layout/custom_arg.json.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb +1 -0
- data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb +1 -0
- data/spec/public/controller/display_spec.rb +84 -0
- data/spec/public/controller/redirect_spec.rb +27 -0
- data/spec/public/controller/responder_spec.rb +163 -0
- data/spec/public/controller/spec_helper.rb +11 -0
- data/spec/public/controller/url_spec.rb +180 -0
- data/spec/public/core/merb_core_spec.rb +45 -0
- data/spec/public/core_ext/class_spec.rb +91 -0
- data/spec/public/core_ext/fixtures/core_ext_dependency.rb +2 -0
- data/spec/public/core_ext/kernel_spec.rb +9 -0
- data/spec/public/core_ext/spec_helper.rb +1 -0
- data/spec/public/directory_structure/directory/app/controllers/application.rb +3 -0
- data/spec/public/directory_structure/directory/app/controllers/base.rb +13 -0
- data/spec/public/directory_structure/directory/app/controllers/custom.rb +19 -0
- data/spec/public/directory_structure/directory/app/views/base/template.html.erb +1 -0
- data/spec/public/directory_structure/directory/app/views/wonderful/template.erb +1 -0
- data/spec/public/directory_structure/directory/config/router.rb +3 -0
- data/spec/public/directory_structure/directory/log/merb_test.log +562 -0
- data/spec/public/directory_structure/directory_spec.rb +44 -0
- data/spec/public/logger/logger_spec.rb +181 -0
- data/spec/public/logger/spec_helper.rb +1 -0
- data/spec/public/reloading/directory/app/controllers/application.rb +3 -0
- data/spec/public/reloading/directory/app/controllers/reload.rb +6 -0
- data/spec/public/reloading/directory/config/init.rb +2 -0
- data/spec/public/reloading/directory/log/merb_test.log +138 -0
- data/spec/public/reloading/reload_spec.rb +103 -0
- data/spec/public/request/multipart_spec.rb +41 -0
- data/spec/public/request/request_spec.rb +228 -0
- data/spec/public/router/default_spec.rb +21 -0
- data/spec/public/router/deferred_spec.rb +22 -0
- data/spec/public/router/fixation_spec.rb +27 -0
- data/spec/public/router/fixture/log/merb_test.log +1556 -0
- data/spec/public/router/namespace_spec.rb +113 -0
- data/spec/public/router/nested_matches_spec.rb +97 -0
- data/spec/public/router/nested_resources_spec.rb +41 -0
- data/spec/public/router/resource_spec.rb +37 -0
- data/spec/public/router/resources_spec.rb +82 -0
- data/spec/public/router/spec_helper.rb +90 -0
- data/spec/public/router/special_spec.rb +61 -0
- data/spec/public/router/string_spec.rb +61 -0
- data/spec/public/template/template_spec.rb +104 -0
- data/spec/public/template/templates/error.html.erb +2 -0
- data/spec/public/template/templates/template.html.erb +1 -0
- data/spec/public/template/templates/template.html.myt +1 -0
- data/spec/public/test/controller_matchers_spec.rb +402 -0
- data/spec/public/test/controllers/controller_assertion_mock.rb +7 -0
- data/spec/public/test/controllers/dispatch_controller.rb +11 -0
- data/spec/public/test/controllers/spec_helper_controller.rb +38 -0
- data/spec/public/test/multipart_request_helper_spec.rb +159 -0
- data/spec/public/test/multipart_upload_text_file.txt +1 -0
- data/spec/public/test/request_helper_spec.rb +221 -0
- data/spec/public/test/route_helper_spec.rb +71 -0
- data/spec/public/test/route_matchers_spec.rb +162 -0
- data/spec/public/test/view_helper_spec.rb +96 -0
- data/spec/public/test/view_matchers_spec.rb +183 -0
- data/spec/spec_helper.rb +68 -0
- metadata +493 -41
- data/README.txt +0 -3
- data/lib/extlib.rb +0 -32
- data/lib/extlib/assertions.rb +0 -8
- data/lib/extlib/blank.rb +0 -42
- data/lib/extlib/class.rb +0 -175
- data/lib/extlib/hash.rb +0 -410
- data/lib/extlib/hook.rb +0 -366
- data/lib/extlib/inflection.rb +0 -141
- data/lib/extlib/lazy_array.rb +0 -106
- data/lib/extlib/mash.rb +0 -143
- data/lib/extlib/module.rb +0 -37
- data/lib/extlib/object.rb +0 -165
- data/lib/extlib/object_space.rb +0 -13
- data/lib/extlib/pathname.rb +0 -5
- data/lib/extlib/pooling.rb +0 -233
- data/lib/extlib/rubygems.rb +0 -38
- data/lib/extlib/simple_set.rb +0 -39
- data/lib/extlib/string.rb +0 -132
- data/lib/extlib/struct.rb +0 -8
- data/lib/extlib/tasks/release.rb +0 -9
- data/lib/extlib/time.rb +0 -12
- data/lib/extlib/version.rb +0 -3
- data/lib/extlib/virtual_file.rb +0 -10
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe Merb::AbstractController, " rendering plain strings" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should render two thrown_contents into same object" do
|
10
|
+
dispatch_should_make_body("RenderTwoThrowContents", "FooBar")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should support rendering plain strings with no layout" do
|
14
|
+
dispatch_should_make_body("RenderString", "the index")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should support rendering plain strings with custom layouts" do
|
18
|
+
dispatch_should_make_body("RenderStringCustomLayout", "Custom: the index")
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should support rendering plain strings with the application layout" do
|
22
|
+
dispatch_should_make_body("RenderStringAppLayout", "App: the index")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should support rendering plain strings with the controller layout" do
|
26
|
+
dispatch_should_make_body("RenderStringControllerLayout", "Controller: the index")
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should support rendering plain strings with dynamic layouts" do
|
30
|
+
dispatch_should_make_body("RenderStringDynamicLayout", "Custom: the index", :index)
|
31
|
+
dispatch_should_make_body("RenderStringDynamicLayout", "Alt: the alt index", :alt_index)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
describe Merb::AbstractController, " rendering templates" do
|
37
|
+
|
38
|
+
it "should support rendering templates with no layout" do
|
39
|
+
dispatch_should_make_body("RenderTemplate", "the index")
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should support rendering templates with custom layouts" do
|
43
|
+
dispatch_should_make_body("RenderStringCustomLayout", "Custom: the index")
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should support rendering templates with the application layout" do
|
47
|
+
dispatch_should_make_body("RenderTemplateAppLayout", "App: the index")
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should support rendering plain strings with the controller layout" do
|
51
|
+
dispatch_should_make_body("RenderTemplateControllerLayout", "Controller: the index")
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should support rendering templates without any layout (even if the default layout exists)" do
|
55
|
+
dispatch_should_make_body("RenderNoDefaultAppLayout", "the index")
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should inherit the layout setting from a parent controller class" do
|
59
|
+
dispatch_should_make_body("RenderNoDefaultAppLayoutInherited", "the index")
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should support reverting to the default layout" do
|
63
|
+
dispatch_should_make_body("RenderDefaultAppLayoutInheritedOverride", "App: the index")
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should support rendering templates with a custom location" do
|
67
|
+
dispatch_should_make_body("RenderTemplateCustomLocation", "Wonderful")
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should support rendering templates from an absolute path location" do
|
71
|
+
dispatch_should_make_body("RenderTemplateAbsolutePath", "Wonderful")
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should support rendering templates with multiple roots" do
|
75
|
+
dispatch_should_make_body("RenderTemplateMultipleRoots", "App: Multiple")
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should support rendering templates with multiple roots, first root" do
|
79
|
+
dispatch_should_make_body("RenderTemplateMultipleRoots", "default show", "show")
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should support rendering templates with multiple roots and custom location" do
|
83
|
+
dispatch_should_make_body("RenderTemplateMultipleRootsAndCustomLocation", "Woot.")
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should support rendering templates with multiple roots and custom location from an inherited controller" do
|
87
|
+
dispatch_should_make_body("RenderTemplateMultipleRootsInherited", "Good.")
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
__DIR__ = File.dirname(__FILE__)
|
2
|
+
require File.join(__DIR__, "..", "..", "spec_helper")
|
3
|
+
|
4
|
+
require File.join(__DIR__, "controllers", "filters")
|
5
|
+
require File.join(__DIR__, "controllers", "cousins")
|
6
|
+
require File.join(__DIR__, "controllers", "render")
|
7
|
+
require File.join(__DIR__, "controllers", "partial")
|
8
|
+
require File.join(__DIR__, "controllers", "display")
|
9
|
+
require File.join(__DIR__, "controllers", "helpers")
|
10
|
+
|
11
|
+
Merb.start :environment => 'test'
|
12
|
+
|
13
|
+
module Merb::Test::Behaviors
|
14
|
+
include Merb::Test::RequestHelper
|
15
|
+
|
16
|
+
def dispatch_should_make_body(klass, body, action = :index, opts = {}, env = {}, &blk)
|
17
|
+
klass = Merb::Test::Fixtures::Abstract.const_get(klass)
|
18
|
+
if opts.key?(:presets)
|
19
|
+
controller = klass.new
|
20
|
+
opts[:presets].each { |attr, value| controller.send(attr, value)}
|
21
|
+
controller._dispatch(action.to_s)
|
22
|
+
else
|
23
|
+
controller = dispatch_to(klass, action, opts, env, &blk)
|
24
|
+
end
|
25
|
+
controller.body.should == body
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
Spec::Runner.configure do |config|
|
30
|
+
config.include Merb::Test::Behaviors
|
31
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# The before/after filters in BootLoaders are considered public API.
|
2
|
+
#
|
3
|
+
# However, Merb::BootLoader.subclasses is not considered public API and should not be used in plugins.
|
4
|
+
|
5
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
6
|
+
|
7
|
+
class Merb::BootLoader::AfterTest < Merb::BootLoader
|
8
|
+
after Merb::BootLoader::BeforeAppLoads
|
9
|
+
|
10
|
+
def self.run
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Merb::BootLoader::BeforeTest < Merb::BootLoader
|
15
|
+
before Merb::BootLoader::Templates
|
16
|
+
|
17
|
+
def self.run
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "The BootLoader" do
|
22
|
+
|
23
|
+
it "should support adding a BootLoader after another" do
|
24
|
+
idx = Merb::BootLoader.subclasses.index("Merb::BootLoader::BeforeAppLoads")
|
25
|
+
Merb::BootLoader.subclasses.index("Merb::BootLoader::AfterTest").should == idx + 1
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should support adding a BootLoader before another" do
|
29
|
+
idx = Merb::BootLoader.subclasses.index("Merb::BootLoader::Templates")
|
30
|
+
Merb::BootLoader.subclasses.index("Merb::BootLoader::BeforeTest").should == idx - 1
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe "basic_authentication in general", :shared => true do
|
4
|
+
|
5
|
+
it "should halt the filter chain and return a 401 status code if no authentication is sent" do
|
6
|
+
response = dispatch_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index)
|
7
|
+
response.body.should == "HTTP Basic: Access denied.\n"
|
8
|
+
response.status.should == 401
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should halt the filter chain and return a 401 status code on invalid username and password" do
|
12
|
+
u, p = "John", "password"
|
13
|
+
response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
|
14
|
+
response.body.should == "HTTP Basic: Access denied.\n"
|
15
|
+
response.status.should == 401
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should halt the filter chain and return a 401 status code on invalid username and valid password" do
|
19
|
+
u, p = "John", "secret"
|
20
|
+
response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
|
21
|
+
response.body.should == "HTTP Basic: Access denied.\n"
|
22
|
+
response.status.should == 401
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should halt the filter chain and return a 401 status code on valid username and invalid password" do
|
26
|
+
u, p = "Fred", "password"
|
27
|
+
response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
|
28
|
+
response.body.should == "HTTP Basic: Access denied.\n"
|
29
|
+
response.status.should == 401
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should call the action on valid username and password" do
|
33
|
+
u, p = "Fred", "secret"
|
34
|
+
response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
|
35
|
+
response.body.should == "authenticated"
|
36
|
+
response.status.should == 200
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
describe Merb::Controller, "#basic_authentication with no realm" do
|
42
|
+
|
43
|
+
it_should_behave_like "basic_authentication in general"
|
44
|
+
|
45
|
+
it "should have a default WWW-Authenticate realm of 'Application' if no authentication is sent" do
|
46
|
+
response = dispatch_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index)
|
47
|
+
response.headers['WWW-Authenticate'] = 'Basic realm="Application"'
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should have a default WWW-Authenticate realm of 'Application' if incorrect authentication is sent" do
|
51
|
+
u, p = "John", "password"
|
52
|
+
response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
|
53
|
+
response.headers['WWW-Authenticate'] = 'Basic realm="Application"'
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
describe Merb::Controller, "#basic_authentication with realm" do
|
59
|
+
|
60
|
+
it_should_behave_like "basic_authentication in general"
|
61
|
+
|
62
|
+
it "should set the WWW-Authenticate realm if no authentication is sent" do
|
63
|
+
response = dispatch_to(Merb::Test::Fixtures::Controllers::BasicAuthenticationWithRealm, :index)
|
64
|
+
response.headers['WWW-Authenticate'] = 'Basic realm="My SuperApp"'
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should set the WWW-Authenticate realm if incorrect authentication is sent" do
|
68
|
+
u, p = "John", "password"
|
69
|
+
response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthenticationWithRealm, :index, u, p)
|
70
|
+
response.headers['WWW-Authenticate'] = 'Basic realm="My SuperApp"'
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
describe Merb::Controller, "#basic_authentication.authenticate" do
|
76
|
+
|
77
|
+
it "should pass in the username and password and return the result of the block" do
|
78
|
+
u, p = "Fred", "secret"
|
79
|
+
response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::AuthenticateBasicAuthentication, :index, u, p)
|
80
|
+
response.body.should == "Fred:secret"
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
describe Merb::Controller, "#basic_authentication.request" do
|
86
|
+
|
87
|
+
it "should halt the filter chain and return a 401 status code" do
|
88
|
+
response = dispatch_to(Merb::Test::Fixtures::Controllers::RequestBasicAuthentication, :index)
|
89
|
+
response.body.should == "HTTP Basic: Access denied.\n"
|
90
|
+
response.status.should == 401
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should have a default WWW-Authenticate realm of 'Application'" do
|
94
|
+
response = dispatch_to(Merb::Test::Fixtures::Controllers::RequestBasicAuthentication, :index)
|
95
|
+
response.headers['WWW-Authenticate'].should == 'Basic realm="Application"'
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should set the WWW-Authenticate realm" do
|
99
|
+
response = dispatch_to(Merb::Test::Fixtures::Controllers::RequestBasicAuthenticationWithRealm, :index)
|
100
|
+
response.headers['WWW-Authenticate'].should == 'Basic realm="My SuperApp"'
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe Merb::Controller, " callable actions" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")
|
7
|
+
Merb::Router.prepare do |r|
|
8
|
+
r.default_routes
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should not have any callable actions by default" do
|
13
|
+
Merb::Controller.callable_actions.should be_empty
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should dispatch to callable actions" do
|
17
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::Base, :index)
|
18
|
+
controller.body.should == "index"
|
19
|
+
controller.status.should == 200
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should not dispatch to hidden actions" do
|
23
|
+
calling { dispatch_to(Merb::Test::Fixtures::Controllers::Base, :hidden) }.
|
24
|
+
should raise_error(Merb::ControllerExceptions::ActionNotFound)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should dispatch to included methods with show_action called" do
|
28
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::Base, :baz).body.should == "baz"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should not dispatch to included methods with show_action not called" do
|
32
|
+
calling { dispatch_to(Merb::Test::Fixtures::Controllers::Base, :bat) }.
|
33
|
+
should raise_error(Merb::ControllerExceptions::ActionNotFound)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Merb::Test::Fixtures::Controllers
|
2
|
+
|
3
|
+
class Testing < Merb::Controller
|
4
|
+
self._template_root = File.dirname(__FILE__) / "views"
|
5
|
+
end
|
6
|
+
|
7
|
+
class BasicAuthentication < Testing
|
8
|
+
before :authenticate, :only => :index
|
9
|
+
|
10
|
+
def index
|
11
|
+
"authenticated"
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def authenticate
|
17
|
+
basic_authentication { |u, p| u == "Fred" && p == "secret" }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class BasicAuthenticationWithRealm < BasicAuthentication
|
22
|
+
def authenticate
|
23
|
+
basic_authentication("My Super App") { |u, p| u == "Fred" && p == "secret" }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class AuthenticateBasicAuthentication < Testing
|
28
|
+
def index
|
29
|
+
basic_authentication.authenticate { |u, p| "Fred:secret" }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class RequestBasicAuthentication < BasicAuthentication
|
34
|
+
def authenticate
|
35
|
+
basic_authentication.request
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class RequestBasicAuthenticationWithRealm < BasicAuthentication
|
40
|
+
def authenticate
|
41
|
+
basic_authentication("My SuperApp").request
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Merb::Test::Fixtures
|
2
|
+
module Controllers
|
3
|
+
class Testing < Merb::Controller
|
4
|
+
self._template_root = File.dirname(__FILE__) / "views"
|
5
|
+
end
|
6
|
+
|
7
|
+
module Inclusion
|
8
|
+
def self.included(base)
|
9
|
+
base.show_action(:baz)
|
10
|
+
end
|
11
|
+
|
12
|
+
def baz
|
13
|
+
"baz"
|
14
|
+
end
|
15
|
+
|
16
|
+
def bat
|
17
|
+
"bat"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Base < Testing
|
22
|
+
include Inclusion
|
23
|
+
|
24
|
+
def index
|
25
|
+
self.status = :ok
|
26
|
+
"index"
|
27
|
+
end
|
28
|
+
|
29
|
+
def hidden
|
30
|
+
"Bar"
|
31
|
+
end
|
32
|
+
hide_action :hidden
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
module Merb::Test::Fixtures::Controllers
|
2
|
+
class SomeModel
|
3
|
+
def to_xml; "<XML:Model />" end
|
4
|
+
def to_json(options = {})
|
5
|
+
includes = options[:include].join(', ') rescue ""
|
6
|
+
excludes = options[:except].first rescue ""
|
7
|
+
"{ 'include': '#{includes}', 'exclude': '#{excludes}' }"
|
8
|
+
end
|
9
|
+
def to_param
|
10
|
+
"1"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
class Testing < Merb::Controller
|
16
|
+
self._template_root = File.dirname(__FILE__) / "views"
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
class Display < Testing
|
21
|
+
def index
|
22
|
+
@obj = SomeModel.new
|
23
|
+
display @obj
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class DisplayWithLayout < Testing
|
28
|
+
provides :json
|
29
|
+
|
30
|
+
def index
|
31
|
+
@obj = SomeModel.new
|
32
|
+
display @obj, :layout => :custom_arg
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class DisplayHtmlDefault < Display; end
|
37
|
+
|
38
|
+
class DisplayClassProvides < Display
|
39
|
+
provides :xml
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
class DisplayLocalProvides < Display
|
44
|
+
def index
|
45
|
+
@obj = SomeModel.new
|
46
|
+
provides :xml
|
47
|
+
display @obj
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
class DisplayWithTemplate < Display
|
53
|
+
layout :custom
|
54
|
+
|
55
|
+
def no_layout
|
56
|
+
render :layout => false
|
57
|
+
end
|
58
|
+
|
59
|
+
def absolute_without_mime
|
60
|
+
render :template => File.expand_path(self._template_root) / "merb/test/fixtures/controllers/html_default/index"
|
61
|
+
end
|
62
|
+
|
63
|
+
def absolute_with_mime
|
64
|
+
render :template => File.expand_path(self._template_root) / "merb/test/fixtures/controllers/html_default/index.html"
|
65
|
+
end
|
66
|
+
|
67
|
+
def relative_without_mime
|
68
|
+
render :template => "merb/test/fixtures/controllers/html_default/index"
|
69
|
+
end
|
70
|
+
|
71
|
+
def relative_with_mime
|
72
|
+
render :template => "merb/test/fixtures/controllers/html_default/index.html"
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
class DisplayWithTemplateArgument < Display
|
78
|
+
def index
|
79
|
+
@obj = SomeModel.new
|
80
|
+
display @obj, :layout => :custom_arg
|
81
|
+
end
|
82
|
+
|
83
|
+
def index_by_arg
|
84
|
+
@obj = SomeModel.new
|
85
|
+
display @obj, "merb/test/fixtures/controllers/display_with_template_argument/index.html"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
class DisplayWithStringLocation < Display
|
90
|
+
provides :json
|
91
|
+
def index
|
92
|
+
@obj = SomeModel.new
|
93
|
+
display @obj, :location => "/some_resources/#{@obj.to_param}"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
class DisplayWithStatus < Display
|
98
|
+
provides :json
|
99
|
+
def index
|
100
|
+
@obj = SomeModel.new
|
101
|
+
display @obj, :status => 500
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
class DisplayWithSerializationOptions < Display
|
106
|
+
provides :json
|
107
|
+
|
108
|
+
def index
|
109
|
+
@obj = SomeModel.new
|
110
|
+
display @obj, :include => [:beer, :jazz], :except => [:idiots]
|
111
|
+
end
|
112
|
+
|
113
|
+
def index_that_passes_empty_hash
|
114
|
+
@obj = SomeModel.new
|
115
|
+
display @obj, {}
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|