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:
parent
cd91a8d3ad
commit
6ec07e0737
3 changed files with 17 additions and 21 deletions
|
@ -1148,7 +1148,7 @@ module ActionController #:nodoc:
|
|||
|
||||
def initialize_template_class(response)
|
||||
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
|
||||
@performed_render = @performed_redirect = false
|
||||
end
|
||||
|
|
|
@ -208,10 +208,24 @@ module ActionView #:nodoc:
|
|||
ActionView::PathSet.new(Array(value))
|
||||
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:
|
||||
@assigns = assigns_for_first_render
|
||||
@assigns_added = nil
|
||||
@controller = controller
|
||||
@helpers = ProxyModule.new(self)
|
||||
self.view_paths = view_paths
|
||||
end
|
||||
|
||||
|
|
|
@ -588,26 +588,8 @@ module ActionView
|
|||
|
||||
private
|
||||
def include_helpers_from_context
|
||||
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
|
||||
extend @context.helpers if @context.respond_to?(:helpers)
|
||||
extend GeneratorMethods
|
||||
end
|
||||
|
||||
# JavaScriptGenerator generates blocks of JavaScript code that allow you
|
||||
|
|
Loading…
Reference in a new issue