How to extend an 'unloadable' Rails plugin?

Posted by Vitaly Kushner on Stack Overflow See other posts from Stack Overflow or by Vitaly Kushner
Published on 2010-03-07T20:03:11Z Indexed on 2010/03/08 0:30 UTC
Read the original article Hit count: 575

I'm trying to write a plugin that will extend InheritedResources.

Specifically I want to rewrite some default helpers.

And I'd like it to "just work" once installed, w/o any changes to application code.

The functionality is provided in a module which needs to be included in a right place. The question is where? :)

The first attempt was to do it in my plugin's init.rb:

InheritedResources::Base.send :include, MyModule

It works in production, but fails miserably in development since InheritedResource::Base declared as unloadable and so its code is reloaded on each request. So my module is there for the first request, and then its gone.

InheritedResource::Base is 'pulled' in again by any controller that uses it:

Class SomeController < InheritedResource::Base

But no code is 'pulling in' my extension module since it is not referenced anywhere except init.rb which is not re-loaded on each request

So right now I'm just including the module manually in every controller that needs it which sucks. I can't even include it once in ApplicationController because InheritedResources inherites from it and so it will override any changes back.

© Stack Overflow or respective owner

Related posts about ruby-on-rails

Related posts about rails