diff options
| -rw-r--r-- | actionpack/CHANGELOG | 2 | ||||
| -rw-r--r-- | actionpack/lib/action_controller/polymorphic_routes.rb | 16 | ||||
| -rw-r--r-- | actionpack/test/controller/polymorphic_routes_test.rb | 22 | 
3 files changed, 33 insertions, 7 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index b471be1df6..be490093ac 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@  *Edge* +* Allow polymorphic_url helper to take url options. #880 [Tarmo Tänav] +  * Switched integration test runner to use Rack processor instead of CGI [Josh Peek]  * Made AbstractRequest.if_modified_sense return nil if the header could not be parsed [Jamis Buck] diff --git a/actionpack/lib/action_controller/polymorphic_routes.rb b/actionpack/lib/action_controller/polymorphic_routes.rb index 7c30bf0778..30564c7bb3 100644 --- a/actionpack/lib/action_controller/polymorphic_routes.rb +++ b/actionpack/lib/action_controller/polymorphic_routes.rb @@ -102,6 +102,12 @@ module ActionController        args << format if format        named_route = build_named_route_call(record_or_hash_or_array, namespace, inflection, options) + +      url_options = options.except(:action, :routing_type, :format) +      unless url_options.empty? +        args.last.kind_of?(Hash) ? args.last.merge!(url_options) : args << url_options +      end +        send!(named_route, *args)      end @@ -114,19 +120,19 @@ module ActionController      %w(edit new formatted).each do |action|        module_eval <<-EOT, __FILE__, __LINE__ -        def #{action}_polymorphic_url(record_or_hash) -          polymorphic_url(record_or_hash, :action => "#{action}") +        def #{action}_polymorphic_url(record_or_hash, options = {}) +          polymorphic_url(record_or_hash, options.merge(:action => "#{action}"))          end -        def #{action}_polymorphic_path(record_or_hash) -          polymorphic_url(record_or_hash, :action => "#{action}", :routing_type => :path) +        def #{action}_polymorphic_path(record_or_hash, options = {}) +          polymorphic_url(record_or_hash, options.merge(:action => "#{action}", :routing_type => :path))          end        EOT      end      private        def action_prefix(options) -        options[:action] ? "#{options[:action]}_" : "" +        options[:action] ? "#{options[:action]}_" : options[:format] ? "formatted_" : ""        end        def routing_type(options) diff --git a/actionpack/test/controller/polymorphic_routes_test.rb b/actionpack/test/controller/polymorphic_routes_test.rb index 3f52526f08..6ddf2826cd 100644 --- a/actionpack/test/controller/polymorphic_routes_test.rb +++ b/actionpack/test/controller/polymorphic_routes_test.rb @@ -60,6 +60,18 @@ uses_mocha 'polymorphic URL helpers' do        edit_polymorphic_url(@article)      end +    def test_url_helper_prefixed_with_edit_with_url_options +      @article.save +      expects(:edit_article_url).with(@article, :param1 => '10') +      edit_polymorphic_url(@article, :param1 => '10') +    end + +    def test_url_helper_with_url_options +      @article.save +      expects(:article_url).with(@article, :param1 => '10') +      polymorphic_url(@article, :param1 => '10') +    end +      def test_formatted_url_helper        expects(:formatted_article_url).with(@article, :pdf)        formatted_polymorphic_url([@article, :pdf]) @@ -67,10 +79,16 @@ uses_mocha 'polymorphic URL helpers' do      def test_format_option        @article.save -      expects(:article_url).with(@article, :pdf) +      expects(:formatted_article_url).with(@article, :pdf)        polymorphic_url(@article, :format => :pdf)      end +    def test_format_option_with_url_options +      @article.save +      expects(:formatted_article_url).with(@article, :pdf, :param1 => '10') +      polymorphic_url(@article, :format => :pdf, :param1 => '10') +    end +      def test_id_and_format_option        @article.save        expects(:article_url).with(:id => @article, :format => :pdf) @@ -147,7 +165,7 @@ uses_mocha 'polymorphic URL helpers' do      def test_nesting_with_array_containing_singleton_resource_and_format_option        @tag = Tag.new        @tag.save -      expects(:article_response_tag_url).with(@article, @tag, :pdf) +      expects(:formatted_article_response_tag_url).with(@article, @tag, :pdf)        polymorphic_url([@article, :response, @tag], :format => :pdf)      end  | 
