diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 9a73ee76c1..2a81480e2a 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Fixed that setting the :host option in url_for would automatically turn off :only_path (since :host would otherwise not be shown) #9586 [Bounga] + * Added FormHelper#label #8641 [jcoglan] * Added AtomFeedHelper (slightly improved from the atom_feed_helper plugin) [DHH] diff --git a/actionpack/lib/action_view/helpers/url_helper.rb b/actionpack/lib/action_view/helpers/url_helper.rb index 01427f8bb8..76963a20b3 100644 --- a/actionpack/lib/action_view/helpers/url_helper.rb +++ b/actionpack/lib/action_view/helpers/url_helper.rb @@ -20,7 +20,7 @@ module ActionView # # ==== Options # * :anchor -- specifies the anchor name to be appended to the path. - # * :only_path -- if true, returns the relative URL (omitting the protocol, host name, and port) (true by default) + # * :only_path -- if true, returns the relative URL (omitting the protocol, host name, and port) (true by default unless :host is specified) # * :trailing_slash -- if true, adds a trailing slash, as in "/archive/2005/". Note that this # is currently not recommended since it breaks caching. # * :host -- overrides the default (current) host if provided @@ -65,7 +65,8 @@ module ActionView def url_for(options = {}) case options when Hash - options = { :only_path => true }.update(options.symbolize_keys) + show_path = options[:host].nil? ? true : false + options = { :only_path => show_path }.update(options.symbolize_keys) escape = options.key?(:escape) ? options.delete(:escape) : true url = @controller.send(:url_for, options) when String diff --git a/actionpack/test/template/url_helper_test.rb b/actionpack/test/template/url_helper_test.rb index 32696165e9..db1e226a7e 100644 --- a/actionpack/test/template/url_helper_test.rb +++ b/actionpack/test/template/url_helper_test.rb @@ -82,6 +82,24 @@ class UrlHelperTest < Test::Unit::TestCase def test_link_tag_with_straight_url assert_dom_equal "Hello", link_to("Hello", "http://www.example.com") end + + def test_link_tag_without_host_option + ActionController::Base.class_eval { attr_accessor :url } + url = {:controller => 'weblog', :action => 'show'} + @controller = ActionController::Base.new + @controller.request = ActionController::TestRequest.new + @controller.url = ActionController::UrlRewriter.new(@controller.request, url) + assert_dom_equal(%q{Test Link}, link_to('Test Link', url)) + end + + def test_link_tag_with_host_option + ActionController::Base.class_eval { attr_accessor :url } + url = {:controller => 'weblog', :action => 'show', :host => 'www.example.com'} + @controller = ActionController::Base.new + @controller.request = ActionController::TestRequest.new + @controller.url = ActionController::UrlRewriter.new(@controller.request, url) + assert_dom_equal(%q{Test Link}, link_to('Test Link', url)) + end def test_link_tag_with_query assert_dom_equal "Hello", link_to("Hello", "http://www.example.com?q1=v1&q2=v2") @@ -175,7 +193,7 @@ class UrlHelperTest < Test::Unit::TestCase def test_link_tag_using_post_javascript_and_popup assert_raises(ActionView::ActionViewError) { link_to("Hello", "http://www.example.com", :popup => true, :method => :post, :confirm => "Are you serious?") } end - + def test_link_to_unless assert_equal "Showing", link_to_unless(true, "Showing", :action => "show", :controller => "weblog") assert_dom_equal "Listing", link_to_unless(false, "Listing", :action => "list", :controller => "weblog")