diff options
Diffstat (limited to 'actionpack/lib/action_controller/abstract/helpers.rb')
-rw-r--r-- | actionpack/lib/action_controller/abstract/helpers.rb | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/abstract/helpers.rb b/actionpack/lib/action_controller/abstract/helpers.rb new file mode 100644 index 0000000000..1f0b38417b --- /dev/null +++ b/actionpack/lib/action_controller/abstract/helpers.rb @@ -0,0 +1,59 @@ +module AbstractController + module Helpers + depends_on Renderer + + setup do + extlib_inheritable_accessor :master_helper_module + self.master_helper_module = Module.new + end + + # def self.included(klass) + # klass.class_eval do + # extlib_inheritable_accessor :master_helper_module + # self.master_helper_module = Module.new + # end + # end + + def _action_view + @_action_view ||= begin + av = super + av.helpers.send(:include, master_helper_module) + av + end + end + + module ClassMethods + def inherited(klass) + klass.master_helper_module = Module.new + klass.master_helper_module.__send__ :include, master_helper_module + + super + end + + def add_template_helper(mod) + master_helper_module.module_eval { include mod } + end + + def helper_method(*meths) + meths.flatten.each do |meth| + master_helper_module.class_eval <<-ruby_eval, __FILE__, __LINE__ + 1 + def #{meth}(*args, &blk) + controller.send(%(#{meth}), *args, &blk) + end + ruby_eval + end + end + + def helper(*args, &blk) + args.flatten.each do |arg| + case arg + when Module + add_template_helper(arg) + end + end + master_helper_module.module_eval(&blk) if block_given? + end + end + + end +end
\ No newline at end of file |