The Rescue-Dog responds HTTP status (the code and message) when raises the exception for Rails.
Add "rescue-dog" gem to your Gemfile
gem 'rescue-dog'
And run bundle install
command.
- Include
Rescue::Controller
(Rescue::Controller::Staticor
Rescue::Controller::Dynamic`). - Call
rescue_controller
method. - Declare
xxx_params
method. (cf. Rails 4 / Strong Parameters)
class UsersController < ApplicationController
rescue_controller User, :new, :edit, :show,
create: { render: lambda { redirect_to edit_user_path(@user) } ,rescue: lambda { render :new } },
update: { render: lambda { redirect_to edit_user_path(@user) } ,rescue: lambda { render :edit } },
destroy: { render: lambda { redirect_to root_path } ,rescue: lambda { render :edit } }
...
private
def create_params
params.require(:user).permit(
:name, :email, :password
)
end
def update_params
params.require(:user).permit(
:email, :password
)
end
# Destroyed condition variable object
def destroy_params
{ id: params[:id] }
end
end
class UsersController < ApplicationController
rescue_controller User, :new, :edit, :show
def create
rescue_respond(:customized_create_call, create_params,
render: lambda { redirect_to edit_user_path(@user) },
rescue: lambda { render :new } }
)
end
private
def create_params
params.require(:user).permit(
:name, :email, :password
)
end
def customized_create_call params
if User.exists?(params)
raise UserDuplicationError, "your email is duplicated!"
else
@user = User.new(params)
@user.save!
end
end
end
- Include
Rescue::Controller::Static
orRescue::Controller::Dynamic
. - Call
rescue_associate
method. And then, the exception class is defined and added torescue_handlers
. - Raise the exception or Call
response_status
method.
Render /public/400(.:format) if you raise BadRequest exception.
class ApplicationController
include Rescue::Controller::Static
rescue_associate :BadRequest ,with: 400
rescue_associate :Unauthorized ,with: 401
rescue_associate :NotFound ,with: 404
rescue_associate :ServerError ,with: 500
Render app/views/errors/404(.:format) if you raise NotFound exception.
class ApplicationController
include Rescue::Controller::Dynamic
rescue_associate :BadRequest ,with: 400
rescue_associate :Unauthorized ,with: 401
rescue_associate :NotFound ,with: 404
rescue_associate :ServerError ,with: 500
Call the response method when raise an exception.
rescue_associate ActiveRecord::RecordNotFound ,with: 404
rescue_associate Mongoid::Errors::DocumentNotFound, BSON::InvalidObjectId, with: 404
Learn more usage, check spec
- Include
Rescue::Controller::Dynamic
(NOTRescue::Controller::Static
). - Include
Rescue::RespondError
- Raise the exception (cf.
Rescue::ApplicationError::STATUS_CODES
)
class ApplicationController
include Rescue::Controller::Dynamic
include Rescue::RespondError
All responses will be returned with a 200 OK status code, even if the error occurs.
Rescue.configure do |config|
config.suppress_response_codes = true
end
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
(The MIT License)
Copyright © 2013 yulii. See LICENSE.txt for further details.