minato_error_handler 0.1.1 → 0.1.2.pre.2

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: 782511f473a7acd8cc4268e29e09a7a4c121978fced62c3315e3609a9816e275
4
- data.tar.gz: cbbc5f77e2ff0d78eb763744f0f5e401423f9590f6512445abc671a904a968dd
3
+ metadata.gz: 41d720310e8d76ac6b90789c61777d15b44ad7bfd9b9bddacd183f8d0604bbf0
4
+ data.tar.gz: a0ba411869567505ef97e20555f9788bb9819b05bbea6b4ffff9b433556be8b1
5
5
  SHA512:
6
- metadata.gz: 819f461a4a31206f5c6d07f92eee20ea55835b7c0e8839bf7306fd6f0cf020f21a0f93a78e07b36b95cec8aae3394cc7f392bb28e6562e9426a091227764e0bd
7
- data.tar.gz: 30aecc3b4e4cc220eba47b93f29bfde040f33e01937dfe064e56e792b28312c8d880a9d33df4ed55e3cd3936796ac1db6ddcc71c082b82377e43b48404de0f64
6
+ metadata.gz: fce7eb6a917c18a53697525a85ac4373b8738a9cf310606afd86b7f4abfdbebf26a75675d937595eda260db8d1beddc947c36a85df01d0482e2cecc54ae887bf
7
+ data.tar.gz: 115ccee1dc788a6981610d2ec994ea6cd51bb51425aa56ff0156434114029a27826b74c30fe3ee2297560c694b8e7daa2097dada7eaf7b828dd49bc1ffd4ddd4
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "minato_logger"
4
-
5
3
  module MinatoErrorHandler
6
4
  module ErrorHandler
7
5
  extend ActiveSupport::Concern
@@ -10,17 +8,31 @@ module MinatoErrorHandler
10
8
  rescue_from StandardError, with: :handle
11
9
  end
12
10
 
11
+ def default_error_class(klass)
12
+ @default_error_class = klass.to_s.camelize.constantize
13
+ end
14
+
13
15
  private
14
16
 
15
17
  def handle(exception)
16
- error = MinatoErrorHandler::MinatoError.from_error(exception)
18
+ error = parse_error(exception)
17
19
  report_error(error)
18
- render json: { errors: [error.to_json] }, status: error.status_code
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::UnknowError
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 = MinatoLogger::Logger.new
23
- logger.error(error.to_json)
35
+ Rails.logger.error(error.as_json)
24
36
  end
25
37
  end
26
38
  end
@@ -5,23 +5,18 @@ require "json"
5
5
 
6
6
  module MinatoErrorHandler
7
7
  class MinatoError < StandardError
8
- def initialize(details: {}, caused_by: nil, status_code: 500)
9
- @caused_by = caused_by
10
- @details = details
11
- @status_code = status_code
12
- super
13
- end
14
-
15
- def self.from_error(error)
16
- return error if error.is_a?(MinatoErrorHandler::MinatoError)
8
+ attr_accessor :details, :caused_by, :request
17
9
 
18
- new caused_by: error.cause
10
+ def message
11
+ raise_method_not_implemented_error __method__
19
12
  end
20
13
 
21
- attr_reader :details, :status_code
14
+ def status_code
15
+ raise_method_not_implemented_error __method__
16
+ end
22
17
 
23
- def message
24
- "An unknow error has occurred!"
18
+ def serializable_methods
19
+ raise_method_not_implemented_error __method__
25
20
  end
26
21
 
27
22
  def code
@@ -29,20 +24,33 @@ module MinatoErrorHandler
29
24
  end
30
25
 
31
26
  def unique_identfier
32
- @unique_identfier || SecureRandom.uuid
27
+ @unique_identfier ||= SecureRandom.uuid
28
+ end
29
+
30
+ def to_json(*_args)
31
+ serialized_hash.to_json
33
32
  end
34
33
 
35
- def caused_by
36
- @caused_by || cause
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]
37
42
  end
38
43
 
39
44
  def serialized_hash
40
- { message: message, code: code, unique_identfier: unique_identfier,
41
- details: details, caused_by: caused_by, status_code: status_code }
45
+ data = {}
46
+ serializable_methods.each do |method|
47
+ data[method] = send(method)
48
+ end
49
+ data
42
50
  end
43
51
 
44
- def to_json(*_args)
45
- serialized_hash.to_json
52
+ def raise_method_not_implemented_error(method_name)
53
+ raise "You must define \"#{method_name}\" in your concrete class."
46
54
  end
47
55
  end
48
56
  end
@@ -2,19 +2,18 @@
2
2
 
3
3
  module MinatoErrorHandler
4
4
  class NetworkError < MinatoErrorHandler::MinatoError
5
- def initialize(details: {}, caused_by: nil, status_code: nil, request_body: {})
6
- @request_body = request_body
7
- super(details: details, caused_by: caused_by, status_code: status_code)
8
- end
9
-
10
- attr_reader :request_body
5
+ attr_accessor :response
11
6
 
12
7
  def message
13
8
  "A network error has occurred!"
14
9
  end
15
10
 
16
- def serialized_hash
17
- super.merge({ request_body: request_body })
11
+ def status_code
12
+ 503
13
+ end
14
+
15
+ def serializable_methods
16
+ default_serializable_methods.push(:response)
18
17
  end
19
18
  end
20
19
  end
@@ -0,0 +1,17 @@
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MinatoErrorHandler
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.2-2"
5
5
  end
@@ -4,4 +4,5 @@ require "minato_error_handler/railtie"
4
4
  require "minato_error_handler/version"
5
5
  require "minato_error_handler/minato_error"
6
6
  require "minato_error_handler/network_error"
7
+ require "minato_error_handler/unknow_error"
7
8
  require "minato_error_handler/error_handler"
@@ -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.1
4
+ version: 0.1.2.pre.2
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-28 00:00:00.000000000 Z
11
+ date: 2023-11-30 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
@@ -60,6 +46,7 @@ files:
60
46
  - lib/minato_error_handler/minato_error.rb
61
47
  - lib/minato_error_handler/network_error.rb
62
48
  - lib/minato_error_handler/railtie.rb
49
+ - lib/minato_error_handler/unknow_error.rb
63
50
  - lib/minato_error_handler/version.rb
64
51
  - minato_error_handler.gemspec
65
52
  - sig/minato_error_handler.rbs
@@ -82,9 +69,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
82
69
  version: 2.6.0
83
70
  required_rubygems_version: !ruby/object:Gem::Requirement
84
71
  requirements:
85
- - - ">="
72
+ - - ">"
86
73
  - !ruby/object:Gem::Version
87
- version: '0'
74
+ version: 1.3.1
88
75
  requirements: []
89
76
  rubygems_version: 3.1.6
90
77
  signing_key: