Ultra-lightweight decorator for Rails models
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
gemfiles
lib
spec
.gitignore
.travis.yml
Appraisals
Gemfile
README.md
Rakefile
little_decorator.gemspec

README.md

Gem Version Code Climate Travis CI

LittleDecorator: Rails Model Decorator

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.