One of the good things about using a Rails engine is that you can pretty easily enhance a class of the engine directly in your application.
As an example, we are going to tweak the LocomotiveCMS Page model in order to manage the cache of a page.
We assume you're using Textmate. That is why you will see mate to edit a file. If not, please correct it accordingly.
1. Initialize the custom Page model
cd <your application path> mkdir app/models/locomotive mate app/models/locomotive/page.rb
Fill in the blank file with the following code:
module Locomotive class Page end end
In other words, we just re-open in Ruby an existing class from the engine.
Keep in mind that the engine models are loaded BEFORE those from the application.
2. Implement a new behavior
Let's say we want to manage the cache of a Page.
mkdir -p app/concerns/locomotive/page mate app/concerns/locomotive/page/cache.rb
We use the Concern module from ActiveSupport to implement the new behavior.
module Locomotive::Page::Cache extend ActiveSupport::Concern included do ## callbacks ## after_update :reset_cache after_destroy :reset_cache end def reset_cache logger.info "Reset cache for " + page.title # TODO: really reset cache :-) end end
3. Add the new behavior to our custom Page
Open your page class:
Finally, include the Cache module we have just created:
module Locomotive class Page ## injections ## include Locomotive::Page::Cache end end
You can add as many modules as you want.
The same mechanism can be applied to the LocomotiveCMS controllers.