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)
|
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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue