minato_error_handler 0.1.2.pre.5 → 0.1.2.pre.7

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: 6b7d51b076d30f1d1f1f7001ad4cdcf2655d063fcea829bb3328c3970f48672c
4
- data.tar.gz: '008d796e6d82a663606fde3ae0d84932754e73397bf84fa01abb79c1056e95de'
3
+ metadata.gz: 690480f951a625faac7e8216033c3af2ca73b660607756117c89b5d116acc90c
4
+ data.tar.gz: 20acab0751cc3466319bd6325fc188e534a24b093feb75df030df4976c2f0154
5
5
  SHA512:
6
- metadata.gz: 621d41e858a6acdda862990330b7c37c4aeebdc334d571c03e3ea5560920448fc44e5757393c01e22aed3aec9053bff2f30058a819979a58e280f3d859bee463
7
- data.tar.gz: c171472bc6847c753d90ed90ba3007e7568524ca57b7cf057d7d937655521508f4d7cb9d85d25a2b859c63be3832276e8b7aeb2d383a481cab3c6027805d86a9
6
+ metadata.gz: 420c00d8f05f4e70b853fe903d8cddedb1c0b1e0b1e1f849271c3e09778c6cd17ec89c8adf7196d5460896efa8b885dc90b38c464e2ea97927c67e7fd94a1bc1
7
+ data.tar.gz: 7f650d030f10585d2535912589096c10ad60dccd85eef940cd1b99e79c1a136f455a01f290435ad80b252ed447f17afe70412c056a8db4fad20b9f187ea1043c
@@ -19,13 +19,31 @@ module MinatoErrorHandler
19
19
  end
20
20
 
21
21
  def parse_error(error)
22
- return error if error.is_a?(MinatoErrorHandler::Errors::MinatoError)
22
+ return parse_minato_error(error) if minato_error?(error)
23
23
 
24
- error_class = self.class.default_error_class || MinatoErrorHandler::Errors::UnknowError
24
+ build_minato_error(error)
25
+ end
26
+
27
+ def parse_minato_error(error)
28
+ error.http_request ||= request
29
+ error.http_response ||= response
30
+ error
31
+ end
32
+
33
+ def minato_error?(error)
34
+ error.is_a?(MinatoErrorHandler::Errors::MinatoError)
35
+ end
36
+
37
+ def error_class
38
+ self.class.default_error_class || MinatoErrorHandler::Errors::UnknowError
39
+ end
25
40
 
41
+ def build_minato_error(error)
26
42
  minato_error = error_class.new
27
43
  minato_error.caused_by = error.full_message
28
44
  minato_error.backtrace = error.backtrace
45
+ minato_error.http_request ||= request
46
+ minato_error.http_response ||= response
29
47
  minato_error
30
48
  end
31
49
 
@@ -6,7 +6,8 @@ require "json"
6
6
  module MinatoErrorHandler
7
7
  module Errors
8
8
  class MinatoError < StandardError
9
- attr_accessor :details, :caused_by, :request
9
+ attr_accessor :details, :caused_by
10
+ attr_reader :http_request, :http_response
10
11
 
11
12
  def message
12
13
  raise_method_not_implemented_error __method__
@@ -40,14 +41,34 @@ module MinatoErrorHandler
40
41
  serialized_hash(serializable_methods_to_response).as_json
41
42
  end
42
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 http_response=(res)
53
+ return if res.nil?
54
+
55
+ @http_response = { headers: parse_http_response_headers(res.headers),
56
+ status: res.status,
57
+ text_status: res.status_message }
58
+ end
59
+
60
+ def stack_trace
61
+ backtrace
62
+ end
63
+
43
64
  private
44
65
 
45
66
  def serializable_methods_to_log
46
- %i[caused_by code details message request status_code unique_identfier]
67
+ %i[caused_by code details message http_request http_response status_code unique_identfier stack_trace]
47
68
  end
48
69
 
49
70
  def serializable_methods_to_response
50
- methods_to_exclude = %i[request]
71
+ methods_to_exclude = %i[http_request http_response stack_trace]
51
72
  serializable_methods_to_log.reject { |m| methods_to_exclude.include? m }
52
73
  end
53
74
 
@@ -59,6 +80,16 @@ module MinatoErrorHandler
59
80
  data
60
81
  end
61
82
 
83
+ def parse_http_request_headers(headers)
84
+ selected_headers = headers.env.filter { |k, _v| k.upcase.start_with? "HTTP" }
85
+ selected_headers.transform_keys! { |k| k.gsub(/\bHTTP_/, "").downcase }
86
+ selected_headers
87
+ end
88
+
89
+ def parse_http_response_headers(headers)
90
+ headers.transform_keys(&:downcase)
91
+ end
92
+
62
93
  def raise_method_not_implemented_error(method_name)
63
94
  raise "You must define \"#{method_name}\" in your concrete class."
64
95
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MinatoErrorHandler
4
- VERSION = "0.1.2-5"
4
+ VERSION = "0.1.2-7"
5
5
  end
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.5
4
+ version: 0.1.2.pre.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ferreri
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-04 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