naranya_ecm-sdk 0.0.50 → 0.0.51
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/lib/naranya_ecm-sdk/version.rb +1 -1
- data/lib/naranya_ecm/rest/errors.rb +19 -3
- data/lib/ncontent/sdk/config.rb +4 -0
- data/lib/ncontent/sdk/faraday_middleware.rb +1 -1
- data/lib/ncontent/sdk/faraday_middleware/request_body_on_environment.rb +25 -0
- data/lib/ncontent/sdk/rest_client.rb +33 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c55ea1f4ccd068045f3c56d2acc2bac64a280b25
|
4
|
+
data.tar.gz: 77f6be226eea9535161ce14616c042f0f967d65b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a50a5884274b367d8211a088e53061c9312a27814cc475529c6bde3b7a2d7f1ec1f1769649758a0f8e150dc3fafe1f4ec474fed2b05bbb0df62f79ac8312622
|
7
|
+
data.tar.gz: bb4073ba62463c9dfea69a5f204ddb334acc28a53920745fa65fcfc4848839147e1224b6660a684dc8f00ffeadba94c033a4ca07b05e201387787cead05156fc
|
data/Gemfile
CHANGED
@@ -12,8 +12,8 @@ module NaranyaEcm::Rest
|
|
12
12
|
end
|
13
13
|
|
14
14
|
##
|
15
|
-
# Captura un response y genera
|
16
|
-
def self.
|
15
|
+
# Captura un response y genera una excepción.
|
16
|
+
def self.build_from_failed_response(response, message = "")
|
17
17
|
klass = case response.status
|
18
18
|
when 401 then AuthorizationRequired
|
19
19
|
when 403 then Forbidden
|
@@ -21,7 +21,14 @@ module NaranyaEcm::Rest
|
|
21
21
|
when 422 then UnprocessableEntity
|
22
22
|
else RemoteFailed
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
|
+
klass.new response, "Server responded with code #{response.status}. Message: '#{message}'"
|
26
|
+
end
|
27
|
+
|
28
|
+
##
|
29
|
+
# Captura un response y avienta una excepción.
|
30
|
+
def self.raise_by_failed_response(response, message = "")
|
31
|
+
raise build_from_failed_response(response, message)
|
25
32
|
end
|
26
33
|
|
27
34
|
end
|
@@ -95,6 +102,15 @@ module NaranyaEcm::Rest
|
|
95
102
|
end
|
96
103
|
|
97
104
|
class RemoteFailed < RestError
|
105
|
+
def initialize(given_response, msg = "")
|
106
|
+
response_env = given_response.env
|
107
|
+
|
108
|
+
# Override the message:
|
109
|
+
msg = "Request '#{response_env.method.upcase} #{response_env.url.path}' failed with HTTP status #{response_env.status}."
|
110
|
+
msg += " Request-Body: #{response_env[:request_body]}" if response_env[:request_body].present?
|
111
|
+
msg += " Response-Body: #{given_response.body.inspect}" if given_response.respond_to?(:body) && given_response.body.present?
|
112
|
+
super(given_response, msg)
|
113
|
+
end
|
98
114
|
end
|
99
115
|
|
100
116
|
end
|
data/lib/ncontent/sdk/config.rb
CHANGED
@@ -66,6 +66,10 @@ module NContent
|
|
66
66
|
|
67
67
|
config_accessor(:notification_processing_modules) { [] }
|
68
68
|
|
69
|
+
def new_relic_agent_available?
|
70
|
+
defined?(::NewRelic) && defined?(::NewRelic::Agent)
|
71
|
+
end
|
72
|
+
|
69
73
|
def self.parse_yaml(yaml_path)
|
70
74
|
YAML.load(ERB.new(File.read(yaml_path)).result) if File.exist?(yaml_path)
|
71
75
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module NContent
|
2
|
+
module SDK
|
3
|
+
module FaradayMiddleware
|
4
|
+
|
5
|
+
# Adds the required response format to the request parameters, in order for
|
6
|
+
# the SDK to work:
|
7
|
+
class RequestBodyOnEnvironment < Faraday::Middleware
|
8
|
+
|
9
|
+
def call(request_env)
|
10
|
+
|
11
|
+
# Evitar en peticiones a '/oauth/token' y cuando no exista body.
|
12
|
+
# Típicamente las peticiones GET no tienen body:
|
13
|
+
if request_env.url.path != '/oauth/token' && request_env.respond_to?(:body) && request_env.body.present?
|
14
|
+
request_body = request_env.body
|
15
|
+
end
|
16
|
+
|
17
|
+
@app.call(request_env).on_complete do |response_env|
|
18
|
+
response_env[:request_body] = request_body if request_body.present?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'oauth2'
|
2
2
|
require 'ncontent/sdk/faraday_middleware'
|
3
3
|
require 'singleton'
|
4
|
+
require 'cgi'
|
4
5
|
|
5
6
|
module NContent
|
6
7
|
|
@@ -43,7 +44,36 @@ module NContent
|
|
43
44
|
retry
|
44
45
|
else
|
45
46
|
logger.warn "Not retrying response #{verb.upcase} #{path}."
|
46
|
-
|
47
|
+
|
48
|
+
# Extract from the OAuth::Error the base Faraday response:
|
49
|
+
error_response = error.response.response
|
50
|
+
|
51
|
+
# Build the error that will be raised:
|
52
|
+
error_to_raise = NaranyaEcm::Rest::RestError.build_from_failed_response(error_response)
|
53
|
+
|
54
|
+
# Send unhandled errors to NewRelic:
|
55
|
+
if error_to_raise.is_a?(NaranyaEcm::Rest::RemoteFailed) && config.new_relic_agent_available?
|
56
|
+
|
57
|
+
ncontent_url = error_response.env.url
|
58
|
+
|
59
|
+
# Parsear el query string a hash:
|
60
|
+
ncontent_request_params = CGI.parse ncontent_url.query.to_s
|
61
|
+
|
62
|
+
# Agregar al hash de ncontent_request_params el request_body como hash:
|
63
|
+
if error_response.env.request_headers['Content-Type'] == 'application/json' && error_response.env[:request_body].present?
|
64
|
+
ncontent_request_params.merge! ActiveSupport::JSON.decode(error_response.env[:request_body])
|
65
|
+
end
|
66
|
+
|
67
|
+
::NewRelic::Agent.notice_error(
|
68
|
+
error_to_raise,
|
69
|
+
uri: ncontent_url.to_s.split('?').first, # The URL without query string
|
70
|
+
metric: "Custom/NContent::SDK::RESTClient/#{verb}",
|
71
|
+
request_params: ncontent_request_params
|
72
|
+
)
|
73
|
+
end
|
74
|
+
|
75
|
+
raise error_to_raise
|
76
|
+
|
47
77
|
end
|
48
78
|
end
|
49
79
|
end
|
@@ -80,6 +110,8 @@ module NContent
|
|
80
110
|
|
81
111
|
faraday.response :logger, logger
|
82
112
|
|
113
|
+
faraday.use NContent::SDK::FaradayMiddleware::RequestBodyOnEnvironment
|
114
|
+
|
83
115
|
faraday.use NContent::SDK::FaradayMiddleware::RESTAPICallBenchmark
|
84
116
|
|
85
117
|
faraday.use NContent::SDK::FaradayMiddleware::ResponseParser
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: naranya_ecm-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.51
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roberto Quintanilla
|
@@ -264,6 +264,7 @@ files:
|
|
264
264
|
- lib/ncontent-sdk.rb
|
265
265
|
- lib/ncontent/sdk/config.rb
|
266
266
|
- lib/ncontent/sdk/faraday_middleware.rb
|
267
|
+
- lib/ncontent/sdk/faraday_middleware/request_body_on_environment.rb
|
267
268
|
- lib/ncontent/sdk/faraday_middleware/required_response_format.rb
|
268
269
|
- lib/ncontent/sdk/faraday_middleware/response_parser.rb
|
269
270
|
- lib/ncontent/sdk/faraday_middleware/rest_api_call_benchmark.rb
|