json_error 1.0.1 → 2.0.0
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/README.md +9 -6
- data/json_error.gemspec +1 -1
- data/lib/json_error/base.rb +8 -1
- data/lib/json_error/version.rb +1 -1
- data/spec/fixtures/json_error_base_children.rb +6 -0
- data/spec/fixtures/locales/en.yml +0 -2
- data/spec/json_error/base_children_spec.rb +4 -4
- data/spec/json_error/base_spec.rb +2 -9
- data/spec/spec_helper.rb +2 -2
- metadata +4 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28a81b856dd02155dd289ec81a832f45b29b4f97
|
4
|
+
data.tar.gz: f06bd7600097f2b491bfc5b54185fe84bc047551
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 994b65539357730f815ec54b1d21eace76d8b2d1dd6e3982cfc869c81b73e757bbe80ea4a1f5f946a0a78facbc12397caf1930baaf7bf23655a8af576cb117c6
|
7
|
+
data.tar.gz: ec9faff67503c5ad0883729d53c6b8d61e3f3ed3d5e7dc41a949eaa9041e8069f2f297396fd8e5c84946fdf3f45668f71494a1d85d308bb363689b3f621c56a8
|
data/README.md
CHANGED
@@ -18,7 +18,7 @@ And then execute:
|
|
18
18
|
## Introduction
|
19
19
|
|
20
20
|
### What is JSONError gem?
|
21
|
-
It provides parent class with simple DSL to define API errors. It is based on concept
|
21
|
+
It provides parent class with simple DSL to define API errors. It is based on concept that error is something that went wrong (_what? = key_) under certain circumstances (_when? = context_).
|
22
22
|
|
23
23
|
### Why would I use it?
|
24
24
|
To design, manage and maintain API's errors JSON responses with ease.
|
@@ -31,13 +31,11 @@ Using locale file (e.g. json_errors.en.yml).
|
|
31
31
|
en:
|
32
32
|
json_errors:
|
33
33
|
resource_not_found:
|
34
|
-
status: 404
|
35
34
|
message: 'Resource %{name} (%{id}) was not found.'
|
36
35
|
description: 'Blah blah blah.'
|
37
36
|
href: 'https://developers.api.pl/doc/errors/resource_not_found'
|
38
37
|
batmans:
|
39
38
|
resource_not_found:
|
40
|
-
status: 404
|
41
39
|
message: 'Resource Batman (%{id}) was not found.'
|
42
40
|
description: "Cuz I'm Batman"
|
43
41
|
```
|
@@ -51,6 +49,8 @@ Let's take a look at example error class definition.
|
|
51
49
|
```ruby
|
52
50
|
class Error < JSONError.base
|
53
51
|
key :error
|
52
|
+
status 500
|
53
|
+
|
54
54
|
translated_properties :message, :href
|
55
55
|
custom_properties :details, :some_dependency
|
56
56
|
visible_properties :key, :status, :message, :href, :details
|
@@ -63,6 +63,9 @@ Error.new(key: :error)
|
|
63
63
|
```
|
64
64
|
however, json errors must have a key. Key is not inherited.
|
65
65
|
|
66
|
+
*Status* is the error http status. If not specified will default to 500. It may be expressed
|
67
|
+
by integer or string.
|
68
|
+
|
66
69
|
*Default properties* are properties included to JSON output by default (:key, status: 500).
|
67
70
|
- You can alias key property like in example below:
|
68
71
|
```ruby
|
@@ -87,11 +90,14 @@ Let's introduce two example error classes now. They will be used in further exam
|
|
87
90
|
module Errors
|
88
91
|
class ResourceNotFound < JSONError.base
|
89
92
|
key :resource_not_found
|
93
|
+
status 404
|
90
94
|
translated_properties :message, :href, :description
|
91
95
|
end
|
92
96
|
|
93
97
|
class OtherError < JSONError.base
|
94
98
|
key :other_error
|
99
|
+
status 500
|
100
|
+
|
95
101
|
translated_properties :message
|
96
102
|
end
|
97
103
|
end
|
@@ -106,7 +112,6 @@ Just add entries to locale.
|
|
106
112
|
en:
|
107
113
|
json_errors:
|
108
114
|
resource_not_found:
|
109
|
-
status: 404
|
110
115
|
message: 'Resource %{name} (%{id}) was not found.'
|
111
116
|
description: 'Blah blah blah.'
|
112
117
|
href: 'https://developers.api.pl/doc/errors/resource_not_found'
|
@@ -183,13 +188,11 @@ You can specify different contexts for the same error key.
|
|
183
188
|
en:
|
184
189
|
json_errors:
|
185
190
|
resource_not_found:
|
186
|
-
status: 404
|
187
191
|
message: 'Resource %{name} (%{id}) was not found.'
|
188
192
|
description: 'Blah blah blah.'
|
189
193
|
href: 'https://developers.api.pl/doc/errors/resource_not_found'
|
190
194
|
batmans:
|
191
195
|
resource_not_found:
|
192
|
-
status: 404
|
193
196
|
message: 'Resource Batman (%{id}) was not found.'
|
194
197
|
description: "Cuz I'm Batman"
|
195
198
|
```
|
data/json_error.gemspec
CHANGED
@@ -23,5 +23,5 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_development_dependency 'bundler', '~> 1.10'
|
24
24
|
s.add_development_dependency 'rake', '~> 10.0'
|
25
25
|
s.add_development_dependency 'rspec'
|
26
|
-
s.add_development_dependency '
|
26
|
+
s.add_development_dependency 'simplecov'
|
27
27
|
end
|
data/lib/json_error/base.rb
CHANGED
@@ -30,6 +30,13 @@ module JSONError
|
|
30
30
|
@key ||= key
|
31
31
|
end
|
32
32
|
|
33
|
+
def status(status = nil)
|
34
|
+
return @status if status.nil?
|
35
|
+
disallowed_property_setting!(:status) if base?
|
36
|
+
|
37
|
+
@status = status
|
38
|
+
end
|
39
|
+
|
33
40
|
def properties
|
34
41
|
[*default_properties, *translated_properties, *custom_properties]
|
35
42
|
end
|
@@ -73,7 +80,7 @@ module JSONError
|
|
73
80
|
end
|
74
81
|
|
75
82
|
def status
|
76
|
-
|
83
|
+
self.class.status || 500
|
77
84
|
end
|
78
85
|
|
79
86
|
def to_json(*args)
|
data/lib/json_error/version.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
class ResourceNotFound < JSONError.base
|
2
2
|
key :resource_not_found
|
3
|
+
status 404
|
4
|
+
|
3
5
|
translated_properties :message, :description, :href
|
4
6
|
custom_properties :details
|
5
7
|
end
|
6
8
|
|
7
9
|
class MissingTranslations < JSONError.base
|
8
10
|
key :missing_translations
|
11
|
+
status 404
|
12
|
+
|
9
13
|
translated_properties :message, :description, :href
|
10
14
|
custom_properties :details
|
11
15
|
visible_properties(*default_properties, :message, :details)
|
@@ -19,8 +23,10 @@ end
|
|
19
23
|
|
20
24
|
class WithKeyAlias < JSONError.base
|
21
25
|
key :with_key_alias, as: :error_code
|
26
|
+
status 400
|
22
27
|
end
|
23
28
|
|
24
29
|
class WithKeyAliasChild < WithKeyAlias
|
25
30
|
key :with_key_alias_child
|
31
|
+
status '429'
|
26
32
|
end
|
@@ -1,13 +1,11 @@
|
|
1
1
|
en:
|
2
2
|
json_errors:
|
3
3
|
resource_not_found:
|
4
|
-
status: 404
|
5
4
|
message: 'Resource %{name} (%{id}) was not found.'
|
6
5
|
description: 'Blah blah blah.'
|
7
6
|
href: 'https://developers.api.pl/doc/errors/resource_not_found'
|
8
7
|
other:
|
9
8
|
resource_not_found:
|
10
|
-
status: 400
|
11
9
|
message: 'Resource not found.'
|
12
10
|
description: 'Bleh bleh bleh.'
|
13
11
|
href: 'https://developers.api.pl/doc/errors/resource_not_found?context=other'
|
@@ -85,7 +85,7 @@ describe ResourceNotFound do
|
|
85
85
|
|
86
86
|
context 'for context "other"' do
|
87
87
|
subject { described_class.new(context: 'other').status }
|
88
|
-
it { is_expected.to eq(
|
88
|
+
it { is_expected.to eq(404) }
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
@@ -177,7 +177,7 @@ describe MissingTranslations do
|
|
177
177
|
|
178
178
|
describe '#status' do
|
179
179
|
subject { described_class.new.status }
|
180
|
-
it { is_expected.to eq(
|
180
|
+
it { is_expected.to eq(404) }
|
181
181
|
end
|
182
182
|
|
183
183
|
describe '#key' do
|
@@ -292,7 +292,7 @@ describe WithKeyAlias do
|
|
292
292
|
end
|
293
293
|
|
294
294
|
describe 'status property' do
|
295
|
-
it { expect(parse.call(subject)['status']).to eq(
|
295
|
+
it { expect(parse.call(subject)['status']).to eq(400) }
|
296
296
|
end
|
297
297
|
|
298
298
|
describe 'error_code property' do
|
@@ -320,7 +320,7 @@ describe WithKeyAliasChild do
|
|
320
320
|
end
|
321
321
|
|
322
322
|
describe 'status property' do
|
323
|
-
it { expect(parse.call(subject)['status']).to eq(
|
323
|
+
it { expect(parse.call(subject)['status']).to eq('429') }
|
324
324
|
end
|
325
325
|
|
326
326
|
describe 'error_code property' do
|
@@ -102,17 +102,10 @@ describe JSONError::Base do
|
|
102
102
|
end
|
103
103
|
|
104
104
|
describe '#status' do
|
105
|
+
let(:error) { described_class.new(key: :other_error) }
|
105
106
|
subject { error.status }
|
106
107
|
|
107
|
-
|
108
|
-
let(:error) { described_class.new(key: :other_error) }
|
109
|
-
it { is_expected.to eq(500) }
|
110
|
-
end
|
111
|
-
|
112
|
-
context 'when defined in locale' do
|
113
|
-
let(:error) { described_class.new(key: :resource_not_found) }
|
114
|
-
it { is_expected.to eq(404) }
|
115
|
-
end
|
108
|
+
it { is_expected.to eq(500) }
|
116
109
|
end
|
117
110
|
|
118
111
|
describe '#key' do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_error
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Krzysztof Buszewicz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: simplecov
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -143,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
143
|
version: '0'
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project:
|
146
|
-
rubygems_version: 2.
|
146
|
+
rubygems_version: 2.6.8
|
147
147
|
signing_key:
|
148
148
|
specification_version: 4
|
149
149
|
summary: JSON errors base for APIs.
|
@@ -155,4 +155,3 @@ test_files:
|
|
155
155
|
- spec/json_error/errors/disallowed_property_setting.rb
|
156
156
|
- spec/json_error_spec.rb
|
157
157
|
- spec/spec_helper.rb
|
158
|
-
has_rdoc:
|