human_error 3.0.1 → 3.1.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/lib/human_error.rb +3 -1
- data/lib/human_error/errors/authentication_error.rb +2 -0
- data/lib/human_error/errors/authorization_error.rb +8 -0
- data/lib/human_error/errors/authorization_errors/forbidden_error.rb +47 -0
- data/lib/human_error/version.rb +1 -1
- data/spec/lib/human_error/errors/authorization_errors/forbidden_error_spec.rb +51 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bcd73a9e09835dff5279ebae166f1b379ff3b26
|
4
|
+
data.tar.gz: ce33687c79d3c4a7b00e14603bbccd77dad48feb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c2de3573c9de4666ea9810dc849a76924fc7ec592f2615fbc9904bf7a7f0ed3dfc5f035a363f32c92a1751e83aa7d1189432cb45ecb84cb4864d648690630c9
|
7
|
+
data.tar.gz: f373af39d2dfe44009ed2a3901cf66aaefe0ea48898f6bc74c032dc3f04294bd123b3ac3073d261007ad01f6852a6a53a84319a9118fed3d656ec5d50ccb9f8e
|
data/lib/human_error.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'human_error/configuration'
|
2
2
|
require 'human_error/error'
|
3
|
+
require 'human_error/errors/authorization_error'
|
4
|
+
require 'human_error/errors/authorization_errors/forbidden_error'
|
3
5
|
require 'human_error/errors/authentication_error'
|
4
6
|
require 'human_error/errors/authentication_errors/duplicate_authentication_error'
|
5
7
|
require 'human_error/errors/authentication_errors/invalid_token_error'
|
@@ -40,6 +42,6 @@ class HumanError
|
|
40
42
|
end
|
41
43
|
|
42
44
|
def self.raise(error_type, **args)
|
43
|
-
Kernel.
|
45
|
+
Kernel.fail build(error_type, **args)
|
44
46
|
end
|
45
47
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'human_error/errors/authorization_error'
|
2
|
+
|
3
|
+
class HumanError
|
4
|
+
module Errors
|
5
|
+
class ForbiddenError < RuntimeError
|
6
|
+
include Error
|
7
|
+
include AuthorizationError
|
8
|
+
|
9
|
+
NON_SPECIFIC_RESOURCE_ACTIONS = %w{index create}.freeze
|
10
|
+
|
11
|
+
attr_accessor :resource_name,
|
12
|
+
:resource_id,
|
13
|
+
:action
|
14
|
+
|
15
|
+
def http_status
|
16
|
+
403
|
17
|
+
end
|
18
|
+
|
19
|
+
def title
|
20
|
+
'Forbidden'
|
21
|
+
end
|
22
|
+
|
23
|
+
def detail
|
24
|
+
detail_quantity = if NON_SPECIFIC_RESOURCE_ACTIONS.include? action.to_s
|
25
|
+
"#{action} a #{resource_name}"
|
26
|
+
else
|
27
|
+
"#{action} the #{resource_name} with ID #{resource_id}"
|
28
|
+
end
|
29
|
+
|
30
|
+
"You do not have access to #{detail_quantity}. Providing a different set of " \
|
31
|
+
'credentials may potentially allow you access to this resource.'
|
32
|
+
end
|
33
|
+
|
34
|
+
def source
|
35
|
+
@source ||= {
|
36
|
+
'resource_name' => resource_name,
|
37
|
+
'resource_id' => resource_id,
|
38
|
+
'action' => @action,
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def action
|
43
|
+
@action || 'access'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/human_error/version.rb
CHANGED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'rspectacular'
|
2
|
+
require 'human_error/errors/authorization_errors/forbidden_error'
|
3
|
+
|
4
|
+
class HumanError
|
5
|
+
module Errors
|
6
|
+
describe ForbiddenError do
|
7
|
+
let(:error) { ForbiddenError.new }
|
8
|
+
|
9
|
+
it 'has a status of 403' do
|
10
|
+
expect(error.http_status).to eql 403
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'has a code' do
|
14
|
+
expect(error.code).to eql 'errors.forbidden_error'
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'has a title' do
|
18
|
+
expect(error.title).to eql 'Forbidden'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'can output the detail for actions affecting a specific resource' do
|
22
|
+
error = ForbiddenError.new(resource_name: 'resource',
|
23
|
+
resource_id: '123',
|
24
|
+
action: 'show')
|
25
|
+
|
26
|
+
expect(error.detail).to eql \
|
27
|
+
'You do not have access to show the resource with ID 123. Providing a different ' \
|
28
|
+
'set of credentials may potentially allow you access to this resource.'
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'can output the detail for actions affecting multiple resources' do
|
32
|
+
error = ForbiddenError.new(resource_name: 'resource',
|
33
|
+
action: 'create')
|
34
|
+
|
35
|
+
expect(error.detail).to eql \
|
36
|
+
'You do not have access to create a resource. Providing a different ' \
|
37
|
+
'set of credentials may potentially allow you access to this resource.'
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'can output the source' do
|
41
|
+
error = ForbiddenError.new(resource_name: 'resource',
|
42
|
+
resource_id: '123',
|
43
|
+
action: 'show')
|
44
|
+
|
45
|
+
expect(error.source).to eql('resource_name' => 'resource',
|
46
|
+
'resource_id' => '123',
|
47
|
+
'action' => 'show')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: human_error
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jfelchner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -82,6 +82,8 @@ files:
|
|
82
82
|
- lib/human_error/errors/authentication_errors/duplicate_authentication_error.rb
|
83
83
|
- lib/human_error/errors/authentication_errors/invalid_token_error.rb
|
84
84
|
- lib/human_error/errors/authentication_errors/invalid_username_or_password_error.rb
|
85
|
+
- lib/human_error/errors/authorization_error.rb
|
86
|
+
- lib/human_error/errors/authorization_errors/forbidden_error.rb
|
85
87
|
- lib/human_error/errors/crud_error.rb
|
86
88
|
- lib/human_error/errors/crud_errors/association_error.rb
|
87
89
|
- lib/human_error/errors/crud_errors/resource_not_found_error.rb
|
@@ -97,6 +99,7 @@ files:
|
|
97
99
|
- spec/lib/human_error/errors/authentication_errors/duplicate_authentication_error_spec.rb
|
98
100
|
- spec/lib/human_error/errors/authentication_errors/invalid_token_error_spec.rb
|
99
101
|
- spec/lib/human_error/errors/authentication_errors/invalid_username_or_password_error_spec.rb
|
102
|
+
- spec/lib/human_error/errors/authorization_errors/forbidden_error_spec.rb
|
100
103
|
- spec/lib/human_error/errors/crud_errors/association_error_spec.rb
|
101
104
|
- spec/lib/human_error/errors/crud_errors/resource_not_found_error_spec.rb
|
102
105
|
- spec/lib/human_error/errors/crud_errors/resource_persistence_error_spec.rb
|
@@ -134,6 +137,7 @@ test_files:
|
|
134
137
|
- spec/lib/human_error/errors/authentication_errors/duplicate_authentication_error_spec.rb
|
135
138
|
- spec/lib/human_error/errors/authentication_errors/invalid_token_error_spec.rb
|
136
139
|
- spec/lib/human_error/errors/authentication_errors/invalid_username_or_password_error_spec.rb
|
140
|
+
- spec/lib/human_error/errors/authorization_errors/forbidden_error_spec.rb
|
137
141
|
- spec/lib/human_error/errors/crud_errors/association_error_spec.rb
|
138
142
|
- spec/lib/human_error/errors/crud_errors/resource_not_found_error_spec.rb
|
139
143
|
- spec/lib/human_error/errors/crud_errors/resource_persistence_error_spec.rb
|