Skip to content

anthonator/errawr-rails

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Errawr::Rails

Raise and render errors in Rails using Errawr

Build Status Dependency Status Coverage Status Code Climate

Installation

Add this line to your application's Gemfile:

gem 'errawr-rails'

And then execute:

$ bundle

Or install it yourself as:

$ gem install errawr-rails

Usage

Getting Started

To start raising errors in Rails just include Errawr::Rails in a controller. This will provide access to the #error! method in your controller.

class SomeController < ApplicationController
  include Errawr::Rails

  def index
    if params[:dont_work] == true
      error!(:bad_request)
    end
  end
end

Rendering Error Responses

If you'd like to catch and render errors in a particular format include Errawr::Rails using the #with_renderer method.

class SomeController < ApplicationController
  include Errawr::Rails.with_renderer(Errawr::Rails::Renderers::JSON)

  def index
    if params[:dont_work] == true
      error!(:bad_request)
    end
  end
end

The above example will render the error as JSON using the following format:

{
  "error": "bad_request",
  "description": "Bad Request"
}

Depending on what renderer is used additional metadata may be added to the response output:

class SomeController < ApplicationController
  include Errawr::Rails.with_renderer(Errawr::Rails::Renderers::JSON)

  def index
    if params[:dont_work] == true
      error!(:bad_request, metadata: { extra_info: 'I like candy' })
    end
  end
end
{
  "error": "bad_request",
  "description": "Bad Request",
  "extra_info": "I like candy"
}

Currently the only renderer that ships with Errawr::Rails is Errawr::Rails::Renderers::JSON.

Custom Renderers

To create a custom renderer simple create a class with that specifies a call method that accepts a single parameter. The method can return anything that the Rails render method will accept.

class MyCustomRenderer
  def call(error)
  {
    json: {
      hello: 'world'
    }
  }
  end
end
class SomeController < ApplicationController
  include Errawr::Rails.with_renderer(MyCustomRenderer)

  def index
    if params[:dont_work] == true
      error!(:bad_request)
    end
  end
end
{
  "hello": "world"
}

HTTP Status Codes

Errawr::Rails uses the Errawr::HTTP gem to add support for 4xx and 5xx HTTP status code errors.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Credits

Sticksnleaves

Errawr::Rails is maintained and funded by Sticksnleaves

Thanks to all of our contributors

About

Raise and render errors in Rails using Errawr

Resources

License

Stars

Watchers

Forks

Packages

No packages published