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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 933cd1db1433ec311e9444e98083fdd941533d15caf2c9a47a50eea92db8458b
4
- data.tar.gz: 0135162f0cfd82a5774e53eefb28516068316ea41fca125078496087def6f94c
3
+ metadata.gz: 7035563235faf487222e2a1855529723e471792d6c240d0d330c9c154d588486
4
+ data.tar.gz: db60393aee3af5c2e98f1f41b425cbc8a4af4714b1605b5adf28eb847e6bec2a
5
5
  SHA512:
6
- metadata.gz: 38ab27987d1a5238ef906ea0d206eb4ef9709128185a22d0ca1f33a3084f7fa006171dc13b8a3b93966bf7ed7ded9ba906e6a29849c43aa12af7b41c1cc80576
7
- data.tar.gz: 26ae1501716ab8e63be2c027e4c5c8ee58382a1f89acd30b04c978d448ec04e7bb31dc1d8a51f9bd4c85ce9f18e87213292d34398a1185ef8c1b0eb1aa729884
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(error)
18
- render json: { errors: [error.as_json] }, status: error.status_code
17
+ report_error error
18
+ render_error error
19
19
  end
20
20
 
21
21
  def parse_error(error)
22
- return error if error.is_a?(MinatoErrorHandler::MinatoError)
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.set_backtrace(error.backtrace)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MinatoErrorHandler
4
- VERSION = "0.1.2-4"
4
+ VERSION = "0.1.2-6"
5
5
  end
@@ -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
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-30 00:00:00.000000000 Z
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