aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/lib
diff options
context:
space:
mode:
authorMaksym Pugach <pugach.m@gmail.com>2017-01-02 18:26:05 +0200
committerMaksym Pugach <pugach.m@gmail.com>2017-01-04 06:33:29 +0200
commit13352f6972b4dbc9af33b0634a26184f1c4eb2c1 (patch)
tree9ceec3b4527fad1d571bde65a0a97bc7168f5d71 /actionview/lib
parent33e60514aed85b3076f2636d5f1ccfb513aace1c (diff)
downloadrails-13352f6972b4dbc9af33b0634a26184f1c4eb2c1.tar.gz
rails-13352f6972b4dbc9af33b0634a26184f1c4eb2c1.tar.bz2
rails-13352f6972b4dbc9af33b0634a26184f1c4eb2c1.zip
Add `check_parameters` option to `current_page?`
Example: For "http://www.example.com/shop/checkout?order=desc&page=1" current_page?('http://www.example.com/shop/checkout') => true current_page?( 'http://www.example.com/shop/checkout', check_parameters: true ) => false
Diffstat (limited to 'actionview/lib')
-rw-r--r--actionview/lib/action_view/helpers/url_helper.rb9
1 files changed, 7 insertions, 2 deletions
diff --git a/actionview/lib/action_view/helpers/url_helper.rb b/actionview/lib/action_view/helpers/url_helper.rb
index 58a4a04dcb..1f753bccd6 100644
--- a/actionview/lib/action_view/helpers/url_helper.rb
+++ b/actionview/lib/action_view/helpers/url_helper.rb
@@ -517,6 +517,9 @@ module ActionView
# current_page?('http://www.example.com/shop/checkout')
# # => true
#
+ # current_page?('http://www.example.com/shop/checkout', check_parameters: true)
+ # # => false
+ #
# current_page?('/shop/checkout')
# # => true
#
@@ -530,7 +533,7 @@ module ActionView
#
# We can also pass in the symbol arguments instead of strings.
#
- def current_page?(options)
+ def current_page?(options, check_parameters: false)
unless request
raise "You cannot use helpers that need to determine the current " \
"page unless your view context provides a Request object " \
@@ -539,12 +542,14 @@ module ActionView
return false unless request.get? || request.head?
+ check_parameters ||= !options.is_a?(String) && options.try(:delete, :check_parameters)
url_string = URI.parser.unescape(url_for(options)).force_encoding(Encoding::BINARY)
# 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
- request_uri = url_string.index("?") ? request.fullpath : request.path
+ # the behaviour can be disabled with check_parameters: true
+ request_uri = url_string.index("?") || check_parameters ? request.fullpath : request.path
request_uri = URI.parser.unescape(request_uri).force_encoding(Encoding::BINARY)
url_string.chomp!("/") if url_string.start_with?("/") && url_string != "/"