mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
modified current_page? to ignore extra parameters unless specified in options
Signed-off-by: Michael Koziarski <michael@koziarski.com> [#805 state:committed]
This commit is contained in:
committed by
Michael Koziarski
parent
2c7abe1b56
commit
ef9b6b5cba
@@ -499,7 +499,7 @@ module ActionView
|
||||
# True if the current request URI was generated by the given +options+.
|
||||
#
|
||||
# ==== Examples
|
||||
# Let's say we're in the <tt>/shop/checkout</tt> action.
|
||||
# Let's say we're in the <tt>/shop/checkout?order=desc</tt> action.
|
||||
#
|
||||
# current_page?(:action => 'process')
|
||||
# # => false
|
||||
@@ -507,6 +507,9 @@ module ActionView
|
||||
# current_page?(:controller => 'shop', :action => 'checkout')
|
||||
# # => true
|
||||
#
|
||||
# current_page?(:controller => 'shop', :action => 'checkout', :order => 'asc)
|
||||
# # => false
|
||||
#
|
||||
# current_page?(:action => 'checkout')
|
||||
# # => true
|
||||
#
|
||||
@@ -515,10 +518,18 @@ module ActionView
|
||||
def current_page?(options)
|
||||
url_string = CGI.escapeHTML(url_for(options))
|
||||
request = @controller.request
|
||||
if url_string =~ /^\w+:\/\//
|
||||
url_string == "#{request.protocol}#{request.host_with_port}#{request.request_uri}"
|
||||
# We ignore any extra parameters in the request_uri if the
|
||||
# submitted url doesn't have any either. This lets the function
|
||||
# work with things like ?order=asc
|
||||
if url_string.index("?")
|
||||
request_uri = request.request_uri
|
||||
else
|
||||
url_string == request.request_uri
|
||||
request_uri = request.request_uri.split('?').first
|
||||
end
|
||||
if url_string =~ /^\w+:\/\//
|
||||
url_string == "#{request.protocol}#{request.host_with_port}#{request_uri}"
|
||||
else
|
||||
url_string == request_uri
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -258,6 +258,16 @@ class UrlHelperTest < ActionView::TestCase
|
||||
assert_equal "Showing", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
|
||||
assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show")
|
||||
|
||||
@controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc")
|
||||
@controller.url = "http://www.example.com/weblog/show"
|
||||
assert_equal "Showing", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
|
||||
assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show")
|
||||
|
||||
@controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc")
|
||||
@controller.url = "http://www.example.com/weblog/show?order=asc"
|
||||
assert_equal "<a href=\"http://www.example.com/weblog/show?order=asc\">Showing</a>", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
|
||||
assert_equal "<a href=\"http://www.example.com/weblog/show?order=asc\">Showing</a>", link_to_unless_current("Showing", "http://www.example.com/weblog/show?order=asc")
|
||||
|
||||
@controller.request = RequestMock.new("http://www.example.com/weblog/show")
|
||||
@controller.url = "http://www.example.com/weblog/list"
|
||||
assert_equal "<a href=\"http://www.example.com/weblog/list\">Listing</a>",
|
||||
|
||||
Reference in New Issue
Block a user