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,113 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
describe "namespaced resource(s) routes" do
|
3
|
+
|
4
|
+
after :each do
|
5
|
+
Merb::Router.named_routes = {}
|
6
|
+
Merb::Router.routes = []
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should match a get to /admin/blogposts without setting namespace" do
|
10
|
+
Merb::Router.prepare do |r|
|
11
|
+
r.match('/admin') do |admin|
|
12
|
+
admin.resources :blogposts
|
13
|
+
end
|
14
|
+
end
|
15
|
+
route_to('/admin/blogposts', :method => :get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace=>nil)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should match a get to /admin/blogposts setting namespace manually" do
|
19
|
+
Merb::Router.prepare do |r|
|
20
|
+
r.match('/admin').to(:namespace => "my_admin") do |admin|
|
21
|
+
admin.resources :blogposts
|
22
|
+
end
|
23
|
+
end
|
24
|
+
route_to('/admin/blogposts', :method => :get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace=>"my_admin")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should match a get to /admin/blogposts to the blogposts controller and index action" do
|
28
|
+
Merb::Router.prepare do |r|
|
29
|
+
r.namespace :admin do |admin|
|
30
|
+
admin.resources :blogposts
|
31
|
+
end
|
32
|
+
end
|
33
|
+
route_to('/admin/blogposts', :method => :get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace => 'admin')
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should match a get to /admin/foo to the foo controller and show action" do
|
37
|
+
Merb::Router.prepare do |r|
|
38
|
+
r.namespace :admin do |admin|
|
39
|
+
admin.resource :foo
|
40
|
+
end
|
41
|
+
end
|
42
|
+
route_to('/admin/foo', :method => :get).should have_route(:controller => 'foo', :action => 'show', :id => nil)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should match a get to /admin/foo/blogposts to the blogposts controller and index action" do
|
46
|
+
Merb::Router.prepare do |r|
|
47
|
+
r.namespace :admin do |admin|
|
48
|
+
admin.resource :foo do |foo|
|
49
|
+
foo.resources :blogposts
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
route_to('/admin/foo/blogposts', :method => :get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace => 'admin')
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should match a get to /admin/blogposts/1/foo to the foo controller and the show action" do
|
57
|
+
Merb::Router.prepare do |r|
|
58
|
+
r.namespace :admin do |admin|
|
59
|
+
admin.resources :blogposts do |blogposts|
|
60
|
+
blogposts.resource :foo
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
route_to('/admin/blogposts/1/foo', :method => :get).should have_route(:controller => 'foo', :action => 'show', :blogpost_id => '1', :id => nil, :namespace => "admin")
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should match a get to /blogposts to the blogposts controller when namespace is passed in to resources" do
|
68
|
+
Merb::Router.prepare do |r|
|
69
|
+
r.resources :blogposts, :namespace => "admin"
|
70
|
+
end
|
71
|
+
route_to("/blogposts", :method =>:get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace => "admin")
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should match a get to /blogposts/1/foo to the foo controller when namespace is passed in to resources as an option" do
|
75
|
+
Merb::Router.prepare do |r|
|
76
|
+
r.resources :blogposts, :namespace => "admin" do |blogposts|
|
77
|
+
blogposts.resource :foo, :namespace => "admin"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
route_to("/blogposts", :method =>:get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace => "admin")
|
81
|
+
route_to("/blogposts/1/foo", :method =>:get).should have_route(:controller => 'foo', :action => 'show', :blogpost_id => '1', :namespace => "admin")
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should match a get to /blogposts/1/foo to the foo controller without a namespace" do
|
85
|
+
Merb::Router.prepare do |r|
|
86
|
+
r.resources :blogposts, :namespace => "admin" do |blogposts|
|
87
|
+
blogposts.resource :foo
|
88
|
+
end
|
89
|
+
end
|
90
|
+
route_to("/blogposts/1/foo", :method =>:get).should have_route(:controller => 'foo', :action => 'show', :blogpost_id => '1', :namespace => nil)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should match a get to /my_admin/blogposts to the blogposts controller with a custom patch setting" do
|
94
|
+
Merb::Router.prepare do |r|
|
95
|
+
r.namespace(:admin, :path=>"my_admin") do |admin|
|
96
|
+
admin.resources :blogposts
|
97
|
+
end
|
98
|
+
end
|
99
|
+
route_to('/my_admin/blogposts', :method => :get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil, :namespace => 'admin')
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should match a get to /admin/blogposts/1/foo to the foo controller and the show action with namespace admin" do
|
103
|
+
Merb::Router.prepare do |r|
|
104
|
+
r.namespace(:admin, :path=>"") do |admin|
|
105
|
+
admin.resources :blogposts do |blogposts|
|
106
|
+
blogposts.resource :foo
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
route_to('/blogposts/1/foo', :method => :get).should have_route(:controller => 'foo', :action => 'show', :blogpost_id => '1', :id => nil, :namespace => "admin")
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe "A route derived from the blocks of #match" do
|
4
|
+
|
5
|
+
it "should inherit the :controller option." do
|
6
|
+
Merb::Router.prepare do |r|
|
7
|
+
r.match('/alpha', :controller=>'Alphas') do |alpha|
|
8
|
+
alpha.match('').to(:action=>'normal')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
route_to('/alpha').should have_route(:controller=>'Alphas',:action=>'normal')
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should inherit the :action option." do
|
15
|
+
Merb::Router.prepare do |r|
|
16
|
+
r.match('/alpha', :action=>'wierd') do |alpha|
|
17
|
+
alpha.match('').to(:controller=>'Alphas')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
route_to('/alpha').should have_route(:controller=>'Alphas',:action=>'wierd')
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should inherit the default :action of 'index'" do
|
24
|
+
Merb::Router.prepare do |r|
|
25
|
+
r.match('/alpha', :controller=>'Alphas') do |alpha|
|
26
|
+
alpha.match('').to({})
|
27
|
+
end
|
28
|
+
end
|
29
|
+
route_to('/alpha').should have_route(:controller=>'Alphas',:action=>'index')
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should make use of the :params option" do
|
33
|
+
Merb::Router.prepare do |r|
|
34
|
+
r.match('/alpha', :controller=>'Alphas', :params =>{:key=>'value'}) do |alpha|
|
35
|
+
alpha.match('').to(:action=>'normal',:key2=>'value2')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
route_to('/alpha').should have_route(:controller=>'Alphas',:key=>'value',:action=>'normal',:key2=>'value2')
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should inherit the parameters through many levels" do
|
42
|
+
Merb::Router.prepare do |r|
|
43
|
+
r.match('/alpha', :controller=>'Alphas') do |alpha|
|
44
|
+
alpha.match('/beta', :action=>'normal') do |beta|
|
45
|
+
beta.match('/:id').to(:id=>':id')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
route_to('/alpha/beta/gamma').should have_route(:controller=>'Alphas',:action=>'normal', :id=>'gamma')
|
50
|
+
end
|
51
|
+
|
52
|
+
it "allows wrapping of nested routes all having shared argument" do
|
53
|
+
Merb::Router.prepare do |r|
|
54
|
+
r.match('/:language') do |i18n|
|
55
|
+
i18n.match!('/:controller/:action')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
route_to('/fr/hotels/search').should have_route(:controller => 'hotels', :action => "search", :language => "fr")
|
59
|
+
end
|
60
|
+
|
61
|
+
it "allows wrapping of nested routes all having shared argument" do
|
62
|
+
Merb::Router.prepare do |r|
|
63
|
+
r.match(/\/?(.*)?/).to(:language => "[1]") do |l|
|
64
|
+
l.match("/guides/:action/:id").to(:controller => "tour_guides")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
route_to('/en/guides/search/london').should have_route(:controller => 'tour_guides', :action => "search", :language => "en", :id => "london")
|
69
|
+
end
|
70
|
+
|
71
|
+
it "allows wrapping of nested routes all having shared OPTIONAL argument" do
|
72
|
+
Merb::Router.prepare do |r|
|
73
|
+
r.match(/\/?(.*)?/).to(:language => "[1]") do |l|
|
74
|
+
l.match("/guides/:action/:id").to(:controller => "tour_guides")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
route_to('/guides/search/london').should have_route(:controller => 'tour_guides', :action => "search", :id => "london")
|
79
|
+
end
|
80
|
+
|
81
|
+
it "allows wrapping of nested routes all having shared argument with PREDEFINED VALUES" do
|
82
|
+
Merb::Router.prepare do |r|
|
83
|
+
r.match(/\/?(en|es|fr|be|nl)?/).to(:language => "[1]") do |l|
|
84
|
+
l.match("/guides/:action/:id").to(:controller => "tour_guides")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
route_to('/nl/guides/search/denboss').should have_route(:controller => 'tour_guides', :action => "search", :id => "denboss", :language => "nl")
|
89
|
+
route_to('/es/guides/search/barcelona').should have_route(:controller => 'tour_guides', :action => "search", :id => "barcelona", :language => "es")
|
90
|
+
route_to('/fr/guides/search/lille').should have_route(:controller => 'tour_guides', :action => "search", :id => "lille", :language => "fr")
|
91
|
+
route_to('/en/guides/search/london').should have_route(:controller => 'tour_guides', :action => "search", :id => "london", :language => "en")
|
92
|
+
route_to('/be/guides/search/brussels').should have_route(:controller => 'tour_guides', :action => "search", :id => "brussels", :language => "be")
|
93
|
+
|
94
|
+
route_to('/guides/search/brussels').should have_route(:controller => 'tour_guides', :action => "search", :id => "brussels")
|
95
|
+
route_to('/se/guides/search/stokholm').should have_route(:controller => 'tour_guides', :action => "search", :id => "stokholm", :language => nil)
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
Merb::Router.prepare do |r|
|
4
|
+
r.resources :blogposts do |b|
|
5
|
+
b.resources :comments do |c|
|
6
|
+
c.resources :versions
|
7
|
+
end
|
8
|
+
end
|
9
|
+
r.resources :users do |u|
|
10
|
+
u.resources :comments
|
11
|
+
end
|
12
|
+
r.resource :foo do |f|
|
13
|
+
f.resources :comments
|
14
|
+
end
|
15
|
+
r.resources :domains, :keys => [:domain] do |d|
|
16
|
+
d.resources :emails, :keys => [:username]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "nested resources routes" do
|
21
|
+
|
22
|
+
it "should match a get to /blogposts/1/comments to the comments controller and index action with blogpost_id" do
|
23
|
+
route_to('/blogposts/1/comments', :method => :get).should have_route(:controller => 'comments', :action => 'index', :id => nil, :blogpost_id => '1')
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should match a get to /blogposts/1/comments/2/versions to the versions controller and index action with blogpost_id and comment_id" do
|
27
|
+
route_to('/blogposts/1/comments/2/versions', :method => :get).should have_route(:controller => 'versions', :action => 'index', :id => nil, :blogpost_id => '1', :comment_id => '2')
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should match a get to /users/1/comments to the comments controller and index action with user_id" do
|
31
|
+
route_to('/users/1/comments', :method => :get).should have_route(:controller => 'comments', :action => 'index', :id => nil, :user_id => '1')
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should match a get to /foo/comments to the comments controller and index action" do
|
35
|
+
route_to('/foo/comments', :method => :get).should have_route(:controller => 'comments', :action => 'index', :id => nil)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should match a get to /domains/merbivore_com/emails to the emails controller and index action with domain => 'merbivore_com" do
|
39
|
+
route_to('/domains/merbivore_com/emails', :method => :get).should have_route(:controller => 'emails', :action => 'index', :username => nil, :domain => 'merbivore_com')
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe "resources routes" do
|
4
|
+
before :each do
|
5
|
+
Merb::Router.prepare do |r|
|
6
|
+
r.resource :foo
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should match a get to /foo to the blogposts controller and show action" do
|
11
|
+
route_to('/foo', :method => :get).should have_route(:controller => 'foo', :action => 'show', :id => nil)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should match a post to /foo to the blogposts controller and create action" do
|
15
|
+
route_to('/foo', :method => :post).should have_route(:controller => 'foo', :action => 'create', :id => nil)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should match a put to /foo to the blogposts controller and update action" do
|
19
|
+
route_to('/foo', :method => :put).should have_route(:controller => 'foo', :action => 'update', :id => nil)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should match a delete to /foo to the blogposts controller and show action" do
|
23
|
+
route_to('/foo', :method => :delete).should have_route(:controller => 'foo', :action => 'destroy', :id => nil)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should match a get to /foo/new to the blogposts controller and new action" do
|
27
|
+
route_to('/foo/new', :method => :get).should have_route(:controller => 'foo', :action => 'new', :id => nil)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should match a get to /foo/edit to the blogposts controller and edit action" do
|
31
|
+
route_to('/foo/edit', :method => :get).should have_route(:controller => 'foo', :action => 'edit', :id => nil)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should match a get to /foo/delete to the blogposts controller and delete action" do
|
35
|
+
route_to('/foo/delete', :method => :get).should have_route(:controller => 'foo', :action => 'delete', :id => nil)
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe "resources routes" do
|
4
|
+
before :each do
|
5
|
+
Merb::Router.prepare do |r|
|
6
|
+
r.resources :blogposts
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should match a get to /blogposts to the blogposts controller and index action" do
|
11
|
+
route_to('/blogposts', :method => :get).should have_route(:controller => 'blogposts', :action => 'index', :id => nil)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should match a post to /blogposts to the blogposts controller and create action" do
|
15
|
+
route_to('/blogposts', :method => :post).should have_route(:controller => 'blogposts', :action => 'create', :id => nil)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should match a get to /blogposts/new to the blogposts controller and the new action" do
|
19
|
+
route_to('/blogposts/new', :method => :get).should have_route(:controller => 'blogposts', :action => 'new', :id => nil)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should match a get to /blogposts/1 ot the blogposts controller and the show action with id 1" do
|
23
|
+
route_to('/blogposts/1', :method => :get).should have_route(:controller => 'blogposts', :action => 'show', :id => "1")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should match a put to /blogposts/1 ot the blogposts controller and the update action with id 1" do
|
27
|
+
route_to('/blogposts/1', :method => :put).should have_route(:controller => 'blogposts', :action => 'update', :id => "1")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should match a delete to /blogposts/1 ot the blogposts controller and the destroy action with id 1" do
|
31
|
+
route_to('/blogposts/1', :method => :delete).should have_route(:controller => 'blogposts', :action => 'destroy', :id => "1")
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should match a get to /blogposts/1/edit to the blogposts controller and the edit action with id 1" do
|
35
|
+
route_to('/blogposts/1/edit', :method => :get).should have_route(:controller => 'blogposts', :action => 'edit', :id => "1")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should not match a put to /blogposts/1/edit" do
|
39
|
+
# not sure which of these is the best way to specify what I mean - so they're both in...
|
40
|
+
route_to('/blogposts/1/edit', :method => :put).should have_nil_route
|
41
|
+
route_to('/blogposts/1/edit', :method => :put).should_not have_route(:controller => 'blogposts', :action => 'edit', :id => "1")
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should match a get to /blogposts/1/delete to the blogposts controller and the delete action with id 1" do
|
45
|
+
route_to('/blogposts/1/delete', :method => :get).should have_route(:controller => 'blogposts', :action => 'delete', :id => "1")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
describe "resources routes with named keys" do
|
51
|
+
before :each do
|
52
|
+
Merb::Router.prepare do |r|
|
53
|
+
r.resources :emails, :keys => ["username", "domain"]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should match a get to /emails/bidule/merbivore_com to the emails controller and the show action with username => 'bidule', domain => 'merbivore_com'" do
|
58
|
+
route_to('/emails/bidule/merbivore_com', :method => :get).should have_route(:controller => 'emails', :action => 'show', :username => "bidule", :domain => "merbivore_com")
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should match a put to /emails/bidule/merbivore_com to the emails controller and the update action with username => 'bidule', domain => 'merbivore_com'" do
|
62
|
+
route_to('/emails/bidule/merbivore_com', :method => :put).should have_route(:controller => 'emails', :action => 'update', :username => "bidule", :domain => "merbivore_com")
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should match a delete to /emails/bidule/merbivore_com to the emails controller and the destroy action with username => 'bidule', domain => 'merbivore_com'" do
|
66
|
+
route_to('/emails/bidule/merbivore_com', :method => :delete).should have_route(:controller => 'emails', :action => 'destroy', :username => "bidule", :domain => "merbivore_com")
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should match a get to /emails/bidule/merbivore_com/edit to the emails controller and the destroy action with username => 'bidule', domain => 'merbivore_com'" do
|
70
|
+
route_to('/emails/bidule/merbivore_com/edit', :method => :get).should have_route(:controller => 'emails', :action => 'edit', :username => "bidule", :domain => "merbivore_com")
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should not match a put to /emails/bidule/merbivore_com/edit" do
|
74
|
+
# not sure which of these is the best way to specify what I mean - so they're both in...
|
75
|
+
route_to('/emails/bidule/merbivore_com/edit', :method => :put).should have_nil_route
|
76
|
+
route_to('/emails/bidule/merbivore_com/edit', :method => :put).should_not have_route(:controller => 'emails', :action => 'edit', :username => "bidule", :domain => "merbivore_com")
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should match a get to /emails/bidule/merbivore_com/delete to the emails controller and the delete action with username => 'bidule', domain => 'merbivore_com'" do
|
80
|
+
route_to('/emails/bidule/merbivore_com/delete', :method => :get).should have_route(:controller => 'emails', :action => 'delete', :username => "bidule", :domain => "merbivore_com")
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
require 'rack/mock'
|
5
|
+
require 'stringio'
|
6
|
+
Merb.start :environment => 'test',
|
7
|
+
:merb_root => File.dirname(__FILE__) / 'fixture'
|
8
|
+
|
9
|
+
|
10
|
+
class SimpleRequest < OpenStruct
|
11
|
+
|
12
|
+
def method
|
13
|
+
@table[:method]
|
14
|
+
end
|
15
|
+
|
16
|
+
def params
|
17
|
+
@table
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def prepare_route(from, to)
|
22
|
+
Merb::Router.prepare {|r| r.match(from).to(to)}
|
23
|
+
end
|
24
|
+
|
25
|
+
def route_to(path, args = {}, protocol = "http://")
|
26
|
+
Merb::Router.match(SimpleRequest.new({:protocol => protocol, :path => path}.merge(args)))[1]
|
27
|
+
end
|
28
|
+
|
29
|
+
def match_for(path, args = {}, protocol = "http://")
|
30
|
+
Merb::Router.match(SimpleRequest.new({:protocol => protocol, :path => path}.merge(args)))
|
31
|
+
end
|
32
|
+
|
33
|
+
def matched_route_for(*args)
|
34
|
+
# get route index
|
35
|
+
idx = match_for(*args)[0]
|
36
|
+
|
37
|
+
Merb::Router.routes[idx]
|
38
|
+
end
|
39
|
+
|
40
|
+
def generate(*args)
|
41
|
+
Merb::Router.generate *args
|
42
|
+
end
|
43
|
+
|
44
|
+
module Merb
|
45
|
+
|
46
|
+
module Test
|
47
|
+
|
48
|
+
module RspecMatchers
|
49
|
+
|
50
|
+
class HaveRoute
|
51
|
+
|
52
|
+
def self.build(expected)
|
53
|
+
this = new
|
54
|
+
this.instance_variable_set("@expected", expected)
|
55
|
+
this
|
56
|
+
end
|
57
|
+
|
58
|
+
def matches?(target)
|
59
|
+
@target = target
|
60
|
+
@errors = []
|
61
|
+
@expected.all? { |param, value| @target[param] == value }
|
62
|
+
end
|
63
|
+
|
64
|
+
def failure_message
|
65
|
+
@target.each do |param, value|
|
66
|
+
@errors << "Expected :#{param} to be #{@expected[param].inspect}, but was #{value.inspect}" unless
|
67
|
+
@expected[param] == value
|
68
|
+
end
|
69
|
+
@errors << "Got #{@target.inspect}"
|
70
|
+
@errors.join("\n")
|
71
|
+
end
|
72
|
+
|
73
|
+
def negative_failure_message
|
74
|
+
"Expected #{@expected.inspect} not to be #{@target.inspect}, but it was."
|
75
|
+
end
|
76
|
+
|
77
|
+
def description() "have_route #{@target.inspect}" end
|
78
|
+
end
|
79
|
+
|
80
|
+
def have_route(expected)
|
81
|
+
HaveRoute.build(expected)
|
82
|
+
end
|
83
|
+
|
84
|
+
def have_nil_route
|
85
|
+
have_route({})
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|