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

Store application and other context specific helper modules in ActionView::Base#helpers

This commit is contained in:
Joshua Peek 2008-08-26 16:17:58 -05:00
parent cd91a8d3ad
commit 6ec07e0737
3 changed files with 17 additions and 21 deletions

View file

@ -1148,7 +1148,7 @@ module ActionController #:nodoc:
def initialize_template_class(response) def initialize_template_class(response)
response.template = ActionView::Base.new(self.class.view_paths, {}, self) response.template = ActionView::Base.new(self.class.view_paths, {}, self)
response.template.extend self.class.master_helper_module response.template.helpers.send :include, self.class.master_helper_module
response.redirected_to = nil response.redirected_to = nil
@performed_render = @performed_redirect = false @performed_render = @performed_redirect = false
end end

View file

@ -208,10 +208,24 @@ module ActionView #:nodoc:
ActionView::PathSet.new(Array(value)) ActionView::PathSet.new(Array(value))
end end
attr_reader :helpers
class ProxyModule < Module
def initialize(receiver)
@receiver = receiver
end
def include(*args)
super(*args)
@receiver.extend(*args)
end
end
def initialize(view_paths = [], assigns_for_first_render = {}, controller = nil)#:nodoc: def initialize(view_paths = [], assigns_for_first_render = {}, controller = nil)#:nodoc:
@assigns = assigns_for_first_render @assigns = assigns_for_first_render
@assigns_added = nil @assigns_added = nil
@controller = controller @controller = controller
@helpers = ProxyModule.new(self)
self.view_paths = view_paths self.view_paths = view_paths
end end

View file

@ -588,26 +588,8 @@ module ActionView
private private
def include_helpers_from_context def include_helpers_from_context
unless generator_methods_module = @context.instance_variable_get(:@__javascript_generator_methods__) extend @context.helpers if @context.respond_to?(:helpers)
modules = @context.extended_by - ([ActionView::Helpers] + ActionView::Helpers.included_modules) extend GeneratorMethods
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 end
# JavaScriptGenerator generates blocks of JavaScript code that allow you # JavaScriptGenerator generates blocks of JavaScript code that allow you