grape-active_model_serializers 1.5.1 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +37 -9
- data/.travis.yml +13 -12
- data/CHANGELOG.md +2 -2
- data/Gemfile +1 -1
- data/README.md +6 -0
- data/RELEASING.md +70 -0
- data/lib/grape-active_model_serializers.rb +1 -0
- data/lib/grape-active_model_serializers/error_formatter.rb +53 -0
- data/lib/grape-active_model_serializers/version.rb +1 -1
- data/spec/grape-active_model_serializers/error_formatter_spec.rb +92 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d1b47b4d3f44dde1cb0c35ce95cb37564f4a136
|
4
|
+
data.tar.gz: 958969c14502aba0f2c60b243a9d748627825639
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b97e9cd92e4b755ac4a724cedbbffc520de4b8a23466589621e8c697ff076eaea3f8f2a1a3d2468246a157c9aacf235476705bfd623cebffc4ad7e2ee7c0f85
|
7
|
+
data.tar.gz: e76168614c025652c0766f42b11a474ea23794774f27f441df99de1a9efbf009af15f263d81afeefaa6d17a65f578cfa47494c5f7f58461d682c00bbaa1321e2
|
data/.rubocop_todo.yml
CHANGED
@@ -1,20 +1,48 @@
|
|
1
|
-
# This configuration was generated by
|
2
|
-
#
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2017-10-09 10:22:52 -0500 using RuboCop version 0.41.2.
|
3
4
|
# The point is for the user to remove these configuration records
|
4
5
|
# one by one as the offenses are removed from the code base.
|
5
6
|
# Note that changes in the inspected code, or installation of new
|
6
7
|
# versions of RuboCop, may require this file to be generated again.
|
7
8
|
|
8
|
-
# Offense count:
|
9
|
-
# Configuration parameters: AllowURI, URISchemes.
|
9
|
+
# Offense count: 1
|
10
10
|
Metrics/AbcSize:
|
11
|
-
Max:
|
11
|
+
Max: 18
|
12
12
|
|
13
|
-
# Offense count:
|
13
|
+
# Offense count: 1
|
14
|
+
Metrics/CyclomaticComplexity:
|
15
|
+
Max: 9
|
16
|
+
|
17
|
+
# Offense count: 1
|
18
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
|
19
|
+
# URISchemes: http, https
|
20
|
+
Metrics/LineLength:
|
21
|
+
Max: 87
|
22
|
+
|
23
|
+
# Offense count: 1
|
24
|
+
# Configuration parameters: CountComments.
|
25
|
+
Metrics/MethodLength:
|
26
|
+
Max: 18
|
27
|
+
|
28
|
+
# Offense count: 1
|
29
|
+
Metrics/PerceivedComplexity:
|
30
|
+
Max: 11
|
31
|
+
|
32
|
+
# Offense count: 5
|
14
33
|
Style/Documentation:
|
15
|
-
|
34
|
+
Exclude:
|
35
|
+
- 'spec/**/*'
|
36
|
+
- 'test/**/*'
|
37
|
+
- 'lib/grape-active_model_serializers/endpoint_extension.rb'
|
38
|
+
- 'lib/grape-active_model_serializers/error_formatter.rb'
|
39
|
+
- 'lib/grape-active_model_serializers/formatter.rb'
|
40
|
+
- 'lib/grape-active_model_serializers/options_builder.rb'
|
41
|
+
- 'lib/grape-active_model_serializers/serializer_resolver.rb'
|
16
42
|
|
17
43
|
# Offense count: 2
|
18
|
-
# Configuration parameters:
|
44
|
+
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts.
|
19
45
|
Style/FileName:
|
20
|
-
|
46
|
+
Exclude:
|
47
|
+
- 'lib/grape-active_model_serializers.rb'
|
48
|
+
- 'spec/grape-active_model_serializers_spec.rb'
|
data/.travis.yml
CHANGED
@@ -4,29 +4,30 @@ sudo: false
|
|
4
4
|
|
5
5
|
matrix:
|
6
6
|
include:
|
7
|
-
- rvm: 2.
|
7
|
+
- rvm: 2.5.0
|
8
8
|
script:
|
9
9
|
- bundle exec danger
|
10
|
-
- rvm: 2.
|
10
|
+
- rvm: 2.5.0
|
11
11
|
env: GRAPE_VERSION=0.8.0
|
12
|
-
- rvm: 2.
|
12
|
+
- rvm: 2.5.0
|
13
13
|
env: GRAPE_VERSION=0.9.0
|
14
|
-
- rvm: 2.
|
14
|
+
- rvm: 2.5.0
|
15
15
|
env: GRAPE_VERSION=0.10.1
|
16
|
-
- rvm: 2.
|
16
|
+
- rvm: 2.5.0
|
17
17
|
env: GRAPE_VERSION=0.12.0
|
18
|
-
- rvm: 2.
|
18
|
+
- rvm: 2.5.0
|
19
19
|
env: GRAPE_VERSION=0.13.0
|
20
|
-
- rvm: 2.
|
20
|
+
- rvm: 2.5.0
|
21
21
|
env: GRAPE_VERSION=0.14.0
|
22
|
-
- rvm: 2.
|
22
|
+
- rvm: 2.5.0
|
23
23
|
env: GRAPE_VERSION=0.15.0
|
24
|
-
- rvm: 2.
|
24
|
+
- rvm: 2.5.0
|
25
25
|
env: GRAPE_VERSION=0.16.2
|
26
|
-
- rvm: 2.
|
26
|
+
- rvm: 2.5.0
|
27
27
|
env: GRAPE_VERSION=HEAD
|
28
|
-
- rvm: 2.3
|
29
|
-
- rvm: 2.
|
28
|
+
- rvm: 2.4.3
|
29
|
+
- rvm: 2.3.6
|
30
|
+
- rvm: 2.2.9
|
30
31
|
- rvm: rbx-2
|
31
32
|
- rvm: jruby-19mode
|
32
33
|
- rvm: ruby-head
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
## Changelog
|
2
2
|
|
3
|
-
### 1.5.2 (
|
3
|
+
### 1.5.2 (March 14, 2018)
|
4
4
|
|
5
|
-
*
|
5
|
+
* [#76](https://github.com/ruby-grape/grape-active_model_serializers/pull/76): Add custom error formatter - [@xn](https://github.com/xn).
|
6
6
|
|
7
7
|
### 1.5.1 (April 25, 2017)
|
8
8
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -36,6 +36,12 @@ require 'grape-active_model_serializers'
|
|
36
36
|
class API < Grape::API
|
37
37
|
format :json
|
38
38
|
formatter :json, Grape::Formatter::ActiveModelSerializers
|
39
|
+
|
40
|
+
# Serializes errors with ActiveModel::Serializer::ErrorSerializer if an ActiveModel.
|
41
|
+
# Serializer conforms to the adapter, ex: json, jsonapi.
|
42
|
+
# So an error formatted with a jsonapi formatter would render as per:
|
43
|
+
# http://jsonapi.org/format/#error-objects
|
44
|
+
error_formatter :json, Grape::Formatter::ActiveModelSerializers
|
39
45
|
end
|
40
46
|
```
|
41
47
|
|
data/RELEASING.md
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# Releasing Grape::ActiveModelSerializers
|
2
|
+
|
3
|
+
There're no particular rules about when to release grape-active_model_serializers. Release bug fixes frequently, features not so frequently and breaking API changes rarely.
|
4
|
+
|
5
|
+
### Release
|
6
|
+
|
7
|
+
Run tests, check that all tests succeed locally.
|
8
|
+
|
9
|
+
```
|
10
|
+
bundle install
|
11
|
+
rake
|
12
|
+
```
|
13
|
+
|
14
|
+
Check that the last build succeeded in [Travis CI](https://travis-ci.org/ruby-grape/grape-active_model_serializers) for all supported platforms.
|
15
|
+
|
16
|
+
Change "Next Release" in [CHANGELOG.md](CHANGELOG.md) to the new version.
|
17
|
+
|
18
|
+
```
|
19
|
+
### 0.7.2 (February 6, 2014)
|
20
|
+
```
|
21
|
+
|
22
|
+
Remove the line with "Your contribution here.", since there will be no more contributions to this release.
|
23
|
+
|
24
|
+
Commit your changes.
|
25
|
+
|
26
|
+
```
|
27
|
+
git add CHANGELOG.md lib/grape-active_model_serializers/version.rb
|
28
|
+
git commit -m "Preparing for release, 0.7.2."
|
29
|
+
git push origin master
|
30
|
+
```
|
31
|
+
|
32
|
+
Release.
|
33
|
+
|
34
|
+
```
|
35
|
+
$ rake release
|
36
|
+
|
37
|
+
grape-active_model_serializers 0.7.2 built to pkg/grape-active_model_serializers-0.7.2.gem.
|
38
|
+
Tagged v0.7.2.
|
39
|
+
Pushed git commits and tags.
|
40
|
+
Pushed grape-active_model_serializers 0.7.2 to rubygems.org.
|
41
|
+
```
|
42
|
+
|
43
|
+
### Prepare for the Next Version
|
44
|
+
|
45
|
+
Modify [lib/grape-active_model_serializers/version.rb](lib/grape-active_model_serializers/version.rb), increment the third number (eg. change `0.7.2` to `0.7.3`).
|
46
|
+
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
module Grape
|
50
|
+
module ActiveModelSerializers
|
51
|
+
VERSION = '0.7.3'.freeze
|
52
|
+
end
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
56
|
+
Add the next release to [CHANGELOG.md](CHANGELOG.md).
|
57
|
+
|
58
|
+
```
|
59
|
+
#### 0.7.3 (Next)
|
60
|
+
|
61
|
+
* Your contribution here.
|
62
|
+
```
|
63
|
+
|
64
|
+
Commit your changes.
|
65
|
+
|
66
|
+
```
|
67
|
+
git add CHANGELOG.md lib/grape-active_model_serializers/version.rb
|
68
|
+
git commit -m "Preparing for next development iteration, 0.7.3."
|
69
|
+
git push origin master
|
70
|
+
```
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'active_model_serializers'
|
2
2
|
require 'grape'
|
3
3
|
require 'grape-active_model_serializers/endpoint_extension'
|
4
|
+
require 'grape-active_model_serializers/error_formatter'
|
4
5
|
require 'grape-active_model_serializers/formatter'
|
5
6
|
require 'grape-active_model_serializers/serializer_resolver'
|
6
7
|
require 'grape-active_model_serializers/options_builder'
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Grape
|
2
|
+
module ErrorFormatter
|
3
|
+
module ActiveModelSerializers
|
4
|
+
extend Base
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def call(message, backtrace, options = {}, env = nil, original_exception = nil)
|
8
|
+
message = present(message, env) if respond_to?(:present)
|
9
|
+
message = wrap_message(message)
|
10
|
+
|
11
|
+
rescue_options = options[:rescue_options] || {}
|
12
|
+
if rescue_options[:backtrace] && backtrace && !backtrace.empty?
|
13
|
+
message = message.merge(backtrace: backtrace)
|
14
|
+
end
|
15
|
+
if rescue_options[:original_exception] && original_exception
|
16
|
+
message = message
|
17
|
+
.merge(original_exception: original_exception.inspect)
|
18
|
+
end
|
19
|
+
if ::Grape.const_defined? :Json
|
20
|
+
::Grape::Json.dump(message)
|
21
|
+
else
|
22
|
+
::MultiJson.dump(message)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def wrap_message(message)
|
29
|
+
if active_model?(message)
|
30
|
+
::ActiveModelSerializers::SerializableResource.new(
|
31
|
+
message,
|
32
|
+
serializer: ActiveModel::Serializer::ErrorSerializer
|
33
|
+
).as_json
|
34
|
+
elsif ok_to_pass_through?(message)
|
35
|
+
message
|
36
|
+
else
|
37
|
+
{ error: message }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def active_model?(message)
|
42
|
+
message.respond_to?(:errors) &&
|
43
|
+
message.errors.is_a?(ActiveModel::Errors)
|
44
|
+
end
|
45
|
+
|
46
|
+
def ok_to_pass_through?(message)
|
47
|
+
message.is_a?(Exceptions::ValidationErrors) ||
|
48
|
+
message.is_a?(Hash)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'grape-active_model_serializers/error_formatter'
|
3
|
+
|
4
|
+
describe Grape::ErrorFormatter::ActiveModelSerializers do
|
5
|
+
subject { Grape::ErrorFormatter::ActiveModelSerializers }
|
6
|
+
let(:backtrace) { ['Line:1'] }
|
7
|
+
let(:options) { Hash.new }
|
8
|
+
let(:env) { { 'api.endpoint' => app.endpoints.first } }
|
9
|
+
let(:original_exception) { StandardError.new('oh noes!') }
|
10
|
+
|
11
|
+
let(:app) {
|
12
|
+
Class.new(Grape::API) do |app|
|
13
|
+
app.format :json
|
14
|
+
app.formatter :jsonapi, Grape::Formatter::ActiveModelSerializers
|
15
|
+
app.error_formatter :jsonapi, Grape::ErrorFormatter::ActiveModelSerializers
|
16
|
+
|
17
|
+
app.namespace('space') do |ns|
|
18
|
+
ns.get('/', root: false) do
|
19
|
+
error!(message)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
}
|
24
|
+
let(:foo) {
|
25
|
+
Class.new {
|
26
|
+
include ActiveModel::Model
|
27
|
+
|
28
|
+
attr_accessor :name
|
29
|
+
|
30
|
+
def initialize(attributes = {})
|
31
|
+
super
|
32
|
+
errors.add(:name, 'We don\'t like bears')
|
33
|
+
end
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
before do
|
38
|
+
ActiveModel::Serializer.config.adapter = :json_api
|
39
|
+
end
|
40
|
+
|
41
|
+
after do
|
42
|
+
ActiveModel::Serializer.config.adapter = :json
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#call' do
|
46
|
+
context 'message is an activemodel' do
|
47
|
+
let(:message) {
|
48
|
+
foo.new(name: 'bar')
|
49
|
+
}
|
50
|
+
it 'formats the error' do
|
51
|
+
result = subject
|
52
|
+
.call(message, backtrace, options, env, original_exception)
|
53
|
+
json_hash = JSON.parse(result)
|
54
|
+
|
55
|
+
expected_result = {
|
56
|
+
'errors' => [
|
57
|
+
{
|
58
|
+
'source' => {
|
59
|
+
'pointer' => '/data/attributes/name'
|
60
|
+
},
|
61
|
+
'detail' => 'We don\'t like bears'
|
62
|
+
}
|
63
|
+
]
|
64
|
+
}
|
65
|
+
|
66
|
+
expect(json_hash == expected_result).to eq(true)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'message is hash like' do
|
71
|
+
let(:message) { { 'errors' => ['error'] } }
|
72
|
+
it 'passes the message through' do
|
73
|
+
result = subject
|
74
|
+
.call(message, backtrace, options, env, original_exception)
|
75
|
+
json_hash = JSON.parse(result)
|
76
|
+
|
77
|
+
expect(json_hash == message).to eq(true)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'message is text' do
|
82
|
+
let(:message) { 'error' }
|
83
|
+
it 'wraps the error' do
|
84
|
+
result = subject
|
85
|
+
.call(message, backtrace, options, env, original_exception)
|
86
|
+
json_hash = JSON.parse(result)
|
87
|
+
|
88
|
+
expect(json_hash == { 'error' => message }).to eq(true)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-active_model_serializers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Richard Henry Evans
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grape
|
@@ -141,6 +141,7 @@ files:
|
|
141
141
|
- Guardfile
|
142
142
|
- LICENSE.txt
|
143
143
|
- README.md
|
144
|
+
- RELEASING.md
|
144
145
|
- Rakefile
|
145
146
|
- UPGRADING.md
|
146
147
|
- grape-active_model_serializers.gemspec
|
@@ -148,12 +149,14 @@ files:
|
|
148
149
|
- lib/.travis.yml
|
149
150
|
- lib/grape-active_model_serializers.rb
|
150
151
|
- lib/grape-active_model_serializers/endpoint_extension.rb
|
152
|
+
- lib/grape-active_model_serializers/error_formatter.rb
|
151
153
|
- lib/grape-active_model_serializers/formatter.rb
|
152
154
|
- lib/grape-active_model_serializers/options_builder.rb
|
153
155
|
- lib/grape-active_model_serializers/serializer_resolver.rb
|
154
156
|
- lib/grape-active_model_serializers/version.rb
|
155
157
|
- spec/features/grape-active_model_serializers/render_spec.rb
|
156
158
|
- spec/grape-active_model_serializers/endpoint_extension_spec.rb
|
159
|
+
- spec/grape-active_model_serializers/error_formatter_spec.rb
|
157
160
|
- spec/grape-active_model_serializers/formatter_spec.rb
|
158
161
|
- spec/grape-active_model_serializers/versioned_api_formatter_spec.rb
|
159
162
|
- spec/grape-active_model_serializers_spec.rb
|
@@ -193,13 +196,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
193
196
|
version: '0'
|
194
197
|
requirements: []
|
195
198
|
rubyforge_project:
|
196
|
-
rubygems_version: 2.
|
199
|
+
rubygems_version: 2.6.12
|
197
200
|
signing_key:
|
198
201
|
specification_version: 4
|
199
202
|
summary: Use active_model_serializer in grape
|
200
203
|
test_files:
|
201
204
|
- spec/features/grape-active_model_serializers/render_spec.rb
|
202
205
|
- spec/grape-active_model_serializers/endpoint_extension_spec.rb
|
206
|
+
- spec/grape-active_model_serializers/error_formatter_spec.rb
|
203
207
|
- spec/grape-active_model_serializers/formatter_spec.rb
|
204
208
|
- spec/grape-active_model_serializers/versioned_api_formatter_spec.rb
|
205
209
|
- spec/grape-active_model_serializers_spec.rb
|
@@ -219,4 +223,3 @@ test_files:
|
|
219
223
|
- spec/support/serializers/v3/user_serializer.rb
|
220
224
|
- spec/support/serializers/v4/user_serializer.rb
|
221
225
|
- spec/support/serializers/v5/user_serializer.rb
|
222
|
-
has_rdoc:
|