ara_vartanian
2008-Mar-03  23:08 UTC
A kind of monkey patch and an invitation for criticism for all you (who know this stuff better than I do)
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
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
