Decorators for Rails
Ruby
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test
.gitignore
.travis.yml
Gemfile
LICENSE
README.md
Rakefile
artdeco.gemspec

README.md

Artdeco

Build History

Decorators for Rails

  • extend an object with given classes (default is <object.class>Decorator, if defined)
  • make helpers accessible in object via :h

Example

Decorate a model in your controller:

def show
  article = Article.find(params[:id])
  @article = Artdeco.decorate(article, self)
end

def index
  articles = Article.all
  @articles = Artdeco.decorate(articles, self)
end

Then @article will be extended by module ArticleDecorator and has access to your helpers via :h

module ArticleDecorator
  def image
    h.image_tag('article')
  end
end

and your views may use the decorated model:

# app/views/articles/show.html.haml
%h1 
  Article
  = @article.image

Modules for decoration may be given explicitly:

Artdeco.decorate(user, self, decorator: Customer)

# or

Artdeco.decorate(user, self, decorators: [ Customer, Admin ] )

Also works for enumerations (anything which responds to :map):

@articles = Article.all
Artdeco.decorate(@articles, self)

For conveniance decorated objects may decorate other objects:

Artdeco.decorate(order, self)
order.decorate(shopping_card)