diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2006-03-12 06:02:44 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2006-03-12 06:02:44 +0000 |
commit | 7af12d04cebe3a1ffcf55cae967d22fc7b0606c8 (patch) | |
tree | 2c3345004b15682c6344126c3bfe49c8a4f79a15 /actionpack/lib/action_controller/mime_responds.rb | |
parent | 9e2932f816b0cac68361bb5adcdad3e4c3caeb04 (diff) | |
download | rails-7af12d04cebe3a1ffcf55cae967d22fc7b0606c8.tar.gz rails-7af12d04cebe3a1ffcf55cae967d22fc7b0606c8.tar.bz2 rails-7af12d04cebe3a1ffcf55cae967d22fc7b0606c8.zip |
Added synonym and custom type handling to respond_to [DHH]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3844 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/lib/action_controller/mime_responds.rb')
-rw-r--r-- | actionpack/lib/action_controller/mime_responds.rb | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/actionpack/lib/action_controller/mime_responds.rb b/actionpack/lib/action_controller/mime_responds.rb index e8d1ba089b..44b9dd933c 100644 --- a/actionpack/lib/action_controller/mime_responds.rb +++ b/actionpack/lib/action_controller/mime_responds.rb @@ -26,22 +26,28 @@ module ActionController #:nodoc: @order = [] @responses = {} end + + def custom(mime_type, *args, &block) + mime_type = mime_type.is_a?(Mime::Type) ? mime_type : Mime::Type.lookup(mime_type.to_s) + + @order << mime_type + + if block_given? + @responses[mime_type] = block + else + if argument = args.first + eval("__mime_responder_arg__ = " + (argument.is_a?(String) ? "'" + argument + "'" : argument), @block_binding) + @responses[mime_type] = eval(DEFAULT_BLOCKS[(mime_type.to_sym.to_s + "_arg").to_sym], @block_binding) + else + @responses[mime_type] = eval(DEFAULT_BLOCKS[mime_type.to_sym], @block_binding) + end + end + end for mime_type in %w( all html js xml rss atom yaml ) eval <<-EOT def #{mime_type}(argument = nil, &block) - @order << Mime::#{mime_type.upcase} - - if block_given? - @responses[Mime::#{mime_type.upcase}] = block - else - if argument - eval("__mime_responder_arg__ = " + (argument.is_a?(String) ? "'" + argument + "'" : argument), @block_binding) - @responses[Mime::#{mime_type.upcase}] = eval(DEFAULT_BLOCKS[(Mime::#{mime_type.upcase}.to_sym.to_s + "_arg").to_sym], @block_binding) - else - @responses[Mime::#{mime_type.upcase}] = eval(DEFAULT_BLOCKS[Mime::#{mime_type.upcase}.to_sym], @block_binding) - end - end + custom(Mime::#{mime_type.upcase}, argument, &block) end EOT end @@ -52,7 +58,7 @@ module ActionController #:nodoc: @responses[@order.first].call return else - if @order.include?(priority) + if priority === @order @responses[priority].call return # mime type match found, be happy and return end |