aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller
diff options
context:
space:
mode:
authorYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>2009-05-21 15:23:52 -0700
committerYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>2009-05-21 15:23:52 -0700
commit9d3d7746702b65ddc09364c260ee4ace4b178281 (patch)
treea606692a746549ecc338e6bcb59de84722f3c2ff /actionpack/lib/action_controller
parentad1c90de3a766d12a0906c7cf3772f3bc0e1b445 (diff)
downloadrails-9d3d7746702b65ddc09364c260ee4ace4b178281.tar.gz
rails-9d3d7746702b65ddc09364c260ee4ace4b178281.tar.bz2
rails-9d3d7746702b65ddc09364c260ee4ace4b178281.zip
Update render options to remove performance implications of many render options types
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