respond_to .html now always renders #{action_name}.rhtml so that registered custom template handlers do not override it in priority.

Custom mime types require a block and throw proper error now.


git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4860 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Tobias Lütke
2006-08-30 00:34:36 +00:00
parent 3704088ebd
commit ff063d700d
5 changed files with 32 additions and 7 deletions

View File

@@ -1,5 +1,7 @@
*SVN*
* respond_to .html now always renders #{action_name}.rhtml so that registered custom template handlers do not override it in priority. Custom mime types require a block and throw proper error now. [Tobias Luetke]
* Deprecation: test deprecated instance vars in partials. [Jeremy Kemper]
* Add UrlWriter to allow writing urls from Mailers and scripts. [Nicholas Seckar]

View File

@@ -27,6 +27,8 @@ module ActionController #:nodoc:
end
class MissingFile < ActionControllerError #:nodoc:
end
class RenderError < ActionControllerError #:nodoc:
end
class SessionOverflowError < ActionControllerError #:nodoc:
DEFAULT_MESSAGE = 'Your session data is larger than the data column in which it is to be stored. You must increase the size of your data column if you intend to store large data.'

View File

@@ -108,11 +108,9 @@ module ActionController #:nodoc:
end
class Responder #:nodoc:
DEFAULT_BLOCKS = {
:html => 'Proc.new { render }',
:js => 'Proc.new { render :action => "#{action_name}.rjs" }',
:xml => 'Proc.new { render :action => "#{action_name}.rxml" }'
}
DEFAULT_BLOCKS = [:html, :js, :xml].inject({}) do |blocks, ext|
blocks.update ext => %(Proc.new { render :action => "\#{action_name}.r#{ext}" })
end
def initialize(block_binding)
@block_binding = block_binding
@@ -134,7 +132,11 @@ module ActionController #:nodoc:
if block_given?
@responses[mime_type] = block
else
@responses[mime_type] = eval(DEFAULT_BLOCKS[mime_type.to_sym], @block_binding)
if source = DEFAULT_BLOCKS[mime_type.to_sym]
@responses[mime_type] = eval(source, @block_binding)
else
raise ActionController::RenderError, "Expected a block but none was given for custom mime handler #{mime_type}"
end
end
end

View File

@@ -34,7 +34,7 @@ module Mime
def register(string, symbol, synonyms = [])
Mime.send :const_set, symbol.to_s.upcase, Type.new(string, symbol, synonyms)
SET << Mime.send(:const_get, symbol.to_s.upcase)
LOOKUP[string] = EXTENSION_LOOKUP[symbol.to_s] = SET.last
LOOKUP[string] = EXTENSION_LOOKUP[symbol.to_s] = SET.last
end
def parse(accept_header)

View File

@@ -72,6 +72,18 @@ class RespondToController < ActionController::Base
Mime.send :remove_const, :MOBILE
end
def custom_constant_handling_without_block
Mime::Type.register("text/x-mobile", :mobile)
respond_to do |type|
type.html { render :text => "HTML" }
type.mobile
end
Mime.send :remove_const, :MOBILE
end
def handle_any
respond_to do |type|
@@ -271,6 +283,13 @@ class MimeControllerTest < Test::Unit::TestCase
assert_equal "Mobile", @response.body
end
def custom_constant_handling_without_block
assert_raised(ActionController::RenderError) do
get :custom_constant_handling, :format => "mobile"
end
end
def test_forced_format
get :html_xml_or_rss
assert_equal "HTML", @response.body