aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/new_base/renderer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_controller/new_base/renderer.rb')
-rw-r--r--actionpack/lib/action_controller/new_base/renderer.rb66
1 files changed, 37 insertions, 29 deletions
diff --git a/actionpack/lib/action_controller/new_base/renderer.rb b/actionpack/lib/action_controller/new_base/renderer.rb
index 8a9f230603..987751a601 100644
--- a/actionpack/lib/action_controller/new_base/renderer.rb
+++ b/actionpack/lib/action_controller/new_base/renderer.rb
@@ -4,17 +4,45 @@ module ActionController
depends_on AbstractController::Renderer
- def initialize(*)
- self.formats = [:html]
+ def process_action(*)
+ self.formats = request.formats.map {|x| x.to_sym}
super
end
+ def response_body=(body)
+ response.body = body if response
+ super
+ end
+
+ def render(options)
+ super
+ options[:_template] ||= _action_view._partial
+ response.content_type ||= begin
+ mime = options[:_template].mime_type
+ formats.include?(mime && mime.to_sym) || formats.include?(:all) ? mime : Mime::Type.lookup_by_extension(formats.first)
+ end
+ response_body
+ end
+
def render_to_body(options)
_process_options(options)
+ if options.key?(:partial)
+ _render_partial(options[:partial], options)
+ end
+
+ super
+ end
+
+ private
+
+ def _prefix
+ controller_path
+ end
+
+ def _determine_template(options)
if options.key?(:text)
- options[:_template] = ActionView::TextTemplate.new(_text(options))
- template = nil
+ options[:_template] = ActionView::TextTemplate.new(options[:text], formats.first)
elsif options.key?(:inline)
handler = ActionView::Template.handler_class_for_extension(options[:type] || "erb")
template = ActionView::Template.new(options[:inline], "inline #{options[:inline].inspect}", handler, {})
@@ -23,35 +51,14 @@ module ActionController
options[:_template_name] = options[:template]
elsif options.key?(:file)
options[:_template_name] = options[:file]
- elsif options.key?(:partial)
- _render_partial(options[:partial], options)
- else
+ elsif !options.key?(:partial)
options[:_template_name] = (options[:action] || action_name).to_s
options[:_prefix] = _prefix
end
- ret = super(options)
-
- options[:_template] ||= _action_view._partial
- response.content_type ||= options[:_template].mime_type
- ret
+ super
end
-
- private
-
- def _prefix
- controller_path
- end
-
- def _text(options)
- text = options[:text]
- case text
- when nil then " "
- else text.to_s
- end
- end
-
def _render_partial(partial, options)
case partial
when true
@@ -68,9 +75,10 @@ module ActionController
end
def _process_options(options)
- status, content_type = options.values_at(:status, :content_type)
- response.status = status.to_i if status
+ status, content_type, location = options.values_at(:status, :content_type, :location)
+ response.status = status if status
response.content_type = content_type if content_type
+ response.headers["Location"] = url_for(location) if location
end
end
end