error_response 1.2.1 → 1.3.1.beta

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: 6564cacc538f7f8e2a619e6ebd8adf8db461207efb98dd8e4ac14d9e0d9b85d3
4
- data.tar.gz: 41d570d6177d09de90ef3623feb08defbe51ca0b6d74dc89d3cb8ba7e6e3c7a4
3
+ metadata.gz: a0008fe0a0e444282b979cb11d4d160fec60f6b37fbcce02d5300c85bf68bcbc
4
+ data.tar.gz: 1b709a6ba9a264b0aa71ade485ae28c21c569bd4a82e754ed52d8880655c3073
5
5
  SHA512:
6
- metadata.gz: b31916fb084528913610380ff58926ee4c59e527e0b2343085cf4042590f49c66ff53e935c1892446a5123d595f37db8897a35c951214ffbea497c3247969637
7
- data.tar.gz: 323b3445c8e320a837165eae9328038c30e93a7b5fad36b6e15a0eed33f25d9b36ba1652688f1268ebb89648565499ce38b4381e3993d689d12cb593abc8488f
6
+ metadata.gz: d17561a8354d0228b2b07b9971bcd8c241097161045d1d7272aab4d6bf7ffc8875e7dc1c2296d259d85ef9904a9980111807fe97b88379d527e937479634c185
7
+ data.tar.gz: 8dd4a106e1a12e27cb594a079fdc715c99d4f47c65143e3901b7abc5e575fbd1eecddee4f3a6c20f579582a370cf9ca28ce75d1d4d94252b9c2f35d5c9b0e37d
@@ -2,10 +2,11 @@
2
2
 
3
3
  module ErrorResponse
4
4
  class Configuration
5
- attr_accessor :yaml_config_path
5
+ attr_accessor :yaml_config_path, :error_message_resolver
6
6
 
7
7
  def initialize
8
8
  @yaml_config_path = ENV["YAML_CONFIG_PATH"] || "config/error_response.yml"
9
+ @error_message_resolver = nil
9
10
  end
10
11
  end
11
12
  end
@@ -6,10 +6,15 @@ module ErrorResponse
6
6
  module Helper
7
7
  extend ActiveSupport::Concern
8
8
 
9
- included do
10
- rescue_from RequestError do |e|
11
- error_response(e.key, e.error_message, e.error_data)
9
+ # Ensure RequestError is always handled by this helper, even when
10
+ # controllers define broad handlers like rescue_from Exception later.
11
+ def rescue_with_handler(exception, *args, **kwargs, &)
12
+ if exception.is_a?(RequestError)
13
+ error_response(exception.key, exception.error_message, exception.error_data)
14
+ return exception
12
15
  end
16
+
17
+ super
13
18
  end
14
19
 
15
20
  def success_response(data = {})
@@ -17,7 +22,13 @@ module ErrorResponse
17
22
  end
18
23
 
19
24
  def error_response(key, error_message = nil, error_data = {})
20
- render_content = ErrorResponse.to_api(key, error_message).deep_dup
25
+ resolved_message = ErrorResponse.resolve_error_message(
26
+ key: key,
27
+ error_message: error_message,
28
+ error_data: error_data,
29
+ context: self
30
+ )
31
+ render_content = ErrorResponse.to_api(key, resolved_message).deep_dup
21
32
  if error_data.is_a?(Hash) && !error_data.empty?
22
33
  render_content[:json] = render_content[:json].merge(error_data)
23
34
  elsif error_data.is_a?(Array) && !error_data.empty?
@@ -9,6 +9,8 @@ require "error_response/helper"
9
9
  require "error_response/request_error"
10
10
 
11
11
  module ErrorResponse
12
+ RESOLVER_KEYWORD_PARAMETER_TYPES = %i[key keyreq keyrest].freeze
13
+
12
14
  class << self
13
15
  attr_writer :configuration
14
16
 
@@ -41,8 +43,25 @@ module ErrorResponse
41
43
  }
42
44
  end
43
45
 
46
+ def resolve_error_message(key:, error_message: nil, error_data: {}, context: nil)
47
+ resolver = configuration.error_message_resolver
48
+ return error_message unless resolver.respond_to?(:call)
49
+
50
+ call_resolver(resolver, key, error_message, error_data, context)
51
+ rescue StandardError
52
+ error_message
53
+ end
54
+
44
55
  private
45
56
 
57
+ def call_resolver(resolver, key, error_message, error_data, context)
58
+ if resolver_parameters(resolver).any? { |parameter| RESOLVER_KEYWORD_PARAMETER_TYPES.include?(parameter[0]) }
59
+ resolver.call(key: key, error_message: error_message, error_data: error_data, context: context)
60
+ else
61
+ resolver.call(key, error_message, error_data, context)
62
+ end
63
+ end
64
+
46
65
  def yaml_hash
47
66
  return @hash unless @hash.nil?
48
67
 
@@ -101,5 +120,11 @@ module ErrorResponse
101
120
  NilClass
102
121
  ]
103
122
  end
123
+
124
+ def resolver_parameters(resolver)
125
+ resolver.parameters
126
+ rescue StandardError
127
+ resolver.method(:call).parameters
128
+ end
104
129
  end
105
130
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: error_response
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.1.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kdan Mobile Software Developer
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: 7.2.3.1
18
+ version: 7.1.6
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: 7.2.3.1
25
+ version: 7.1.6
26
26
  description: use for error_response
27
27
  email: dev@kdanmobile.com
28
28
  executables: []