1. Welcome
  2. Getting Started [+/-]
    1. Installing from RubyGems
    2. Installing from GitHub.com
    3. Installing with Sake
  3. The Basics [+/-]
    1. Hello World
      1. Application Generation Options
    2. Paths
    3. Environments
    4. Rake
  4. Configuration [+/-]
    1. Configatron
    2. Initializers
      1. Gems
      2. Mime-Types
  5. Routing [+/-]
    1. Default Routes
    2. Named Routes
    3. RESTful/Resource Routes
    4. Nested Resource Routes
    5. Regex Routes
    6. Wildcard Routes
    7. Blocks in Routes
    8. Redirecting
    9. Error Handling
    10. Deferred? Routes
    11. Misc. Routing
  6. Controllers [+/-]
    1. Actions
    2. Headers/Status
    3. Handling Content Types
    4. Filters
    5. Helpers
    6. Layouts
    7. Tell Messaging
    8. Redirecting
    9. Rendering
      1. Engines
        1. Erubis
        2. XML Builder
        3. Extending
          1. Case Study: PDF Writer
      2. Types
        1. :action
        2. :text
        3. :inline
        4. :xml
        5. :url
        6. :partial
        7. :template
        8. :public
        9. Extending
          1. Case Study: PDF Writer
  7. Views [+/-]
    1. Helpers
    2. Layouts
    3. Assets Host
    4. Assets Management
    5. Form Builders
  8. Sessions [+/-]
    1. Session Store API
  9. Request/Response [+/-]
    1. Cookies
  10. Testing [+/-]
    1. RSpec
    2. Test::Unit::TestCase
  11. Porlets [+/-]
    1. Developing
    2. Testing
    3. Packaging
    4. Using
  12. Plugins [+/-]
    1. Extending
      1. Case Study: PDF Writer
  13. Deploying [+/-]
    1. Thin
    2. Passenger (mod_rails)
    3. Joyent Accelerator
  14. Mack More [+/-]
    1. mack-active_record
    2. mack-asset_packager
    3. mack-caching
    4. mack-data_factory
    5. mack-data_mapper
    6. mack-distributed
    7. mack-encryption
    8. mack-facets
    9. mack-haml
    10. mack-javascript
    11. mack-localization
    12. mack-markaby
    13. mack-notifier
    14. mack-orm
    15. mack-pdf_writer
  15. Rails to Mack Cheat Sheet
  16. Contributing
  17. APIs [+/-]

Error Handling

When defining routes in Mack you can define a controller and an action to handle an exception, should one arise. Let's look at a couple of examples:

Mack::Routes.build do |r|
  r.handle_error HolyCrapError, :controller => :whoops, :action => :oops
  r.handle_error NoMethodError, :controller => :whoops, :action => :something_bad_happened
end

Now, if a HolyCrapError or a NoMethodError is raised the request will be forwarded on to the controller and action specified in the routes.

class WhoopsController
  include Mack::Controller
  
  def oops
    render(:text, "We're sorry, we caught the following exception: '#{request.caught_exception}' when someone tried to access: '#{request.fullpath}'", :status => 500)
  end
  
  def something_bad_happened
    render(:action, :not_found, :status => 404)
  end
  
end

As you can see this is a full controller, will all the bells and whistles of any other controller. Here we've caught the exceptions and sent them to the WhoopsController to handle them. In the specified actions we've set the status of the response and sent nice messages back to the end user.

The controller that's handling the exception has full access to all the original parameters of the 'original' request.

This guide was written for Mack version 0.8.2