Ultra-lightweight decorator for Rails models
LittleDecorator is an ultra-lightweight decorator for Rails models. There are only 42 lines of code in lib.
Include it in your Gemfile.
gem 'little_decorator'
Add your decorator in app/decorators
:
# app/decorators/user_decorator.rb
class UserDecorator < LittleDecorator
def full_name
"#{first_name} #{last_name}"
end
def updated_at
record.updated_at.strftime("%A, %B %e, %Y")
end
end
Method calls are sent to the model via method_missing
, so you can call model methods directly as in the full_name
method defined above.
Call model methods with record
when you want to override a method but still get to the original model.
You can access helper methods and route helpers in your decorators.
The API consists of a single method: decorate
. This method will be available in your controllers and views. You can call decorate
on an object or a collection. Examples:
Just call decorate
:
decorate(user)
Just call decorate
:
<%= decorate(user) %>
Just call decorate
. You’ll get an array of decorated objects
decorate(users)
<%= decorate(users) %>
For use with Rails.vim. Place in config/projections.json
.
{
"app/decorators/*_decorator.rb": {
"command": "decorator",
"alternate": "spec/decorators/%s_decorator_spec.rb",
"template": "class %SDecorator < LittleDecorator\nend"
}
}
Pull requests are welcome, but I want to keep this gem simple.