minato_error_handler 0.1.0 → 0.1.2.pre.1
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a3c1af39e732bbb24c8de7de0872caaa1a7f65537b5e0df5fae441c614dfdb5
|
4
|
+
data.tar.gz: a09eb1a8f5f8481b6310f8ccce2cb31a164718c6ecd3067712b9f8ce8cf6bc00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb31ddba03fc2d593f2f5cc573a9ceba27c7f92823ee14fc5df36a2480d3afaf9171c1ba066be41d69a145ce6290f218ffc238aa37b32bb5799769c6ff9e2ab4
|
7
|
+
data.tar.gz: be8dff62d24801ff5a4e4f83a72d5cca05e11d6de0fe6fb4fca96961245d944f4397465af5890d62f8fa57e2ef920651d62b0b2e28361b09b3808e9966fdf2a9
|
@@ -1,11 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "minato_logger"
|
3
|
+
# require "minato_logger"
|
4
4
|
|
5
5
|
module MinatoErrorHandler
|
6
6
|
module ErrorHandler
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
|
+
attr_accessor :default_error_class
|
10
|
+
|
9
11
|
included do
|
10
12
|
rescue_from StandardError, with: :handle
|
11
13
|
end
|
@@ -13,14 +15,24 @@ module MinatoErrorHandler
|
|
13
15
|
private
|
14
16
|
|
15
17
|
def handle(exception)
|
16
|
-
error =
|
18
|
+
error = parse_error(exception)
|
17
19
|
report_error(error)
|
18
|
-
render json: { errors: [error.
|
20
|
+
render json: { errors: [error.as_json] }, status: error.status_code
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse_error(error)
|
24
|
+
return error if error.is_a?(MinatoErrorHandler::MinatoError)
|
25
|
+
|
26
|
+
error_class = default_error_class || MinatoErrorHandler::MinatoError
|
27
|
+
|
28
|
+
minato_error = error_class.new
|
29
|
+
minato_error.caused_by = error.full_message
|
30
|
+
minato_error.set_backtrace(error.backtrace)
|
31
|
+
minato_error
|
19
32
|
end
|
20
33
|
|
21
34
|
def report_error(error)
|
22
|
-
logger
|
23
|
-
logger.error(error.to_json)
|
35
|
+
Rails.logger.error(error.as_json)
|
24
36
|
end
|
25
37
|
end
|
26
38
|
end
|
@@ -5,44 +5,48 @@ require "json"
|
|
5
5
|
|
6
6
|
module MinatoErrorHandler
|
7
7
|
class MinatoError < StandardError
|
8
|
-
|
9
|
-
@caused_by = caused_by
|
10
|
-
@details = details
|
11
|
-
@status_code = status_code
|
12
|
-
super
|
13
|
-
end
|
8
|
+
SERVER_ERROR = 500
|
14
9
|
|
15
|
-
|
16
|
-
return error if error.instance_of?(MinatoErrorHandler::MinatoError)
|
10
|
+
attr_accessor :details, :caused_by, :request
|
17
11
|
|
18
|
-
|
12
|
+
def code
|
13
|
+
self.class.name
|
19
14
|
end
|
20
15
|
|
21
|
-
attr_reader :details, :status_code
|
22
|
-
|
23
16
|
def message
|
24
|
-
"An unknow error has occurred!"
|
17
|
+
"An unknow error has occurred! See more details in caused_by field."
|
25
18
|
end
|
26
19
|
|
27
|
-
def
|
28
|
-
|
20
|
+
def status_code
|
21
|
+
SERVER_ERROR
|
29
22
|
end
|
30
23
|
|
31
24
|
def unique_identfier
|
32
|
-
@unique_identfier
|
33
|
-
end
|
34
|
-
|
35
|
-
def caused_by
|
36
|
-
@caused_by || cause
|
25
|
+
@unique_identfier ||= SecureRandom.uuid
|
37
26
|
end
|
38
27
|
|
39
|
-
def
|
40
|
-
|
41
|
-
details: details, caused_by: caused_by, status_code: status_code }
|
28
|
+
def serializable_attributes(methods)
|
29
|
+
methods
|
42
30
|
end
|
43
31
|
|
44
32
|
def to_json(*_args)
|
45
33
|
serialized_hash.to_json
|
46
34
|
end
|
35
|
+
|
36
|
+
def as_json
|
37
|
+
serialized_hash.as_json
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
def serialized_hash
|
43
|
+
methods = serializable_attributes(%i[caused_by code details message status_code unique_identfier])
|
44
|
+
|
45
|
+
data = {}
|
46
|
+
methods.each do |method|
|
47
|
+
data[method] = send(method)
|
48
|
+
end
|
49
|
+
data
|
50
|
+
end
|
47
51
|
end
|
48
52
|
end
|
@@ -32,7 +32,6 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
33
33
|
spec.require_paths = ["lib"]
|
34
34
|
|
35
|
-
spec.add_dependency "minato_logger", "~>0.1.6"
|
36
35
|
spec.add_dependency "rails", ">= 7.0.4"
|
37
36
|
|
38
37
|
# Uncomment to register a new dependency of your gem
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minato_error_handler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2.pre.1
|
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-
|
11
|
+
date: 2023-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: minato_logger
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.1.6
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.1.6
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rails
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,9 +68,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
82
68
|
version: 2.6.0
|
83
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
70
|
requirements:
|
85
|
-
- - "
|
71
|
+
- - ">"
|
86
72
|
- !ruby/object:Gem::Version
|
87
|
-
version:
|
73
|
+
version: 1.3.1
|
88
74
|
requirements: []
|
89
75
|
rubygems_version: 3.1.6
|
90
76
|
signing_key:
|