For extending models (and controller methods) I use concerns:

https://github.com/schneems/wicked/tree/master/lib/wicked/controller/concerns

Then you can include them in other classes or modules in your repo.

https://github.com/schneems/wicked/blob/master/lib/wicked/wizard.rb


Then you can let your user know to add an `include` statement in the readme.

https://github.com/schneems/wicked

class AfterSignupController < ApplicationController include Wicked::Wizard 
Some people like to automatically add methods to ActiveRecord::Base or other 
similar classes, this allows them to have a dsl like `acts_as_tree` but this 
just pollutes the available methods, and makes me have to remember unneeded dsl 
when we ruby already has this type of behavior included with `include`


If you want to add methods directly to the ApplicationController of an app you 
can add a application_controller_helper.rb

https://github.com/schneems/opro/tree/master/lib/opro/controllers

You need to include it 

require 'opro/controllers/application_controller_helper'

then you can define a helper method for it:

  def self.include_helpers(scope)
    ActiveSupport.on_load(:action_controller) do
      include scope::ApplicationControllerHelper if 
defined?(scope::ApplicationControllerHelper)
    end
  end



and finally in your engine:


    initializer "opro.include_helpers" do
      Opro.include_helpers(Opro::Controllers)
    end




For extending controllers like devise i've done this:

https://github.com/schneems/opro/blob/master/lib/opro/rails/routes.rb

You use the user supplied controller or fall back to a default view. 


Digging in the devise source as well can be tremendously valuable, though 
slightly daunting the first time or two. Let me know if you have some 
questions. 



-- 
Richard Schneeman
http://heroku.com

@schneems (http://twitter.com/schneems)




On Thursday, July 12, 2012 at 2:12 PM, Weston Platter wrote:

> Is there a "Rails Way" way for extending models and controllers of rails 
> engines?
> 
> The docs have TODO notes with no content for extending controllers and models 
> (see 5.2 and 5.3 http://guides.rubyonrails.org/engines.html).
> 
> If there's preferred method, I would love to use it and I'll update the docs. 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Core" group.
> To view this discussion on the web visit 
> https://groups.google.com/d/msg/rubyonrails-core/-/q7XpeRAheHkJ.
> To post to this group, send email to [email protected] 
> (mailto:[email protected]).
> To unsubscribe from this group, send email to 
> [email protected] 
> (mailto:[email protected]).
> For more options, visit this group at 
> http://groups.google.com/group/rubyonrails-core?hl=en.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to