# Boring
## Because your presentation layer shouldn't be interesting
[![Gem Version](https://badge.fury.io/rb/boring_presenters.svg)](https://badge.fury.io/rb/boring_presenters) [![Build Status](https://travis-ci.org/apsislabs/boring.svg?branch=master)](https://travis-ci.org/apsislabs/boring) [![Inline docs](http://inch-ci.org/github/apsislabs/boring.svg?branch=master)](http://inch-ci.org/github/apsislabs/boring)
**Note:** while we're actively using `boring` in production, it is still actively under development, and you should expect breaking changes.
## Usage
Below is an example of usage for a classic Rails controller/view pattern.
```ruby
# presenters/user_presenter.rb
class UserPresenter < Boring::Presenter
# Declare the arguments needed to bind to presenter and their type
arguments user: User
# Declare pass-through methods
delegate :birth_date, to: :user
# Methods to be handled by the presenter
def name
"#{user.first_name} #{user.last_name}".strip
end
end
# controllers/users_controller.rb
class UsersController < ApplicationController
def index
@users = User.all
@user_presenter = UsersPresenter.new
end
end
```
```erb
# views/users/index.html.erb
```
Some things worth noting that set `boring` apart from other presentation layers:
1. **Explicit Delegation**: only methods intended for presentation layer should be allowed in the presenter. `boring` will never pass `super_dangerous_method!` through to your bound object unless you _want_ it to.
2. **Type-Safe Bindings**: the `arguments` method in the `Boring::Presenter` class lets you set up type checking for the arguments passed to the `bind` method. If you try to bind a `Foo` to your `BarPresenter`, we'll raise an exception.
3. **Separate Objects**: The presenter doesn't take over for your bound object; whether that bound object is available to your view is up to you, but you should never be unsure if you're dealing with a `Foo` or a `FooPresenter`.
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/wkirby/boring.
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).