
LittleDecorator is an ultra-lightweight decorator for Rails models. There are only 42 lines of code in lib.
Installation
Include it in your Gemfile.
gem 'little_decorator'
Usage
Create Your 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.
Decorate Your Objects
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:
In Controllers
Just call decorate:
decorate(user)
In Views
Just call decorate:
<%= decorate(user) %>
On Collections
Just call decorate. You'll get an array of decorated objects
decorate(users)
<%= decorate(users) %>
Vim Projections
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"
}
}
Contribute
Pull requests are welcome, but I want to keep this gem simple.