diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 3b71af9af7ddb49ea4c3672239d701c422c4c25a..339b4197df5b1b45889a3790556746fd58494097 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,5 +1,7 @@ ## Rails 4.0.0 (unreleased) ## +* Allow pass couple extensions to ActionView::Template.register_template_handler call. *Tima Maslyuchenko* + * Sprockets integration has been extracted from Action Pack and the `sprockets-rails` gem should be added to Gemfile (under the assets group) in order to use Rails asset pipeline in future versions of Rails. diff --git a/actionpack/lib/action_view/template/handlers.rb b/actionpack/lib/action_view/template/handlers.rb index 52e032bbd89e20440dba735458d7043ac49e1d36..47e572967a50f8ff58f6911fab387f6daa066554 100644 --- a/actionpack/lib/action_view/template/handlers.rb +++ b/actionpack/lib/action_view/template/handlers.rb @@ -21,11 +21,14 @@ def self.extensions end # Register an object that knows how to handle template files with the given - # extension. This can be used to implement new template types. + # extensions. This can be used to implement new template types. # The handler must respond to `:call`, which will be passed the template # and should return the rendered template as a String. - def register_template_handler(extension, handler) - @@template_handlers[extension.to_sym] = handler + def register_template_handler(*extensions, handler) + raise(ArgumentError, "Extension is required") if extensions.empty? + extensions.each do |extension| + @@template_handlers[extension.to_sym] = handler + end @@template_extensions = nil end diff --git a/actionpack/test/template/render_test.rb b/actionpack/test/template/render_test.rb index 6279abaae5f3f4bdd71cde3d0476ca15bb0cf37d..16a43fa0dff5c973cad02082625f6cef1f221828 100644 --- a/actionpack/test/template/render_test.rb +++ b/actionpack/test/template/render_test.rb @@ -451,6 +451,15 @@ def test_render_layout_with_object assert_equal %(David), @view.render(:file => "test/layout_render_object") end + + def test_render_with_passing_couple_extensions_to_one_register_template_handler_function_call + ActionView::Template.register_template_handler :foo1, :foo2, CustomHandler + assert_equal @view.render(:inline => "Hello, World!", :type => :foo1), @view.render(:inline => "Hello, World!", :type => :foo2) + end + + def test_render_throws_exception_when_no_extensions_passed_to_register_template_handler_function_call + assert_raises(ArgumentError) { ActionView::Template.register_template_handler CustomHandler } + end end class CachedViewRenderTest < ActiveSupport::TestCase