aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/lib/action_view/template/handlers
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2019-01-16 17:28:03 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2019-01-16 17:32:12 -0800
commitc740ebdaf580c8c9772a9099c7a9c11ef3105f3a (patch)
tree9ccd5ae75d37678312c8ae3af8b05d25e545de38 /actionview/lib/action_view/template/handlers
parentccfa01c36e79013881ffdb7ebe397cec733d15b2 (diff)
downloadrails-c740ebdaf580c8c9772a9099c7a9c11ef3105f3a.tar.gz
rails-c740ebdaf580c8c9772a9099c7a9c11ef3105f3a.tar.bz2
rails-c740ebdaf580c8c9772a9099c7a9c11ef3105f3a.zip
Always evaluate views against an ActionView::Base
Methods created by views should always be evaluated against an AV::Base instance. This way we can extract and refactor things in to classes.
Diffstat (limited to 'actionview/lib/action_view/template/handlers')
-rw-r--r--actionview/lib/action_view/template/handlers/erb/erubi.rb10
1 files changed, 6 insertions, 4 deletions
diff --git a/actionview/lib/action_view/template/handlers/erb/erubi.rb b/actionview/lib/action_view/template/handlers/erb/erubi.rb
index d379d7ec12..d0e87e6e7f 100644
--- a/actionview/lib/action_view/template/handlers/erb/erubi.rb
+++ b/actionview/lib/action_view/template/handlers/erb/erubi.rb
@@ -22,10 +22,12 @@ module ActionView
end
def evaluate(action_view_erb_handler_context)
- pr = eval("proc { #{@src} }", binding, @filename || "(erubi)")
- # Double assignment to eliminate -w warnings
- output_buffer = output_buffer = ActionView::OutputBuffer.new
- action_view_erb_handler_context.instance_eval(&pr)
+ src = @src
+ view = Class.new(ActionView::Base) {
+ include action_view_erb_handler_context._routes.url_helpers
+ class_eval("define_method(:_template) { |local_assigns, output_buffer| #{src} }", @filename || "(erubi)", 0)
+ }.new(action_view_erb_handler_context)
+ view.run(:_template, {}, ActionView::OutputBuffer.new)
end
private