error_response 1.2.1 → 1.3.0

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: 7d91963ba5d4748c624399297910694a667f48edd4f92ff482feae57dbd2239c
4
+ data.tar.gz: 6a10d977fb3c2f6cdfdcdcb5e33c932047b5dc5a59d5e682c0b7d9c777d8cfab
5
5
  SHA512:
6
- metadata.gz: b31916fb084528913610380ff58926ee4c59e527e0b2343085cf4042590f49c66ff53e935c1892446a5123d595f37db8897a35c951214ffbea497c3247969637
7
- data.tar.gz: 323b3445c8e320a837165eae9328038c30e93a7b5fad36b6e15a0eed33f25d9b36ba1652688f1268ebb89648565499ce38b4381e3993d689d12cb593abc8488f
6
+ metadata.gz: e4e315d549f078c8c0208587b6df1983d0e941f8b971bb670d7eb86d088a0b14dbe96a9d64a2ebba38bc91536348091abab22fb5ac0b0fe1a84bea4b09f5140c
7
+ data.tar.gz: cb876fa2e569a4f59e8e661c003b1c926c57b6d86fead6e0f457cff079f2a8f4337e855c91971d0f3f1e4750ea06b4f135b587367f75a43aa7b4e0e6d8f2f1ff
@@ -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
@@ -17,7 +17,13 @@ module ErrorResponse
17
17
  end
18
18
 
19
19
  def error_response(key, error_message = nil, error_data = {})
20
- render_content = ErrorResponse.to_api(key, error_message).deep_dup
20
+ resolved_message = ErrorResponse.resolve_error_message(
21
+ key: key,
22
+ error_message: error_message,
23
+ error_data: error_data,
24
+ context: self
25
+ )
26
+ render_content = ErrorResponse.to_api(key, resolved_message).deep_dup
21
27
  if error_data.is_a?(Hash) && !error_data.empty?
22
28
  render_content[:json] = render_content[:json].merge(error_data)
23
29
  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.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kdan Mobile Software Developer