Bourgeois is a Ruby library that makes using presenters a very simple thing.
---
## Installation
Add this line to your application’s Gemfile:
```ruby
gem 'bourgeois'
```
And then execute:
```bash
$ bundle
```
## Usage
Create an `app/presenters` directory and put some presenters in it:
```ruby
# 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:
```erb
<% present User.first do |user| %>
This is <%= user.formatted_name %>
<% 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:
```ruby
# 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.content_tag(: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.
```ruby
class UserPresenter < Bourgeois::Presenter
helper :with_profile, if: -> { profile.present? && profile.public? }
end
User.first.new = Profile.create(public: true, title: 'Foo', description: 'Bar')
```
```erb
<% present User.first do |user| %>
<%= user.full_name %>
<% user.with_profile do %>
<%= user.profile.title %>
<%= simple_format(user.profile.description) %>
<% end %>
<% end %>
```
## Inspiration
Bourgeois was inspired by some code [@rafBM](https://twitter.com/rafBM) wrote for [his OpenCode talk](https://github.com/rafBM/opencode12-rails) on May 28th, 2013.
## License
`Bourgeois` is © 2013 [Mirego](http://www.mirego.com) and may be freely distributed under the [New BSD license](http://opensource.org/licenses/BSD-3-Clause). See the [`LICENSE.md`](https://github.com/mirego/bourgeois/blob/master/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 proudly build mobile applications for [iPhone](http://mirego.com/en/iphone-app-development/ "iPhone application development"), [iPad](http://mirego.com/en/ipad-app-development/ "iPad application development"), [Android](http://mirego.com/en/android-app-development/ "Android application development"), [Blackberry](http://mirego.com/en/blackberry-app-development/ "Blackberry application development"), [Windows Phone](http://mirego.com/en/windows-phone-app-development/ "Windows Phone application development") and [Windows 8](http://mirego.com/en/windows-8-app-development/ "Windows 8 application development") in beautiful Quebec City.
We also love [open-source software](http://open.mirego.com/) and we try to extract as much code as possible from our projects to give back to the community.