jsonapi_errors_handler 0.1.5 → 0.1.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: ced85209200ee1300de00d6ed66ed974c4367ed8fd9590f928e72af1beec7bf2
4
- data.tar.gz: 9237654c617b83da0086c7c23177a3643bb879d3930eb12a27a0687b9bf3b950
3
+ metadata.gz: ba2a86c74563398a7436e21ceea674a26a9672bbfba6c8fadc125df8eed70615
4
+ data.tar.gz: f56a1281368f6ef3ab4c3a2a38afd1c80affd3997c32acca0f5cfe0784b4ba95
5
5
  SHA512:
6
- metadata.gz: 736c7c05eae6fee9f3577b929640ebc5edd53e6b38792de692dd9bbd85addec9968b3d92953f11721d804fa3ab1d3e36ff77cf99c333da55aaac8082e5c58341
7
- data.tar.gz: 1d3ee769bcf962f31b3056079db996e3d8f71289ca20e7b0cd623f8a8117897c884b1d50bbe1ae7b85056f81013dcba0be8df600c5ffbb3c2e2dc88dd1481dd3
6
+ metadata.gz: 3661da30d706ed7cdc762136424326c0bca8d749afee213f80479e420d7f639bc1be1ef39954fced7ebf01c2a7a25aa8358dfe9ef5cc38ffb63f2f2984e4da86
7
+ data.tar.gz: 62f72aa1e1ea8df5b8b68733a14cd3df02705fa47bd4b5c2f1dc5bdc66ef9f3ceb376473608d3927a9eb0669f569aa43e290e7cdc3011635eee35f038510933c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jsonapi_errors_handler (0.1.4)
4
+ jsonapi_errors_handler (0.1.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -46,7 +46,7 @@ If you want your custom errors being handled by default, just add them to the ma
46
46
 
47
47
  ```ruby
48
48
  include JsonapiErrorsHandler
49
- ErrorsMapper.map_errors!({
49
+ ErrorMapper.map_errors!({
50
50
  'ActiveRecord::RecordNotFound' => 'JsonapiErrorsHandler::Errors::NotFound',
51
51
  'ActiveRecord::RecordInvalid' => 'JsonapiErrorsHandler::Errors::Invalid',
52
52
  })
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'irb'
4
4
  require 'jsonapi_errors_handler/version'
5
+ require 'jsonapi_errors_handler/configuration'
5
6
  require 'jsonapi_errors_handler/errors'
6
7
  require 'jsonapi_errors_handler/error_mapper'
7
8
  require 'jsonapi_errors_handler/error_serializer'
@@ -19,22 +20,26 @@ module JsonapiErrorsHandler
19
20
  end
20
21
 
21
22
  def handle_error(error)
22
- mapped = map_error(error)
23
- log_error(error) if respond_to?(:log_error) && !mapped
24
- mapped ||= ::JsonapiErrorsHandler::Errors::StandardError.new
25
- render_error(mapped)
23
+ mapped = ErrorMapper.mapped_error(error)
24
+ mapped ? render_error(mapped) : handle_unexpected_error(error)
26
25
  end
27
26
 
28
- def map_error(error)
29
- error_klass = error.is_a?(Class) ? error : error.class
30
-
31
- return nil unless ErrorMapper.mapped_error?(error_klass.to_s)
32
- return error if error.instance_of?(error_klass)
33
-
34
- Object.const_get(ErrorMapper.mapped_errors[error_klass.to_s]).new
27
+ def handle_unexpected_error(error)
28
+ return raise error unless config.handle_unexpected?
29
+ log_error(error) if respond_to?(:log_error)
30
+ render_error(::JsonapiErrorsHandler::Errors::StandardError.new)
35
31
  end
36
32
 
37
33
  def render_error(error)
38
34
  render json: ::JsonapiErrorsHandler::ErrorSerializer.new(error), status: error.status
39
35
  end
36
+
37
+ def self.configure(&block)
38
+ config = Configuration.instance
39
+ config.configure(&block)
40
+ end
41
+
42
+ def self.config
43
+ Configuration.instance
44
+ end
40
45
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'singleton'
4
+
5
+ module JsonapiErrorsHandler
6
+ class Configuration
7
+ include Singleton
8
+
9
+ attr_writer :handle_unexpected
10
+
11
+ def configure
12
+ yield(self) if block_given?
13
+ end
14
+
15
+ def handle_unexpected?
16
+ @handle_unexpected
17
+ end
18
+
19
+ private
20
+
21
+ def initialize
22
+ @handle_unexpected = false
23
+ end
24
+ end
25
+ end
@@ -14,5 +14,20 @@ module JsonapiErrorsHandler
14
14
  def self.mapped_error?(error_klass)
15
15
  mapped_errors.key?(error_klass)
16
16
  end
17
+
18
+ def self.mapped_error(error)
19
+ return error if descendant_of_predefined?(error)
20
+
21
+ error_class = error.is_a?(Class) ? error.to_s : error.class.name
22
+ root_class = error_class.split('::').first
23
+ mapped = mapped_errors[error_class] || mapped_errors[root_class]
24
+ return unless mapped
25
+ Object.const_get(mapped).new
26
+ end
27
+
28
+ def self.descendant_of_predefined?(error)
29
+ return false if error.is_a?(Class)
30
+ error.class < JsonapiErrorsHandler::Errors::StandardError
31
+ end
17
32
  end
18
33
  end
@@ -5,7 +5,7 @@ require 'jsonapi_errors_handler/keys_stringifier'
5
5
  module JsonapiErrorsHandler
6
6
  module Errors
7
7
  class StandardError < ::StandardError
8
- def initialize(title: nil, detail: nil, status: nil, source: {})
8
+ def initialize(title: nil, detail: nil, status: nil, message: nil, source: {})
9
9
  @title = title || 'Something went wrong'
10
10
  @detail = detail
11
11
  @detail ||= 'We encountered unexpected error, but our developers had been already notified about it'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JsonapiErrorsHandler
4
- VERSION = '0.1.5'
4
+ VERSION = '0.1.6'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi_errors_handler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Wilgosz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-20 00:00:00.000000000 Z
11
+ date: 2019-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -77,6 +77,7 @@ files:
77
77
  - bin/setup
78
78
  - jsonapi_errors_handler.gemspec
79
79
  - lib/jsonapi_errors_handler.rb
80
+ - lib/jsonapi_errors_handler/configuration.rb
80
81
  - lib/jsonapi_errors_handler/error_mapper.rb
81
82
  - lib/jsonapi_errors_handler/error_serializer.rb
82
83
  - lib/jsonapi_errors_handler/errors.rb