diff options
author | Piotr Sarnacki <drogus@gmail.com> | 2010-07-18 19:49:51 +0200 |
---|---|---|
committer | Piotr Sarnacki <drogus@gmail.com> | 2010-09-03 22:59:07 +0200 |
commit | 6c95e0f879aafa5921cd7898d5951b9a926d3c9a (patch) | |
tree | d327320b3349b8a3359ca7c16e92f72fce2a92a6 /actionpack/test/dispatch | |
parent | e9791bec823e42372eca095b946c93c1712a0613 (diff) | |
download | rails-6c95e0f879aafa5921cd7898d5951b9a926d3c9a.tar.gz rails-6c95e0f879aafa5921cd7898d5951b9a926d3c9a.tar.bz2 rails-6c95e0f879aafa5921cd7898d5951b9a926d3c9a.zip |
Add mounted_helpers to routes
mounted_helpers are a bit similar to url_helpers. They're automatically
included in controllers for Rails.application and each of mounted
Engines. Mounted helper allows to call url_for and named helpers for
given application.
Given Blog::Engine mounted as blog_engine, there are 2 helpers defined:
app and blog_engine. You can call routes for app and engine using those
helpers:
app.root_url
app.url_for(:controller => "foo")
blog_engine.posts_path
blog_engine.url_for(@post)
Diffstat (limited to 'actionpack/test/dispatch')
-rw-r--r-- | actionpack/test/dispatch/prefix_generation_test.rb | 84 | ||||
-rw-r--r-- | actionpack/test/dispatch/url_for_test.rb | 52 |
2 files changed, 70 insertions, 66 deletions
diff --git a/actionpack/test/dispatch/prefix_generation_test.rb b/actionpack/test/dispatch/prefix_generation_test.rb index 2eb592c8d0..7fe11447b8 100644 --- a/actionpack/test/dispatch/prefix_generation_test.rb +++ b/actionpack/test/dispatch/prefix_generation_test.rb @@ -13,6 +13,7 @@ module TestGenerationPrefix match "/posts/:id", :to => "inside_engine_generating#show", :as => :post match "/posts", :to => "inside_engine_generating#index", :as => :posts match "/url_to_application", :to => "inside_engine_generating#url_to_application" + match "/polymorphic_path_for_engine", :to => "inside_engine_generating#polymorphic_path_for_engine" end routes @@ -31,9 +32,11 @@ module TestGenerationPrefix routes = ActionDispatch::Routing::RouteSet.new routes.draw do scope "/:omg", :omg => "awesome" do - mount BlogEngine => "/blog" + mount BlogEngine => "/blog", :as => "blog_engine" end match "/generate", :to => "outside_engine_generating#index" + match "/polymorphic_path_for_engine", :to => "outside_engine_generating#polymorphic_path_for_engine" + match "/polymorphic_with_url_for", :to => "outside_engine_generating#polymorphic_with_url_for" root :to => "outside_engine_generating#index" end @@ -47,8 +50,27 @@ module TestGenerationPrefix end end + # force draw + RailsApplication.routes + + class Post + extend ActiveModel::Naming + + def to_param + "1" + end + + def self.model_name + klass = "Post" + def klass.name; self end + + ActiveModel::Name.new(klass) + end + end + class ::InsideEngineGeneratingController < ActionController::Base include BlogEngine.routes.url_helpers + include RailsApplication.routes.mounted_helpers(:app) def index render :text => posts_path @@ -59,17 +81,30 @@ module TestGenerationPrefix end def url_to_application - path = url_for( RailsApplication, - :controller => "outside_engine_generating", - :action => "index", - :only_path => true) + path = app.url_for( :controller => "outside_engine_generating", + :action => "index", + :only_path => true) render :text => path end + + def polymorphic_path_for_engine + render :text => polymorphic_path(Post.new) + end end class ::OutsideEngineGeneratingController < ActionController::Base + include BlogEngine.routes.mounted_helpers + def index - render :text => url_for(BlogEngine, :post_path, :id => 1) + render :text => blog_engine.post_path(:id => 1) + end + + def polymorphic_path_for_engine + render :text => blog_engine.polymorphic_path(Post.new) + end + + def polymorphic_with_url_for + render :text => blog_engine.url_for(Post.new) end end @@ -83,9 +118,6 @@ module TestGenerationPrefix include RailsApplication.routes.url_helpers end - # force draw - RailsApplication.routes - def app RailsApplication end @@ -124,7 +156,12 @@ module TestGenerationPrefix get "/pure-awesomeness/blog/url_to_application", {}, 'SCRIPT_NAME' => '/foo' assert_equal "/something/generate", last_response.body end - + + test "[ENGINE] generating engine's url with polymorphic path" do + get "/pure-awesomeness/blog/polymorphic_path_for_engine" + assert_equal "/pure-awesomeness/blog/posts/1", last_response.body + end + # Inside Application test "[APP] generating engine's route includes prefix" do get "/generate" @@ -143,6 +180,16 @@ module TestGenerationPrefix assert_equal "/something/awesome/blog/posts/1", last_response.body end + test "[APP] generating engine's url with polymorphic path" do + get "/polymorphic_path_for_engine" + assert_equal "/awesome/blog/posts/1", last_response.body + end + + test "[APP] generating engine's url with url_for(@post)" do + get "/polymorphic_with_url_for" + assert_equal "http://example.org/awesome/blog/posts/1", last_response.body + end + # Inside any Object test "[OBJECT] generating engine's route includes prefix" do assert_equal "/awesome/blog/posts/1", engine_object.post_path(:id => 1) @@ -167,19 +214,28 @@ module TestGenerationPrefix end test "[OBJECT] generating engine's route with url_for" do - path = engine_object.url_for(BlogEngine, - :controller => "inside_engine_generating", + path = engine_object.url_for(:controller => "inside_engine_generating", :action => "show", :only_path => true, :omg => "omg", :id => 1) assert_equal "/omg/blog/posts/1", path + end - path = engine_object.url_for(BlogEngine, :posts_path) + test "[OBJECT] generating engine's route with named helpers" do + path = engine_object.posts_path assert_equal "/awesome/blog/posts", path - path = engine_object.url_for(BlogEngine, :posts_url, :host => "example.com") + path = engine_object.posts_url(:host => "example.com") assert_equal "http://example.com/awesome/blog/posts", path end + + test "[OBJECT] generating engine's route with polymorphic_url" do + path = engine_object.polymorphic_path(Post.new) + assert_equal "/awesome/blog/posts/1", path + + path = engine_object.polymorphic_url(Post.new, :host => "www.example.com") + assert_equal "http://www.example.com/awesome/blog/posts/1", path + end end end diff --git a/actionpack/test/dispatch/url_for_test.rb b/actionpack/test/dispatch/url_for_test.rb deleted file mode 100644 index 3dc96d27d7..0000000000 --- a/actionpack/test/dispatch/url_for_test.rb +++ /dev/null @@ -1,52 +0,0 @@ -require 'abstract_unit' - -module UrlForGeneration - class UrlForTest < ActionDispatch::IntegrationTest - - Routes = ActionDispatch::Routing::RouteSet.new - Routes.draw { match "/foo", :to => "my_route_generating#index", :as => :foo } - - class BlogEngine - def self.routes - @routes ||= begin - routes = ActionDispatch::Routing::RouteSet.new - routes.draw do - resources :posts - end - routes - end - end - end - - class Post - extend ActiveModel::Naming - - def to_param - "1" - end - - def self.model_name - klass = "Post" - def klass.name; self end - - ActiveModel::Name.new(klass) - end - end - - include Routes.url_helpers - - test "url_for with named url helpers" do - assert_equal "/posts", url_for(BlogEngine, :posts_path) - end - - test "url_for with polymorphic routes" do - assert_equal "http://www.example.com/posts/1", url_for(BlogEngine, Post.new) - end - - test "url_for with named url helper with arguments" do - assert_equal "/posts/1", url_for(BlogEngine, :post_path, 1) - assert_equal "/posts/1", url_for(BlogEngine, :post_path, :id => 1) - assert_equal "/posts/1.json", url_for(BlogEngine, :post_path, :id => 1, :format => :json) - end - end -end |