diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2019-01-16 17:28:03 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2019-01-16 17:32:12 -0800 |
commit | c740ebdaf580c8c9772a9099c7a9c11ef3105f3a (patch) | |
tree | 9ccd5ae75d37678312c8ae3af8b05d25e545de38 /actionview/lib/action_view/template/handlers | |
parent | ccfa01c36e79013881ffdb7ebe397cec733d15b2 (diff) | |
download | rails-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.rb | 10 |
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 |