From 00deaf6d56085d4961eff8e8e0948a9241dfd5ea Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Dec 2004 18:59:24 +0000 Subject: Added :host and :protocol options to url_for and friends to redirect to another host and protocol than the current. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@266 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 5 +++++ actionpack/lib/action_controller/url_rewriter.rb | 6 +++--- actionpack/test/controller/url_test.rb | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 54a843279a..4311b28e30 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,3 +1,8 @@ +*SVN* + +* Added :host and :protocol options to url_for and friends to redirect to another host and protocol than the current. + + *1.1.0* * Added search through session to clear out association caches at the end of each request. This makes it possible to place Active Record objects diff --git a/actionpack/lib/action_controller/url_rewriter.rb b/actionpack/lib/action_controller/url_rewriter.rb index 493e4911c6..a3ff8fac32 100644 --- a/actionpack/lib/action_controller/url_rewriter.rb +++ b/actionpack/lib/action_controller/url_rewriter.rb @@ -1,7 +1,7 @@ module ActionController # Rewrites urls for Base.redirect_to and Base.url_for in the controller. class UrlRewriter #:nodoc: - VALID_OPTIONS = [:action, :action_prefix, :action_suffix, :module, :controller, :controller_prefix, :anchor, :params, :path_params, :id, :only_path, :overwrite_params ] + VALID_OPTIONS = [:action, :action_prefix, :action_suffix, :module, :controller, :controller_prefix, :anchor, :params, :path_params, :id, :only_path, :overwrite_params, :host, :protocol ] def initialize(request, controller, action) @request, @controller, @action = request, controller, action @@ -38,8 +38,8 @@ module ActionController def rewrite_url(path, options) rewritten_url = "" - rewritten_url << @request.protocol unless options[:only_path] - rewritten_url << @request.host_with_port unless options[:only_path] + rewritten_url << (options[:protocol] || @request.protocol) unless options[:only_path] + rewritten_url << (options[:host] || @request.host_with_port) unless options[:only_path] rewritten_url << path rewritten_url << build_query_string(new_parameters(options)) if options[:params] || options[:overwrite_params] diff --git a/actionpack/test/controller/url_test.rb b/actionpack/test/controller/url_test.rb index 10577382a6..5cae4e289b 100644 --- a/actionpack/test/controller/url_test.rb +++ b/actionpack/test/controller/url_test.rb @@ -60,6 +60,20 @@ class UrlTest < Test::Unit::TestCase assert_equal "http://www.singlefile.com/library/books/ISBN/0743536703/edit", @library_url.rewrite(:action => "edit") end + def test_clean_action_to_another_host + assert_equal( + "http://www.booksphere.com/library/books/ISBN/0743536703/edit", + @library_url.rewrite(:action => "edit", :host => "www.booksphere.com") + ) + end + + def test_clean_action_to_another_host_and_protocol + assert_equal( + "https://www.booksphere.com/library/books/ISBN/0743536703/edit", + @library_url.rewrite(:action => "edit", :host => "www.booksphere.com", :protocol => "https://") + ) + end + def test_clean_action_with_only_path assert_equal "/library/books/ISBN/0743536703/edit", @library_url.rewrite(:action => "edit", :only_path => true) end -- cgit v1.2.3