Added the option of passing false to :module or :controller_prefix in order to "break out" of a module or prefix
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@142 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
0cce17f811
commit
922f817a5a
|
@ -271,10 +271,11 @@ module ActionController #:nodoc:
|
||||||
# .---> controller .--> action
|
# .---> controller .--> action
|
||||||
# /library/books/ISBN/0743536703/show
|
# /library/books/ISBN/0743536703/show
|
||||||
# '------> '--------------> action_prefix
|
# '------> '--------------> action_prefix
|
||||||
# controller_prefix
|
# controller_prefix (or module)
|
||||||
#
|
#
|
||||||
# * <tt>:controller_prefix</tt> - specifies the string before the controller name, which would be "/library" for the example.
|
# * <tt>:controller_prefix</tt> - specifies the string before the controller name, which would be "/library" for the example.
|
||||||
# Called with "/shop" gives "/shop/books/ISBN/0743536703/show".
|
# Called with "/shop" gives "/shop/books/ISBN/0743536703/show".
|
||||||
|
# * <tt>:module</tt> - serves as a alias to :controller_prefix (overwrites :controller_prefix unless its nil)
|
||||||
# * <tt>:controller</tt> - specifies a new controller and clears out everything after the controller name (including the action,
|
# * <tt>:controller</tt> - specifies a new controller and clears out everything after the controller name (including the action,
|
||||||
# the pre- and suffix, and all params), so called with "settings" gives "/library/settings/".
|
# the pre- and suffix, and all params), so called with "settings" gives "/library/settings/".
|
||||||
# * <tt>:action_prefix</tt> - specifies the string between the controller name and the action name, which would
|
# * <tt>:action_prefix</tt> - specifies the string between the controller name and the action name, which would
|
||||||
|
@ -297,6 +298,7 @@ module ActionController #:nodoc:
|
||||||
# Naturally, you can combine multiple options in a single redirect. Examples:
|
# Naturally, you can combine multiple options in a single redirect. Examples:
|
||||||
#
|
#
|
||||||
# redirect_to(:controller_prefix => "/shop", :controller => "settings")
|
# redirect_to(:controller_prefix => "/shop", :controller => "settings")
|
||||||
|
# redirect_to(:controller_prefix => false, :controller => "settings") # breaks out of the current controller_prefix
|
||||||
# redirect_to(:action => "edit", :id => 3425)
|
# redirect_to(:action => "edit", :id => 3425)
|
||||||
# redirect_to(:action => "edit", :path_params => { "type" => "XTC" }, :params => { "temp" => 1})
|
# redirect_to(:action => "edit", :path_params => { "type" => "XTC" }, :params => { "temp" => 1})
|
||||||
# redirect_to(:action => "publish", :action_prefix => "/published", :anchor => "x14")
|
# redirect_to(:action => "publish", :action_prefix => "/published", :anchor => "x14")
|
||||||
|
|
|
@ -12,7 +12,7 @@ module ActionController
|
||||||
validate_options(VALID_OPTIONS, options.keys)
|
validate_options(VALID_OPTIONS, options.keys)
|
||||||
|
|
||||||
rewrite_url(
|
rewrite_url(
|
||||||
rewrite_path(@rewritten_path, options),
|
rewrite_path(@rewritten_path, resolve_aliases(options)),
|
||||||
options
|
options
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
@ -31,6 +31,11 @@ module ActionController
|
||||||
raise(ActionController::ActionControllerError, "Unknown options: #{unknown_option_keys}") unless unknown_option_keys.empty?
|
raise(ActionController::ActionControllerError, "Unknown options: #{unknown_option_keys}") unless unknown_option_keys.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def resolve_aliases(options)
|
||||||
|
options[:controller_prefix] = options[:module] unless options[:module].nil?
|
||||||
|
options
|
||||||
|
end
|
||||||
|
|
||||||
def rewrite_url(path, options)
|
def rewrite_url(path, options)
|
||||||
rewritten_url = ""
|
rewritten_url = ""
|
||||||
rewritten_url << @request.protocol unless options[:only_path]
|
rewritten_url << @request.protocol unless options[:only_path]
|
||||||
|
@ -122,9 +127,14 @@ module ActionController
|
||||||
end
|
end
|
||||||
|
|
||||||
def controller_name(options, controller_prefix)
|
def controller_name(options, controller_prefix)
|
||||||
options[:controller_prefix] = "#{options[:module]}/#{options[:controller_prefix]}" if options[:module]
|
|
||||||
ensure_slash_suffix(options, :controller_prefix)
|
ensure_slash_suffix(options, :controller_prefix)
|
||||||
controller_name = options[:controller_prefix] || controller_prefix || ""
|
|
||||||
|
controller_name = case options[:controller_prefix]
|
||||||
|
when String: options[:controller_prefix]
|
||||||
|
when false : ""
|
||||||
|
when nil : controller_prefix || ""
|
||||||
|
end
|
||||||
|
|
||||||
controller_name << (options[:controller] + "/") if options[:controller]
|
controller_name << (options[:controller] + "/") if options[:controller]
|
||||||
return controller_name
|
return controller_name
|
||||||
end
|
end
|
||||||
|
|
|
@ -22,6 +22,14 @@ class UrlTest < Test::Unit::TestCase
|
||||||
{ "type" => "ISBN", "code" => "0743536703" }
|
{ "type" => "ISBN", "code" => "0743536703" }
|
||||||
), "books", "show")
|
), "books", "show")
|
||||||
|
|
||||||
|
@library_url_using_module = ActionController::UrlRewriter.new(MockRequest.new(
|
||||||
|
"http://",
|
||||||
|
"www.singlefile.com",
|
||||||
|
80,
|
||||||
|
"/library/books/ISBN/0743536703/show",
|
||||||
|
{ "type" => "ISBN", "code" => "0743536703", "module" => "library" }
|
||||||
|
), "books", "show")
|
||||||
|
|
||||||
@library_url_on_index = ActionController::UrlRewriter.new(MockRequest.new(
|
@library_url_on_index = ActionController::UrlRewriter.new(MockRequest.new(
|
||||||
"http://",
|
"http://",
|
||||||
"www.singlefile.com",
|
"www.singlefile.com",
|
||||||
|
@ -103,6 +111,10 @@ class UrlTest < Test::Unit::TestCase
|
||||||
assert_equal "http://www.singlefile.com/shop/purchases/", @library_url.rewrite(:module => "shop", :controller => "purchases")
|
assert_equal "http://www.singlefile.com/shop/purchases/", @library_url.rewrite(:module => "shop", :controller => "purchases")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_getting_out_of_a_module
|
||||||
|
assert_equal "http://www.singlefile.com/purchases/", @library_url_using_module.rewrite(:module => false, :controller => "purchases")
|
||||||
|
end
|
||||||
|
|
||||||
def test_controller_and_action
|
def test_controller_and_action
|
||||||
assert_equal "http://www.singlefile.com/library/settings/show", @library_url.rewrite(:controller => "settings", :action => "show")
|
assert_equal "http://www.singlefile.com/library/settings/show", @library_url.rewrite(:controller => "settings", :action => "show")
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue