Bourgeois
Bourgeois is a Ruby library that makes using presenters a very simple thing.


Installation

Add this line to your application’s Gemfile:

gem 'bourgeois'

And then execute:

$ bundle

Usage

Create an app/presenters directory and put some presenters in it:

# app/presenters/user_presenter.rb

class UserPresenter < Bourgeois::Presenter
  def formatted_name
    "#{first_name} #{last_name}".strip
  end
end

Then, you can use the present helper in your views to wrap ActiveModel (and ActiveRecord) objects around a presenter:

<% present User.first do |user| %>
  <p>This is <%= user.formatted_name %></p>
<% end %>

Methods that aren’t in the presenter (first_name and last_name) are delegated to the presented object. You can also use the view method in the presenter to get the original view it was called in:

# app/presenters/user_presenter.rb

class UserPresenter < Bourgeois::Presenter
  def birthdate
    # To get the original `birthdate` value, you can either use `super` or `object.birthdate`
    super.presence || view.(:em, 'Unknown')
  end
end

Custom block helpers

You can use the simple helper DSL to define block helpers that will be executed if certain conditions are matched.

class UserPresenter < Bourgeois::Presenter
  helper :with_profile, if: -> { profile.present? && profile.public? }
end

User.first.profile = Profile.create(public: true, title: 'Foo', description: 'Bar')
<% present User.first do |user| %>
  <h1><%= user.full_name %></h1>
  <% user.with_profile do %>
    <div class="profile">
      <h2><%= user.profile.title %></h2>
      <%= simple_format(user.profile.description) %>
    </div>
  <% end %>
<% end %>

Inspiration

Bourgeois was inspired by some code @rafBM wrote for his OpenCode talk on May 28th, 2013.

License

Bourgeois is © 2013-2014 Mirego and may be freely distributed under the New BSD license. See the LICENSE.md file.

About Mirego

Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We're a team of talented people who imagine and build beautiful Web and mobile applications. We come together to share ideas and change the world.

We also love open-source software and we try to give back to the community as much as we can.