Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
136 additions
and
57 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
Upgrading Grape | ||
=============== | ||
|
||
### Upgrading to 0.7.0 | ||
|
||
#### Changes in Exception Handling | ||
|
||
Assume you have the following exception classes defined. | ||
|
||
```ruby | ||
class ParentError < StandardError; end | ||
class ChildError < ParentError; end | ||
``` | ||
|
||
In Grape <= 0.6.1, the `rescue_from` keyword only handled the exact exception being raised. The following code would rescue `ParentError`, but not `ChildError`. | ||
|
||
```ruby | ||
rescue_from ParentError do |e| | ||
# only rescue ParentError | ||
end | ||
``` | ||
|
||
This made it impossible to rescue an exception hieararchy, which is a more sensible default. In Grape 0.7.0 or newer, both `ParentError` and `ChildError` are rescued. | ||
|
||
```ruby | ||
rescue_from ParentError do |e| | ||
# rescue both ParentError and ChildError | ||
end | ||
``` | ||
|
||
To only rescue the base exception class, set `rescue_subclasses: false`. | ||
|
||
```ruby | ||
rescue_from ParentError, rescue_subclasses: false do |e| | ||
# only rescue ParentError | ||
end | ||
``` | ||
|
||
See [#544](https://github.com/intridea/grape/pull/544) for more information. | ||
|
||
|
||
#### Changes in the Default HTTP Status Code | ||
|
||
In Grape <= 0.6.1, the default status code returned from `error!` was 403. | ||
|
||
```ruby | ||
error! "You may not reticulate this spline!" # yields HTTP error 403 | ||
``` | ||
|
||
This was a bad default value, since 403 means "Forbidden". Change any call to `error!` that does not specify a status code to specify one. The new default value is a more sensible default of 500, which is "Internal Server Error". | ||
|
||
```ruby | ||
error! "You may not reticulate this spline!", 403 # yields HTTP error 403 | ||
``` | ||
|
||
You may also use `default_error_status` to change the global default. | ||
|
||
```ruby | ||
default_error_status 400 | ||
``` | ||
|
||
See [#525](https://github.com/intridea/Grape/pull/525) for more information. | ||
|
||
|
||
#### Changes in Parameter Declaration and Validation | ||
|
||
In Grape <= 0.6.1, `group`, `optional` and `requires` keywords with a block accepted either an `Array` or a `Hash`. | ||
|
||
```ruby | ||
params do | ||
requires :id, type: Integer | ||
group :name do | ||
requires :first_name | ||
requires :last_name | ||
end | ||
end | ||
``` | ||
|
||
This caused the ambiguity and unexpected errors described in [#543](https://github.com/intridea/Grape/issues/543). | ||
|
||
In Grape 0.6.2, the `group`, `optional` and `requires` keywords take an additional `type` attribute which defaults to `Array`. This means that without a `type` attribute, these nested parameters will no longer accept a single hash, only an array (of hashes). | ||
|
||
Whereas in 0.6.1 the API above accepted the following json, it no longer does in 0.6.2. | ||
|
||
```json | ||
{ | ||
"id": 1, | ||
"name": { | ||
"first_name": "John", | ||
"last_name" : "Doe" | ||
} | ||
} | ||
``` | ||
|
||
The `params` block should now read as follows. | ||
|
||
```ruby | ||
params do | ||
requires :id, type: Integer | ||
requires :name, type: Hash do | ||
requires :first_name | ||
requires :last_name | ||
end | ||
end | ||
``` | ||
|
||
See [#545](https://github.com/intridea/Grape/pull/545) for more information. | ||
|
||
|
||
### Upgrading to 0.6.0 | ||
|
||
In Grape <= 0.5.0, only the first validation error was raised and processing aborted. Validation errors are now collected and a single `Grape::Exceptions::ValidationErrors` exception is raised. You can access the collection of validation errors as `.errors`. | ||
|
||
```ruby | ||
rescue_from Grape::Exceptions::Validations do |e| | ||
Rack::Response.new({ | ||
status: 422, | ||
message: e.message, | ||
errors: e.errors | ||
}.to_json, 422) | ||
end | ||
``` | ||
|
||
For more information see [#462](https://github.com/intridea/grape/issues/462). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
module Grape | ||
VERSION = '0.6.1' | ||
VERSION = '0.7.0' | ||
end |