aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_controller')
-rw-r--r--actionpack/lib/action_controller/new_base/render_options.rb32
1 files changed, 25 insertions, 7 deletions
diff --git a/actionpack/lib/action_controller/new_base/render_options.rb b/actionpack/lib/action_controller/new_base/render_options.rb
index a9ac0e0a41..aa6593b957 100644
--- a/actionpack/lib/action_controller/new_base/render_options.rb
+++ b/actionpack/lib/action_controller/new_base/render_options.rb
@@ -7,14 +7,32 @@ module ActionController
self._renderers = []
end
- def render_to_body(options)
- _renderers.each do |renderer|
- if options.key?(renderer)
- _process_options(options)
- return send("_render_#{renderer}", options[renderer], options)
+ module ClassMethods
+ def _write_render_options
+ renderers = _renderers.map do |r|
+ <<-RUBY_EVAL
+ if options.key?(:#{r})
+ _process_options(options)
+ return _render_#{r}(options[:#{r}], options)
+ end
+ RUBY_EVAL
end
+
+ class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
+ def _handle_render_options(options)
+ #{renderers.join}
+ end
+ RUBY_EVAL
+ end
+
+ def _add_render_option(name)
+ _renderers << name
+ _write_render_options
end
- super
+ end
+
+ def render_to_body(options)
+ _handle_render_options(options) || super
end
end
@@ -26,7 +44,7 @@ module ActionController
depends_on RenderOptions
def self.register_renderer(name)
- included { _renderers << name }
+ included { _add_render_option(name) }
end
end
end