1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Cache JavaScriptGenerator's helper module set on the template

This commit is contained in:
Joshua Peek 2008-08-26 12:14:21 -05:00
parent c111522d5b
commit 229eedfda8
4 changed files with 20 additions and 16 deletions

View file

@ -328,11 +328,6 @@ module ActionView #:nodoc:
memoize :pick_template
private
def extended_by_without_helpers #:nodoc:
extended_by.reject { |mod| mod.name =~ /^ActionView::Helpers/ }
end
memoize :extended_by_without_helpers
# Evaluate the local assigns and pushes them to the view.
def evaluate_assigns
unless @assigns_added

View file

@ -588,8 +588,26 @@ module ActionView
private
def include_helpers_from_context
@context.send(:extended_by_without_helpers).each { |mod| extend mod }
extend GeneratorMethods
unless generator_methods_module = @context.instance_variable_get(:@__javascript_generator_methods__)
modules = @context.extended_by - ([ActionView::Helpers] + ActionView::Helpers.included_modules)
generator_methods_module = Module.new do
modules.each do |mod|
begin
include mod
rescue Exception => e
# HACK: Probably not a good idea to suppress these warnings
# AFAIK exceptions are only raised in while testing with mocha
# because the module does not like to be included into other
# non TestUnit classes
end
end
include GeneratorMethods
end
@context.instance_variable_set(:@__javascript_generator_methods__, generator_methods_module)
end
extend generator_methods_module
end
# JavaScriptGenerator generates blocks of JavaScript code that allow you

View file

@ -108,9 +108,4 @@ class JavaScriptHelperTest < ActionView::TestCase
def test_javascript_cdata_section
assert_dom_equal "\n//<![CDATA[\nalert('hello')\n//]]>\n", javascript_cdata_section("alert('hello')")
end
private
def extended_by_without_helpers
[]
end
end

View file

@ -53,10 +53,6 @@ class PrototypeHelperBaseTest < ActionView::TestCase
false
end
def extended_by_without_helpers
[]
end
def create_generator
block = Proc.new { |*args| yield *args if block_given? }
JavaScriptGenerator.new self, &block