0.0
No commit activity in last 3 years
No release in over 3 years
Raise and render errors in Rails using Errawr
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

>= 1.1.3
>= 1.0.1
 Project Readme

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