Responds status and error handling for Rails.
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.
Rescue::Controller
(Rescue::Controller::Staticor
Rescue::Controller::Dynamic`).rescue_controller
method.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
Rescue::Controller::Static
or Rescue::Controller::Dynamic
.rescue_associate
method. And then, the exception class is defined and added to rescue_handlers
.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
Rescue::Controller::Dynamic
(NOT Rescue::Controller::Static
).Rescue::RespondError
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
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)(The MIT License)
Copyright © 2013 yulii. See LICENSE.txt for further details.