mirror of
https://github.com/github/rails.git
synced 2026-01-29 16:28:09 -05:00
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:
@@ -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]
|
||||
|
||||
@@ -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.'
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user