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,30 @@
|
|
1
|
+
module Merb::Test::Fixtures::Controllers
|
2
|
+
class Testing < Merb::Controller
|
3
|
+
self._template_root = File.dirname(__FILE__) / "views"
|
4
|
+
end
|
5
|
+
|
6
|
+
class SimpleRedirect < Testing
|
7
|
+
def index
|
8
|
+
redirect("/")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class RedirectWithMessage < Testing
|
13
|
+
def index
|
14
|
+
redirect("/", :notice => "what?")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class ConsumesMessage < Testing
|
19
|
+
def index
|
20
|
+
message[:notice].inspect
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class SetsMessage < Testing
|
25
|
+
def index
|
26
|
+
message[:notice] = "Hello"
|
27
|
+
message[:notice]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module Merb::Test::Fixtures::Controllers
|
2
|
+
class Testing < Merb::Controller
|
3
|
+
self._template_root = File.dirname(__FILE__) / "views"
|
4
|
+
end
|
5
|
+
|
6
|
+
|
7
|
+
class Responder < Testing
|
8
|
+
def index
|
9
|
+
render
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
class HtmlDefault < Responder; end
|
15
|
+
|
16
|
+
|
17
|
+
class ClassProvides < Responder
|
18
|
+
provides :xml
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
class LocalProvides < Responder
|
23
|
+
def index
|
24
|
+
provides :xml
|
25
|
+
render
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
class MultiProvides < Responder
|
31
|
+
def index
|
32
|
+
provides :html, :js
|
33
|
+
render
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class ClassAndLocalProvides < Responder
|
38
|
+
provides :html
|
39
|
+
def index
|
40
|
+
provides :xml
|
41
|
+
render
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class ClassOnlyProvides < Responder
|
46
|
+
only_provides :text, :xml
|
47
|
+
|
48
|
+
def index
|
49
|
+
"nothing"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
class OnlyProvides < Responder
|
55
|
+
def index
|
56
|
+
only_provides :text, :xml
|
57
|
+
"nothing"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class ClassDoesntProvides < Responder
|
62
|
+
provides :xml
|
63
|
+
does_not_provide :html
|
64
|
+
|
65
|
+
def index
|
66
|
+
"nothing"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
class DoesntProvide < Responder
|
72
|
+
def index
|
73
|
+
provides :xml
|
74
|
+
does_not_provide :html
|
75
|
+
"nothing"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
class FooFormatProvides < Responder
|
81
|
+
only_provides :foo
|
82
|
+
|
83
|
+
def index
|
84
|
+
render "nothing"
|
85
|
+
end
|
86
|
+
|
87
|
+
def show
|
88
|
+
headers["Content-Language"] = 'nl'
|
89
|
+
headers["Biz"] = "buzz"
|
90
|
+
render "nothing"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Custom: <%= catch_content(:for_layout) %>
|
@@ -0,0 +1 @@
|
|
1
|
+
Custom Arg: <%= catch_content(:for_layout) %>
|
@@ -0,0 +1 @@
|
|
1
|
+
{custom_arg: <%= catch_content(:for_layout) %>}
|
@@ -0,0 +1 @@
|
|
1
|
+
HTML: Class and Local
|
@@ -0,0 +1 @@
|
|
1
|
+
<XML:ClassAndLocalProvides provides='true' />
|
@@ -0,0 +1 @@
|
|
1
|
+
This should not be rendered
|
@@ -0,0 +1 @@
|
|
1
|
+
<XML:Class provides='true' />
|
@@ -0,0 +1 @@
|
|
1
|
+
Template
|
@@ -0,0 +1 @@
|
|
1
|
+
No layoutz eva!
|
@@ -0,0 +1 @@
|
|
1
|
+
Template
|
@@ -0,0 +1 @@
|
|
1
|
+
HTML: Default
|
data/spec/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Custom: <%= catch_content(:for_layout) %>
|
@@ -0,0 +1 @@
|
|
1
|
+
This should not render
|
@@ -0,0 +1 @@
|
|
1
|
+
<XML:Local provides='true' />
|
@@ -0,0 +1 @@
|
|
1
|
+
HTML: Multi
|
@@ -0,0 +1 @@
|
|
1
|
+
JS: Multi
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe Merb::Controller, " displaying objects based on mime type" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
Merb::Router.prepare do |r|
|
7
|
+
r.default_routes
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should default the mime-type to HTML (and raise since there's no to_html)" do
|
12
|
+
running { dispatch_to(Merb::Test::Fixtures::Controllers::DisplayHtmlDefault, :index) }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should set headers['Location'] to string provided by :location" do
|
16
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithStringLocation, :index, {}, :http_accept => "application/json").headers['Location'].should =~ /some_resources/
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should set the status to a code provided by :status" do
|
20
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithStatus, :index, {}, :http_accept => "application/json").status.should == 500
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should use a template if specified" do
|
24
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :index).body.should match(/Custom: Template/)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "overrides layout settings with render :layout => false" do
|
28
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :no_layout).body.should_not match(/Custom: Template/)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should accept an absolute template path argument - with the mimetype extension" do
|
32
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :absolute_with_mime).body.should == "Custom: HTML: Default"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should accept an absolute template path argument - without the mimetype extension" do
|
36
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :absolute_without_mime).body.should == "Custom: HTML: Default"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should accept a relative template path argument - with the mimetype extension" do
|
40
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :relative_with_mime).body.should == "Custom: HTML: Default"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should accept a relative template path argument - without the mimetype extension" do
|
44
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :relative_without_mime).body.should == "Custom: HTML: Default"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should accept a layout argument when calling to_*" do
|
48
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithLayout, :index, {},
|
49
|
+
:http_accept => "application/json").body.should == "{custom_arg: { 'include': '', 'exclude': '' }}"
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should accept a layout argument with a template" do
|
53
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplateArgument, :index).body.should == "Custom Arg: Template"
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should accept a template path argument" do
|
57
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplateArgument, :index_by_arg).body.should == "Template"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should use other mime-types if they are provided on the class level" do
|
61
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::DisplayClassProvides, :index, {}, :http_accept => "application/xml")
|
62
|
+
controller.body.should == "<XML:Model />"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should fail if none of the acceptable mime-types are available" do
|
66
|
+
calling { dispatch_to(Merb::Test::Fixtures::Controllers::DisplayClassProvides, :index, {}, :http_accept => "application/json") }.
|
67
|
+
should raise_error(Merb::ControllerExceptions::NotAcceptable)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should use mime-types that are provided at the local level" do
|
71
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::DisplayLocalProvides, :index, {}, :http_accept => "application/xml")
|
72
|
+
controller.body.should == "<XML:Model />"
|
73
|
+
end
|
74
|
+
|
75
|
+
it "passes all options to serialization method like :to_json" do
|
76
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithSerializationOptions, :index, {}, :http_accept => "application/json")
|
77
|
+
controller.body.should == "{ 'include': 'beer, jazz', 'exclude': 'idiots' }"
|
78
|
+
end
|
79
|
+
|
80
|
+
it "passes single argument to serialization method like :to_json" do
|
81
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithSerializationOptions, :index_that_passes_empty_hash, {}, :http_accept => "application/json")
|
82
|
+
controller.body.should == "{ 'include': '', 'exclude': '' }"
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe Merb::Controller, " redirects" do
|
4
|
+
it "redirects with simple URLs" do
|
5
|
+
@controller = dispatch_to(Merb::Test::Fixtures::Controllers::SimpleRedirect, :index)
|
6
|
+
@controller.status.should == 302
|
7
|
+
@controller.headers["Location"].should == "/"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "redirects with messages" do
|
11
|
+
@controller = dispatch_to(Merb::Test::Fixtures::Controllers::RedirectWithMessage, :index)
|
12
|
+
@controller.status.should == 302
|
13
|
+
expected_url = Merb::Request.escape([Marshal.dump(:notice => "what?")].pack("m"))
|
14
|
+
@controller.headers["Location"].should == "/?_message=#{expected_url}"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "consumes redirects with messages" do
|
18
|
+
message = Merb::Request.escape([Marshal.dump(:notice => "what?")].pack("m"))
|
19
|
+
@controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConsumesMessage, :index, {:_message => message})
|
20
|
+
@controller.body.should == "\"what?\""
|
21
|
+
end
|
22
|
+
|
23
|
+
it "supports setting the message for use immediately" do
|
24
|
+
@controller = dispatch_to(Merb::Test::Fixtures::Controllers::SetsMessage, :index)
|
25
|
+
@controller.body.should == "Hello"
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe Merb::Controller, " responds" 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 default the mime-type to HTML" do
|
13
|
+
dispatch_to(Merb::Test::Fixtures::Controllers::HtmlDefault, :index).body.should == "HTML: Default"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should use other mime-types if they are provided on the controller-level" do
|
17
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassProvides, :index, {}, :http_accept => "application/xml")
|
18
|
+
controller.body.should == "<XML:Class provides='true' />"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should fail if none of the acceptable mime-types are available" do
|
22
|
+
calling { dispatch_to(Merb::Test::Fixtures::Controllers::ClassProvides, :index, {}, :http_accept => "application/json") }.
|
23
|
+
should raise_error(Merb::ControllerExceptions::NotAcceptable)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should use mime-types that are provided at the action-level" do
|
27
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::LocalProvides, :index, {}, :http_accept => "application/xml")
|
28
|
+
controller.body.should == "<XML:Local provides='true' />"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should use mime-types that are provided at the controller-level as well as the action-level (controller)" do
|
32
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassAndLocalProvides, :index, {}, :http_accept => "text/html")
|
33
|
+
controller.class_provided_formats.should == [:html]
|
34
|
+
controller._provided_formats.should == [:html, :xml]
|
35
|
+
controller.body.should == "HTML: Class and Local"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should use mime-types that are provided at the controller-level as well as the action-level (action)" do
|
39
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassAndLocalProvides, :index, {}, :http_accept => "application/xml")
|
40
|
+
controller.class_provided_formats.should == [:html]
|
41
|
+
controller._provided_formats.should == [:html, :xml]
|
42
|
+
controller.body.should == "<XML:ClassAndLocalProvides provides='true' />"
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should use the first mime-type when accepting anything */*" do
|
46
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::MultiProvides, :index, {}, :http_accept => "*/*")
|
47
|
+
controller.body.should == "HTML: Multi"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should use the first mime-type when accepting anything */*, even if something unprovidable comes first" do
|
51
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::HtmlDefault, :index, {}, :http_accept => "application/json, */*")
|
52
|
+
controller.body.should == "HTML: Default"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should use the pick the first mime-type from the list not the */*" do
|
56
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::MultiProvides, :index, {}, :http_accept => "text/javascript, */*")
|
57
|
+
controller.body.should == "JS: Multi"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should pick the first mime-type if no specific supported content-type matches are *available*" do
|
61
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::MultiProvides, :index, {}, :http_accept => "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*")
|
62
|
+
controller.body.should == "HTML: Multi"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should pick the first mime-type if no specific supported content-type matches are actually *provided*" do
|
66
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::MultiProvides, :index, {}, :http_accept => "application/json, */*")
|
67
|
+
controller.body.should == "HTML: Multi"
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should select the format based on params supplied to it with controller-level provides" do
|
71
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassProvides, :index, :format => "xml")
|
72
|
+
controller.content_type.should == :xml
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should select the format based on params supplied to it with action-level provides" do
|
76
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::LocalProvides, :index, :format => "xml")
|
77
|
+
controller.content_type.should == :xml
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should select the format based on params supplied to it with controller and action provides (controller)" do
|
81
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassAndLocalProvides, :index, :format => "html")
|
82
|
+
controller.content_type.should == :html
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should select the format based on params supplied to it with controller and action provides (action)" do
|
86
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassAndLocalProvides, :index, :format => "xml")
|
87
|
+
controller.content_type.should == :xml
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should properly add formats when only_provides is called in action" do
|
91
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::OnlyProvides, :index, {}, :http_accept => "application/xml")
|
92
|
+
controller._provided_formats.should == [:text, :xml]
|
93
|
+
controller.content_type.should == :xml
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should properly remove formats when only_provides is called in action" do
|
97
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::OnlyProvides, :index, {}, :http_accept => "text/html")
|
98
|
+
lambda { controller.content_type }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should properly add formats when only_provides is called in controller" do
|
102
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassOnlyProvides, :index, {}, :http_accept => "application/xml")
|
103
|
+
controller._provided_formats.should == [:text, :xml]
|
104
|
+
controller.content_type.should == :xml
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should properly remove formats when only_provides is called in controller" do
|
108
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassOnlyProvides, :index, {}, :http_accept => "text/html")
|
109
|
+
lambda { controller.content_type }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should properly remove formats when does_not_provide is called in controller" do
|
113
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassDoesntProvides, :index, {}, :http_accept => "text/html")
|
114
|
+
controller._provided_formats.should == [:xml]
|
115
|
+
lambda { controller.content_type }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should properly remove formats when does_not_provide is called in action" do
|
119
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::DoesntProvide, :index, {}, :http_accept => "text/html")
|
120
|
+
controller._provided_formats.should == [:xml]
|
121
|
+
lambda { controller.content_type }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should return the correct default HTTP headers for a format" do
|
125
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassProvides, :index, :format => "xml")
|
126
|
+
controller.headers.keys.sort.should == ["Content-Type"]
|
127
|
+
controller.headers["Content-Type"].should == "application/xml; charset=utf-8"
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should append the correct charset which was set when the format was added" do
|
131
|
+
Merb.add_mime_type(:foo, nil, %w[application/foo], :charset => "iso-8859-1")
|
132
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::FooFormatProvides, :index, :format => "foo")
|
133
|
+
controller.headers["Content-Type"].should == "application/foo; charset=iso-8859-1"
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should return the correct HTTP headers which were set when the format was added" do
|
137
|
+
Merb.add_mime_type(:foo, nil, %w[application/foo], "Foo" => 'bar', "Content-Language" => "en", :charset => "utf-8")
|
138
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::FooFormatProvides, :index, :format => "foo")
|
139
|
+
controller.headers.keys.should_not include(:charset)
|
140
|
+
controller.headers["Content-Type"].should == "application/foo; charset=utf-8"
|
141
|
+
controller.headers["Content-Language"].should == "en"
|
142
|
+
controller.headers["Foo"] = "bar"
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should return the correct HTTP headers using the block given when the format was added" do
|
146
|
+
Merb.add_mime_type(:foo, nil, %w[application/foo], "Foo" => "bar") do |controller|
|
147
|
+
controller.headers["Action-Name"] = controller.action_name
|
148
|
+
end
|
149
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::FooFormatProvides, :index, :format => "foo")
|
150
|
+
controller.headers["Content-Type"].should == "application/foo"
|
151
|
+
controller.headers["Action-Name"].should == "index"
|
152
|
+
controller.headers["Foo"] = "bar"
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should not overwrite runtime-set headers with default format response headers" do
|
156
|
+
Merb.add_mime_type(:foo, nil, %w[application/foo], "Foo" => "bar", "Content-Language" => "en")
|
157
|
+
controller = dispatch_to(Merb::Test::Fixtures::Controllers::FooFormatProvides, :show, :format => "foo")
|
158
|
+
controller.headers["Content-Language"].should == "nl"
|
159
|
+
controller.headers["Biz"] = "buzz"
|
160
|
+
controller.headers["Foo"] = "bar"
|
161
|
+
end
|
162
|
+
|
163
|
+
end
|