minato_error_handler 0.1.2.pre.4 → 0.1.2.pre.6
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/minato_error_handler/error_handler.rb +13 -5
- data/lib/minato_error_handler/errors/minato_error.rb +86 -0
- data/lib/minato_error_handler/errors/network_error.rb +17 -0
- data/lib/minato_error_handler/errors/unknow_error.rb +15 -0
- data/lib/minato_error_handler/version.rb +1 -1
- data/lib/minato_error_handler.rb +3 -3
- metadata +5 -5
- data/lib/minato_error_handler/minato_error.rb +0 -56
- data/lib/minato_error_handler/network_error.rb +0 -19
- data/lib/minato_error_handler/unknow_error.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7035563235faf487222e2a1855529723e471792d6c240d0d330c9c154d588486
|
4
|
+
data.tar.gz: db60393aee3af5c2e98f1f41b425cbc8a4af4714b1605b5adf28eb847e6bec2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd80168c81486fe42c3e4a2aa8b33947f07b8eb73afba84be1aba07958db97b17b676e2e5078448e1b39d56c6c6fd1aa2477e44dbf687f36cdecd583eeed799e
|
7
|
+
data.tar.gz: f010f34b1391d4ba48436546bd1bcc8064f8310e52676769f4daf3721ff7b7436b7db257943215ebfa209737b4bbaf49db48f4a1b4b0d49b1638b285b1441a8f
|
@@ -14,18 +14,22 @@ module MinatoErrorHandler
|
|
14
14
|
|
15
15
|
def handle(exception)
|
16
16
|
error = parse_error(exception)
|
17
|
-
report_error
|
18
|
-
|
17
|
+
report_error error
|
18
|
+
render_error error
|
19
19
|
end
|
20
20
|
|
21
21
|
def parse_error(error)
|
22
|
-
|
22
|
+
if error.is_a?(MinatoErrorHandler::Errors::MinatoError)
|
23
|
+
error.http_request = request if error.http_request.nil?
|
24
|
+
return error
|
25
|
+
end
|
23
26
|
|
24
|
-
error_class = self.class.default_error_class || MinatoErrorHandler::UnknowError
|
27
|
+
error_class = self.class.default_error_class || MinatoErrorHandler::Errors::UnknowError
|
25
28
|
|
26
29
|
minato_error = error_class.new
|
27
30
|
minato_error.caused_by = error.full_message
|
28
|
-
minato_error.
|
31
|
+
minato_error.backtrace = error.backtrace
|
32
|
+
minato_error.http_request = request
|
29
33
|
minato_error
|
30
34
|
end
|
31
35
|
|
@@ -33,6 +37,10 @@ module MinatoErrorHandler
|
|
33
37
|
Rails.logger.error(error.as_json)
|
34
38
|
end
|
35
39
|
|
40
|
+
def render_error(error)
|
41
|
+
render json: { errors: [error.json_response] }, status: error.status_code
|
42
|
+
end
|
43
|
+
|
36
44
|
module ClassMethods
|
37
45
|
def default_error(klass)
|
38
46
|
# rubocop:disable Style/ClassVars
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "securerandom"
|
4
|
+
require "json"
|
5
|
+
|
6
|
+
module MinatoErrorHandler
|
7
|
+
module Errors
|
8
|
+
class MinatoError < StandardError
|
9
|
+
attr_accessor :details, :caused_by
|
10
|
+
attr_reader :http_request
|
11
|
+
|
12
|
+
def message
|
13
|
+
raise_method_not_implemented_error __method__
|
14
|
+
end
|
15
|
+
|
16
|
+
def status_code
|
17
|
+
raise_method_not_implemented_error __method__
|
18
|
+
end
|
19
|
+
|
20
|
+
def code
|
21
|
+
self.class.name
|
22
|
+
end
|
23
|
+
|
24
|
+
def backtrace=(backtrace)
|
25
|
+
set_backtrace(backtrace)
|
26
|
+
end
|
27
|
+
|
28
|
+
def unique_identfier
|
29
|
+
@unique_identfier ||= SecureRandom.uuid
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_json(*_args)
|
33
|
+
serialized_hash(serializable_methods_to_log).to_json
|
34
|
+
end
|
35
|
+
|
36
|
+
def as_json
|
37
|
+
serialized_hash(serializable_methods_to_log).as_json
|
38
|
+
end
|
39
|
+
|
40
|
+
def json_response
|
41
|
+
serialized_hash(serializable_methods_to_response).as_json
|
42
|
+
end
|
43
|
+
|
44
|
+
def http_request=(req)
|
45
|
+
return if req.nil?
|
46
|
+
|
47
|
+
@http_request = { headers: parse_http_request_headers(req.headers), host: req.host,
|
48
|
+
method: req.request_method, path: req.path, query: req.query_parameters,
|
49
|
+
remote: req.remote_ip, scheme: req.scheme }
|
50
|
+
end
|
51
|
+
|
52
|
+
def stack_trace
|
53
|
+
backtrace
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def serializable_methods_to_log
|
59
|
+
%i[caused_by code details message http_request status_code unique_identfier stack_trace]
|
60
|
+
end
|
61
|
+
|
62
|
+
def serializable_methods_to_response
|
63
|
+
methods_to_exclude = %i[http_request stack_trace]
|
64
|
+
serializable_methods_to_log.reject { |m| methods_to_exclude.include? m }
|
65
|
+
end
|
66
|
+
|
67
|
+
def serialized_hash(methods)
|
68
|
+
data = {}
|
69
|
+
methods.each do |method|
|
70
|
+
data[method] = send(method)
|
71
|
+
end
|
72
|
+
data
|
73
|
+
end
|
74
|
+
|
75
|
+
def parse_http_request_headers(headers)
|
76
|
+
selected_headers = headers.env.filter { |k, _v| k.upcase.start_with? "HTTP" }
|
77
|
+
selected_headers.transform_keys! { |k| k.gsub(/\bHTTP_/, "").downcase }
|
78
|
+
selected_headers
|
79
|
+
end
|
80
|
+
|
81
|
+
def raise_method_not_implemented_error(method_name)
|
82
|
+
raise "You must define \"#{method_name}\" in your concrete class."
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MinatoErrorHandler
|
4
|
+
module Errors
|
5
|
+
class NetworkError < MinatoErrorHandler::Errors::MinatoError
|
6
|
+
attr_accessor :response
|
7
|
+
|
8
|
+
def message
|
9
|
+
"A network error has occurred!"
|
10
|
+
end
|
11
|
+
|
12
|
+
def status_code
|
13
|
+
503
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MinatoErrorHandler
|
4
|
+
module Errors
|
5
|
+
class UnknowError < MinatoError
|
6
|
+
def message
|
7
|
+
"An unknow error has occurred! See more details in caused_by field."
|
8
|
+
end
|
9
|
+
|
10
|
+
def status_code
|
11
|
+
500
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/minato_error_handler.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require "minato_error_handler/railtie"
|
4
4
|
require "minato_error_handler/version"
|
5
|
-
require "minato_error_handler/minato_error"
|
6
|
-
require "minato_error_handler/network_error"
|
7
|
-
require "minato_error_handler/unknow_error"
|
5
|
+
require "minato_error_handler/errors/minato_error"
|
6
|
+
require "minato_error_handler/errors/network_error"
|
7
|
+
require "minato_error_handler/errors/unknow_error"
|
8
8
|
require "minato_error_handler/error_handler"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minato_error_handler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.2.pre.
|
4
|
+
version: 0.1.2.pre.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ferreri
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -43,10 +43,10 @@ files:
|
|
43
43
|
- compose.yml
|
44
44
|
- lib/minato_error_handler.rb
|
45
45
|
- lib/minato_error_handler/error_handler.rb
|
46
|
-
- lib/minato_error_handler/minato_error.rb
|
47
|
-
- lib/minato_error_handler/network_error.rb
|
46
|
+
- lib/minato_error_handler/errors/minato_error.rb
|
47
|
+
- lib/minato_error_handler/errors/network_error.rb
|
48
|
+
- lib/minato_error_handler/errors/unknow_error.rb
|
48
49
|
- lib/minato_error_handler/railtie.rb
|
49
|
-
- lib/minato_error_handler/unknow_error.rb
|
50
50
|
- lib/minato_error_handler/version.rb
|
51
51
|
- minato_error_handler.gemspec
|
52
52
|
- sig/minato_error_handler.rbs
|
@@ -1,56 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "securerandom"
|
4
|
-
require "json"
|
5
|
-
|
6
|
-
module MinatoErrorHandler
|
7
|
-
class MinatoError < StandardError
|
8
|
-
attr_accessor :details, :caused_by, :request
|
9
|
-
|
10
|
-
def message
|
11
|
-
raise_method_not_implemented_error __method__
|
12
|
-
end
|
13
|
-
|
14
|
-
def status_code
|
15
|
-
raise_method_not_implemented_error __method__
|
16
|
-
end
|
17
|
-
|
18
|
-
def serializable_methods
|
19
|
-
raise_method_not_implemented_error __method__
|
20
|
-
end
|
21
|
-
|
22
|
-
def code
|
23
|
-
self.class.name
|
24
|
-
end
|
25
|
-
|
26
|
-
def unique_identfier
|
27
|
-
@unique_identfier ||= SecureRandom.uuid
|
28
|
-
end
|
29
|
-
|
30
|
-
def to_json(*_args)
|
31
|
-
serialized_hash.to_json
|
32
|
-
end
|
33
|
-
|
34
|
-
def as_json
|
35
|
-
serialized_hash.as_json
|
36
|
-
end
|
37
|
-
|
38
|
-
protected
|
39
|
-
|
40
|
-
def default_serializable_methods
|
41
|
-
%i[caused_by code details message request status_code unique_identfier]
|
42
|
-
end
|
43
|
-
|
44
|
-
def serialized_hash
|
45
|
-
data = {}
|
46
|
-
serializable_methods.each do |method|
|
47
|
-
data[method] = send(method)
|
48
|
-
end
|
49
|
-
data
|
50
|
-
end
|
51
|
-
|
52
|
-
def raise_method_not_implemented_error(method_name)
|
53
|
-
raise "You must define \"#{method_name}\" in your concrete class."
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module MinatoErrorHandler
|
4
|
-
class NetworkError < MinatoErrorHandler::MinatoError
|
5
|
-
attr_accessor :response
|
6
|
-
|
7
|
-
def message
|
8
|
-
"A network error has occurred!"
|
9
|
-
end
|
10
|
-
|
11
|
-
def status_code
|
12
|
-
503
|
13
|
-
end
|
14
|
-
|
15
|
-
def serializable_methods
|
16
|
-
default_serializable_methods.push(:response)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module MinatoErrorHandler
|
4
|
-
class UnknowError < MinatoError
|
5
|
-
def message
|
6
|
-
"An unknow error has occurred! See more details in caused_by field."
|
7
|
-
end
|
8
|
-
|
9
|
-
def status_code
|
10
|
-
500
|
11
|
-
end
|
12
|
-
|
13
|
-
def serializable_methods
|
14
|
-
default_serializable_methods
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|