rails_engine_decorators icon indicating copy to clipboard operation
rails_engine_decorators copied to clipboard

Extend Rails Engine’s business logic (models, controllers, helpers, etc.) easily from your application or other engine.

trafficstars

= Rails Engine Decorators

Extend Rails Engine's business logic (models, controllers, helpers, etc.) easily from your application or other engine.

This solution was first implemented in the Forem engine, see https://github.com/radar/forem/pull/260

== Authors

  • Kunal Chaudhari, https://github.com/kunalchaudhari
  • Ryan Bigg, https://github.com/radar
  • Philip Arndt, https://github.com/parndt
  • Antonio Tapiador, https://github.com/atd

== Usage

(From Forem's patch):

Standard practice for including such changes in your application or extension is to create a file within the relevant app/models or app/controllers directory with the original class name with _decorator appended.

Adding a custom method to the Post model:

# app/decorators/models/forem/post_decorator.rb

Forem::Post.class_eval do
  def some_method
    ...
  end
end

Adding a custom method to the PostsController:

# app/decorators/controllers/forem/posts_controller_decorator.rb

Forem::PostsController.class_eval do
  def some_action
    ...
  end
end

The exact same format can be used to redefine an existing method.