diff options
author | José Valim <jose.valim@gmail.com> | 2009-08-06 23:48:48 +0200 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2009-08-07 17:17:51 +0200 |
commit | aed135d3e261cbee153a35fcfbeb47e2e02b12e4 (patch) | |
tree | ab3b3ff0b8cbd632f34d938bf1117b075f4813a7 /actionpack/lib/action_controller/metal/rendering_controller.rb | |
parent | 1fd65c80fcdc6080b9efa27f41dbb7f7d95a17c6 (diff) | |
download | rails-aed135d3e261cbee153a35fcfbeb47e2e02b12e4.tar.gz rails-aed135d3e261cbee153a35fcfbeb47e2e02b12e4.tar.bz2 rails-aed135d3e261cbee153a35fcfbeb47e2e02b12e4.zip |
Renamed presenter to renderer, added some documentation and defined its API.
Diffstat (limited to 'actionpack/lib/action_controller/metal/rendering_controller.rb')
-rw-r--r-- | actionpack/lib/action_controller/metal/rendering_controller.rb | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/metal/rendering_controller.rb b/actionpack/lib/action_controller/metal/rendering_controller.rb new file mode 100644 index 0000000000..c8922290f3 --- /dev/null +++ b/actionpack/lib/action_controller/metal/rendering_controller.rb @@ -0,0 +1,66 @@ +module ActionController + module RenderingController + extend ActiveSupport::Concern + + include AbstractController::RenderingController + + def process_action(*) + self.formats = request.formats.map {|x| x.to_sym} + super + end + + def render(options) + super + self.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.to_s + response_body + end + + def render_to_body(options) + _process_options(options) + + if options.key?(:partial) + options[:partial] = action_name if options[:partial] == true + options[:_details] = {:formats => formats} + end + + super + end + + private + def _prefix + controller_path + end + + def _determine_template(options) + if options.key?(:text) + 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, {}) + options[:_template] = template + elsif options.key?(:template) + options[:_template_name] = options[:template] + elsif options.key?(:file) + options[:_template_name] = options[:file] + elsif !options.key?(:partial) + options[:_template_name] = (options[:action] || action_name).to_s + options[:_prefix] = _prefix + end + + super + end + + def _render_partial(partial, options) + end + + def _process_options(options) + status, content_type, location = options.values_at(:status, :content_type, :location) + self.status = status if status + self.content_type = content_type if content_type + self.headers["Location"] = url_for(location) if location + end + end +end |