A kind of monkey patch and an invitation for criticism for all you (who know this stuff better than

I’ve often felt the need including Rails’ view helpers within my
controllers, if only for some simple things like formatting my flash
notices with text helpers or html escaping. I loved this suggestion,
which helps by not cluttering the namespace of controllers:

http://snippets.dzone.com/posts/show/1799

But I wanted to generalize this a little to automatically include
whatever helper modules are included in the views. So I dreamt up 35
lines of goodness:

class Object
def metaclass; class << self; self; end; end
end

module ActionController
class Base
class_inheritable_accessor :controller_helper_module
class_inheritable_accessor :controller_helper_object
self.controller_helper_module = Module.new
self.controller_helper_object = Object.new

class << self
  def add_template_helper_with_controller_helper(helper_module)
    self.controller_helper_module.send(:include, helper_module)
    recreate_controller_helper_object
    add_template_helper_without_controller_helper(helper_module)
  end
  alias_method_chain :add_template_helper, :controller_helper

  def inherited_with_controller_helper(child)
    inherited_without_controller_helper(child)
    child.controller_helper_module.send :include,

controller_helper_module
child.recreate_controller_helper_object
end
alias_method_chain :inherited, :controller_helper

  def recreate_controller_helper_object
    self.controller_helper_object = Object.new
    self.controller_helper_object.metaclass.send(:include,

controller_helper_module)
end
end

protected

def help
  self.class.controller_helper_object
end

end
end

===

I understand some people will balk at the idea of including these
helpers in controllers, and I understand their reasons. I guess I’m
just looking for criticism of the code, given that some people do want
to do this kind of thing.

It seems to work just fine in Rails 2.0, but I wonder if there are any
performance problems or if there is something technically incorrect
that jumps out at people.

– Ara