diff options
author | José Valim <jose.valim@gmail.com> | 2011-10-04 02:26:40 -0700 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2011-10-04 02:26:40 -0700 |
commit | b039069756d7ac6cc9d9096c9e4f98fdcd6a9b33 (patch) | |
tree | aa1b52c692245d07915ce2c4daa2d4e60518ca5b | |
parent | 7f1a666db57983814e175cb5b54bb6621ec95c4f (diff) | |
parent | de942e5534a26942e261a7699adc28597c5ad1bc (diff) | |
download | rails-b039069756d7ac6cc9d9096c9e4f98fdcd6a9b33.tar.gz rails-b039069756d7ac6cc9d9096c9e4f98fdcd6a9b33.tar.bz2 rails-b039069756d7ac6cc9d9096c9e4f98fdcd6a9b33.zip |
Merge pull request #3209 from ksob/subdomain_false_strips_subdomains
:subdomain => false will remove all subdomains now. Closes #2025
-rw-r--r-- | actionpack/lib/action_dispatch/http/url.rb | 8 | ||||
-rw-r--r-- | actionpack/lib/action_dispatch/routing/url_for.rb | 5 | ||||
-rw-r--r-- | actionpack/test/controller/url_for_test.rb | 14 | ||||
-rw-r--r-- | actionpack/test/dispatch/request_test.rb | 1 |
4 files changed, 23 insertions, 5 deletions
diff --git a/actionpack/lib/action_dispatch/http/url.rb b/actionpack/lib/action_dispatch/http/url.rb index caa1decb9e..0db404957b 100644 --- a/actionpack/lib/action_dispatch/http/url.rb +++ b/actionpack/lib/action_dispatch/http/url.rb @@ -64,13 +64,15 @@ module ActionDispatch end def host_or_subdomain_and_domain(options) - return options[:host] unless options[:subdomain] || options[:domain] + return options[:host] unless options[:subdomain] || options[:subdomain] == false || options[:domain] tld_length = options[:tld_length] || @@tld_length host = "" - host << (options[:subdomain] || extract_subdomain(options[:host], tld_length)) - host << "." + unless options[:subdomain] == false + host << (options[:subdomain] || extract_subdomain(options[:host], tld_length)) + host << "." + end host << (options[:domain] || extract_domain(options[:host], tld_length)) host end diff --git a/actionpack/lib/action_dispatch/routing/url_for.rb b/actionpack/lib/action_dispatch/routing/url_for.rb index 30048cd48a..8fc8dc191b 100644 --- a/actionpack/lib/action_dispatch/routing/url_for.rb +++ b/actionpack/lib/action_dispatch/routing/url_for.rb @@ -116,9 +116,10 @@ module ActionDispatch # If <tt>:only_path</tt> is false, this option must be # provided either explicitly, or via +default_url_options+. # * <tt>:subdomain</tt> - Specifies the subdomain of the link, using the +tld_length+ - # to split the domain from the host. - # * <tt>:domain</tt> - Specifies the domain of the link, using the +tld_length+ # to split the subdomain from the host. + # If false, removes all subdomains from the host part of the link. + # * <tt>:domain</tt> - Specifies the domain of the link, using the +tld_length+ + # to split the domain from the host. # * <tt>:tld_length</tt> - Number of labels the TLD id composed of, only used if # <tt>:subdomain</tt> or <tt>:domain</tt> are supplied. Defaults to # <tt>ActionDispatch::Http::URL.tld_length</tt>, which in turn defaults to 1. diff --git a/actionpack/test/controller/url_for_test.rb b/actionpack/test/controller/url_for_test.rb index 484e996f31..11ced2df2a 100644 --- a/actionpack/test/controller/url_for_test.rb +++ b/actionpack/test/controller/url_for_test.rb @@ -67,6 +67,20 @@ module AbstractController ) end + def test_subdomain_may_be_removed + add_host! + assert_equal('http://basecamphq.com/c/a/i', + W.new.url_for(:subdomain => false, :controller => 'c', :action => 'a', :id => 'i') + ) + end + + def test_multiple_subdomains_may_be_removed + W.default_url_options[:host] = 'mobile.www.api.basecamphq.com' + assert_equal('http://basecamphq.com/c/a/i', + W.new.url_for(:subdomain => false, :controller => 'c', :action => 'a', :id => 'i') + ) + end + def test_domain_may_be_changed add_host! assert_equal('http://www.37signals.com/c/a/i', diff --git a/actionpack/test/dispatch/request_test.rb b/actionpack/test/dispatch/request_test.rb index 060bcfb5ec..a611252b31 100644 --- a/actionpack/test/dispatch/request_test.rb +++ b/actionpack/test/dispatch/request_test.rb @@ -15,6 +15,7 @@ class RequestTest < ActiveSupport::TestCase assert_equal 'http://www.example.com', url_for assert_equal 'http://api.example.com', url_for(:subdomain => 'api') + assert_equal 'http://example.com', url_for(:subdomain => false) assert_equal 'http://www.ror.com', url_for(:domain => 'ror.com') assert_equal 'http://api.ror.co.uk', url_for(:host => 'www.ror.co.uk', :subdomain => 'api', :tld_length => 2) assert_equal 'http://www.example.com:8080', url_for(:port => 8080) |