Skip to content
master
Switch branches/tags
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README

SafetyValve
===========

Because that pressure has to go somewhere.

http://www.youtube.com/watch?v=7jF5r_AK9q4&feature=related

Errors are bound to happen. When your users encounter one, by default, they will see a generic page provided by Rails. Wouldn't it be nice if you could give them an error page that fits the look and feel of your app?

That's where comes in: it provides you with some sane defaults for rescuing from some common Rails exceptions. It also returns a HTTP status code that is appropriate

For now, it only handles exceptions would be 404 (File Not Found) errors. This includes:

 * ActiveRecord::RecordNotFound
 * ActionController::RoutingError
 * ActionController::UnknownAction
 * ActionController::UnknownController

Example
=======

Update your app/controller/application.rb to look something like:

    class ApplicationController < ActionController::Base
      include SafetyValve::Controller
      # ... rest of your code here
    end
    
Generate the error templates:

    script/generate errors
    
This creates a template at app/views/errors/404.html.erb. It can be whatever you want, but here's what it looks like by default:

    <div class="error">
      The resource you requested was not found.
    </div>
    

We can now do functional tests that make sure we get 404 errors when accessing resources that don't exist. Here's an example in shoulda:

    class EventsControllerTest < Test::Rails::ControllerTestCase
      context "trying to view an event that doesn't exist" do
        setup do
          get :show, :id => 'gibberish aieeeee'
        end

        should_respond_with :not_found # 404 works as well
      end
    end
    
The effect
==========

If you're controller does a Model.find(params[:id]), and the record doesn't exist, you'll see ActiveRecord::RecordNotFound. SafetyValve will handle rescuing this, and will see that app/views/errors/404.html.erb (or 404.html.haml) is rendered.

Gotchas
=======

A few of the exceptions will always bubble up to the top in development mode, so you won't see the effect:

 * ActionController::RoutingError

References
==========

This plugin was inspired by some of these fine posts:

 * http://coderkitty.sweetperceptions.com/2008/7/6/meaningful-404s-and-500s
 * http://henrik.nyh.se/2008/07/rails-404
 * http://ryandaigle.com/articles/2007/9/24/what-s-new-in-edge-rails-better-exception-handling

Copyright
=========

Copyright (c) 2008 Josh Nichols, released under the MIT license

About

Rails plugin to rescue common Rails exceptions, render an error with your look and feel, and return an appropriate HTTP status code

Resources

License

Releases

No releases published

Packages

No packages published

Languages