From 757379128442d07ebebd7a3d22853d016cfb95b4 Mon Sep 17 00:00:00 2001 From: Michael Koziarski Date: Sat, 22 Sep 2007 19:20:06 +0000 Subject: Disable the routing optimisation code when dealing with foo_url helpers. Add test to actionmailer to expose the problem they introduced. References #9450 [Koz] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7572 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- .../test/fixtures/test_mailer/signed_up_with_url.erb | 2 +- actionmailer/test/url_test.rb | 6 +++++- actionpack/lib/action_controller/routing_optimisation.rb | 8 +++++--- actionpack/test/controller/routing_test.rb | 12 ++++++------ 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/actionmailer/test/fixtures/test_mailer/signed_up_with_url.erb b/actionmailer/test/fixtures/test_mailer/signed_up_with_url.erb index e8fb65d4d2..08f05b5ef0 100644 --- a/actionmailer/test/fixtures/test_mailer/signed_up_with_url.erb +++ b/actionmailer/test/fixtures/test_mailer/signed_up_with_url.erb @@ -1,3 +1,3 @@ Hello there, -Mr. <%= @recipient %>. Please see our greeting at <%= @welcome_url %> \ No newline at end of file +Mr. <%= @recipient %>. Please see our greeting at <%= @welcome_url %> <%= welcome_url %> \ No newline at end of file diff --git a/actionmailer/test/url_test.rb b/actionmailer/test/url_test.rb index ded343cfc5..2c393651fd 100644 --- a/actionmailer/test/url_test.rb +++ b/actionmailer/test/url_test.rb @@ -1,6 +1,9 @@ require "#{File.dirname(__FILE__)}/abstract_unit" class TestMailer < ActionMailer::Base + + default_url_options[:host] = 'www.basecamphq.com' + def signed_up_with_url(recipient) @recipients = recipient @subject = "[Signed up] Welcome #{recipient}" @@ -47,12 +50,13 @@ class ActionMailerUrlTest < Test::Unit::TestCase def test_signed_up_with_url ActionController::Routing::Routes.draw do |map| map.connect ':controller/:action/:id' + map.welcome 'welcome', :controller=>"foo", :action=>"bar" end expected = new_mail expected.to = @recipient expected.subject = "[Signed up] Welcome #{@recipient}" - expected.body = "Hello there, \n\nMr. #{@recipient}. Please see our greeting at http://example.com/welcome/greeting" + expected.body = "Hello there, \n\nMr. #{@recipient}. Please see our greeting at http://example.com/welcome/greeting http://www.basecamphq.com/welcome" expected.from = "system@loudthinking.com" expected.date = Time.local(2004, 12, 12) diff --git a/actionpack/lib/action_controller/routing_optimisation.rb b/actionpack/lib/action_controller/routing_optimisation.rb index 7cf85c9b9a..fdd5a81c19 100644 --- a/actionpack/lib/action_controller/routing_optimisation.rb +++ b/actionpack/lib/action_controller/routing_optimisation.rb @@ -41,8 +41,10 @@ module ActionController end end + # Temporarily disabled :url optimisation pending proper solution to + # Issues around request.host etc. def applicable? - true + kind != :url end end @@ -76,7 +78,7 @@ module ActionController # The last entry in route.segments appears to # *always* be a # 'divider segment' for '/' but we have assertions to ensure that # we don't include the trailing slashes, so skip them. - ((route.segments.size == 1 && kind == :path) ? route.segments : route.segments[0..-2]).each do |segment| + (route.segments.size == 1 ? route.segments : route.segments[0..-2]).each do |segment| if segment.is_a?(DynamicSegment) elements << segment.interpolation_chunk("args[#{idx}].to_param") idx += 1 @@ -105,7 +107,7 @@ module ActionController # To avoid generating http://localhost/?host=foo.example.com we # can't use this optimisation on routes without any segments def applicable? - route.segment_keys.size > 0 + super && route.segment_keys.size > 0 end end diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb index c7b7f40e0d..bd66e11fd1 100644 --- a/actionpack/test/controller/routing_test.rb +++ b/actionpack/test/controller/routing_test.rb @@ -169,7 +169,7 @@ class LegacyRouteSetTests < Test::Unit::TestCase def test_basic_named_route rs.add_named_route :home, '', :controller => 'content', :action => 'list' x = setup_for_named_route - assert_equal("http://named.route.test", + assert_equal("http://named.route.test/", x.send(:home_url)) end @@ -189,7 +189,7 @@ class LegacyRouteSetTests < Test::Unit::TestCase end def test_named_route_with_nested_controller - rs.add_named_route :users, '/admin/user', :controller => '/admin/user', :action => 'index' + rs.add_named_route :users, 'admin/user', :controller => 'admin/user', :action => 'index' x = setup_for_named_route assert_equal("http://named.route.test/admin/user", x.send(:users_url)) @@ -201,9 +201,9 @@ class LegacyRouteSetTests < Test::Unit::TestCase rs.add_named_route :user, 'admin/user/:id', :controller=>'/admin/user', :action=>'show' x = setup_for_named_route x.expects(:url_for).never - x.send(:users_url) + # x.send(:users_url) x.send(:users_path) - x.send(:user_url, 2, :foo=>"bar") + # x.send(:user_url, 2, :foo=>"bar") x.send(:user_path, 3, :bar=>"foo") end end @@ -225,7 +225,7 @@ class LegacyRouteSetTests < Test::Unit::TestCase map.root :controller => "hello" end x = setup_for_named_route - assert_equal("http://named.route.test", x.send(:root_url)) + assert_equal("http://named.route.test/", x.send(:root_url)) assert_equal("/", x.send(:root_path)) end @@ -485,7 +485,7 @@ class LegacyRouteSetTests < Test::Unit::TestCase assert_equal '/', rs.generate(:controller => 'content') x = setup_for_named_route - assert_equal("http://named.route.test", + assert_equal("http://named.route.test/", x.send(:home_url)) end -- cgit v1.2.3