From 3108764367023aabaee04d1dbcbed8eb76e61184 Mon Sep 17 00:00:00 2001 From: Nicholas Seckar Date: Tue, 6 Sep 2005 22:06:11 +0000 Subject: Fix overwrite params. Closes #1909 git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2144 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_controller/url_rewriter.rb | 4 ++++ actionpack/test/controller/url_rewriter_tests.rb | 10 ++++++++++ 3 files changed, 16 insertions(+) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 636479c3e5..ae4da0c2f3 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Fixed overwrite_params + * Added ActionController::Base.benchmark and ActionController::Base.silence to allow for easy benchmarking and turning off the log * Updated vendor copy of html-scanner to support better xml parsing diff --git a/actionpack/lib/action_controller/url_rewriter.rb b/actionpack/lib/action_controller/url_rewriter.rb index 7d66cf1ced..acad0b7b8c 100644 --- a/actionpack/lib/action_controller/url_rewriter.rb +++ b/actionpack/lib/action_controller/url_rewriter.rb @@ -36,6 +36,10 @@ module ActionController def rewrite_path(options) options = options.symbolize_keys options.update(options[:params].symbolize_keys) if options[:params] + if (overwrite = options.delete(:overwrite_params)) + options.update(@parameters) + options.update(overwrite) + end RESERVED_OPTIONS.each {|k| options.delete k} path, extra_keys = Routing::Routes.generate(options.dup, @request) # Warning: Routes will mutate and violate the options hash diff --git a/actionpack/test/controller/url_rewriter_tests.rb b/actionpack/test/controller/url_rewriter_tests.rb index 392024f03d..af26c2dcf5 100644 --- a/actionpack/test/controller/url_rewriter_tests.rb +++ b/actionpack/test/controller/url_rewriter_tests.rb @@ -23,5 +23,15 @@ class UrlRewriterTests < Test::Unit::TestCase def test_escape_spaces_build_query_string_selected_keys assert_equal '?x=hello+world', @rewriter.send(:build_query_string, {:x => 'hello world', :y => 'goodbye world'}, [:x]) end + + def test_overwrite_params + @params[:controller] = 'hi' + @params[:action] = 'bye' + @params[:id] = '2' + + assert_equal '/hi/hi/2', @rewriter.rewrite(:only_path => true, :overwrite_params => {:action => 'hi'}) + u = @rewriter.rewrite(:only_path => false, :overwrite_params => {:action => 'hi'}) + assert_match %r(/hi/hi/2$), u + end end -- cgit v1.2.3