aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/dispatch
diff options
context:
space:
mode:
authorPiotr Sarnacki <drogus@gmail.com>2010-07-18 19:49:51 +0200
committerPiotr Sarnacki <drogus@gmail.com>2010-09-03 22:59:07 +0200
commit6c95e0f879aafa5921cd7898d5951b9a926d3c9a (patch)
treed327320b3349b8a3359ca7c16e92f72fce2a92a6 /actionpack/test/dispatch
parente9791bec823e42372eca095b946c93c1712a0613 (diff)
downloadrails-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.rb84
-rw-r--r--actionpack/test/dispatch/url_for_test.rb52
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