presenter_rails

Presenter helps you expose view models to your views with a declarative approach.


Keywords
presenters, rails, views
License
MIT
Install
gem install presenter_rails -v 3.0.0

Documentation

Presenter Gem Version Build Status Test Coverage License

Presenter helps you expose view models to your views in a convenient way, while still allowing you to define methods with the same name inside your controllers.

 # app/controllers/people_controller.rb
 class PeopleController < ApplicationController

    present(:person) {
      PersonDecorator.decorate(person)
    }

    ...

    def person
      People.find(params[:id])
    end
 end
 / app/views/people/show.html.haml
 .person
   .person-name= person.name
   .person-info= person.biography

The method is also available in the controller, with a _presenter suffix:

 # app/controllers/people_controller.rb
 class PeopleController < ApplicationController

    present(:person) {
      PersonDecorator.decorate(person)
    }

    def update
      person.update(attrs)
      redirect_to person_presenter.path, notice: "Successfully updated."
    end

    ...

 end

Background

Presenter attempts to simplify the exposure of variables to the views. It doesn't really care about what you are exposing, although it's specially useful to implement two-step views while using view models in combination with resourcerer.

How it works

When you provide a block, it defines a "#{name}_presenter" private method in your controller.

After that, it creates a helper method for your views, which calls the "#{name}_presenter" counterpart in the controller.

Memoization

Each presenter method is memoized, so the method is called only once and your views get the same instance every time. The block is evaluated only if the method is called.

Corolary

Since the helper methods defined are only available for the view, you can define methods with the same name in your controller 😃

Credits

Presenter was crafted to use in combination with resourcerer.