Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Decorators for Rails
Ruby
Branch: master
Failed to load latest commit information.
lib added test for inherited decorators
test added test for inherited decorators
.gitignore first commit
.travis.yml travis
Gemfile fixed gemspec
LICENSE added licence
README.md fixed readme
Rakefile removed Decorator class
artdeco.gemspec fixed 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)
Something went wrong with that request. Please try again.