diff options
author | Joshua Peek <josh@joshpeek.com> | 2008-08-26 12:14:21 -0500 |
---|---|---|
committer | Joshua Peek <josh@joshpeek.com> | 2008-08-26 12:17:55 -0500 |
commit | 229eedfda87a7706dbb5e3e51af8707b3adae375 (patch) | |
tree | 1a782151632dd80c8a18c3960536bdf8643debe3 | |
parent | c111522d5b8cd108756240a0348d515d6acee46c (diff) | |
download | rails-229eedfda87a7706dbb5e3e51af8707b3adae375.tar.gz rails-229eedfda87a7706dbb5e3e51af8707b3adae375.tar.bz2 rails-229eedfda87a7706dbb5e3e51af8707b3adae375.zip |
Cache JavaScriptGenerator's helper module set on the template
-rw-r--r-- | actionpack/lib/action_view/base.rb | 5 | ||||
-rw-r--r-- | actionpack/lib/action_view/helpers/prototype_helper.rb | 22 | ||||
-rw-r--r-- | actionpack/test/template/javascript_helper_test.rb | 5 | ||||
-rw-r--r-- | actionpack/test/template/prototype_helper_test.rb | 4 |
4 files changed, 20 insertions, 16 deletions
diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb index e1f35b8105..d174c784f3 100644 --- a/actionpack/lib/action_view/base.rb +++ b/actionpack/lib/action_view/base.rb @@ -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 diff --git a/actionpack/lib/action_view/helpers/prototype_helper.rb b/actionpack/lib/action_view/helpers/prototype_helper.rb index 09dbb67c0a..ff83494e94 100644 --- a/actionpack/lib/action_view/helpers/prototype_helper.rb +++ b/actionpack/lib/action_view/helpers/prototype_helper.rb @@ -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 diff --git a/actionpack/test/template/javascript_helper_test.rb b/actionpack/test/template/javascript_helper_test.rb index 2e9cdd3fea..d41111127b 100644 --- a/actionpack/test/template/javascript_helper_test.rb +++ b/actionpack/test/template/javascript_helper_test.rb @@ -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 diff --git a/actionpack/test/template/prototype_helper_test.rb b/actionpack/test/template/prototype_helper_test.rb index 5397ae3688..abc9f930dd 100644 --- a/actionpack/test/template/prototype_helper_test.rb +++ b/actionpack/test/template/prototype_helper_test.rb @@ -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 |