naranya_ecm-sdk 0.0.50 → 0.0.51

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
  SHA1:
3
- metadata.gz: 8170ec1a6a5f1827bed0f85ca6916888f19c0ec9
4
- data.tar.gz: 2e29be22a0f517996581db3e168e5ab0b7fcfd0e
3
+ metadata.gz: c55ea1f4ccd068045f3c56d2acc2bac64a280b25
4
+ data.tar.gz: 77f6be226eea9535161ce14616c042f0f967d65b
5
5
  SHA512:
6
- metadata.gz: d566ec2b336d5d10438c7a228d1101ce2b9cbcaec62d490367d3b70f4d205a9fb11c359d3e5d41ad06c9acb098d75b88e93ad0728c927e585f7d9288318a3157
7
- data.tar.gz: fe81eeaed663214bd0409408d3b25a44849fb63088720412c93c8c8d851bd6e8f6b96e8a96af50fa8825d7f71abef529042726ebc977af3899d1475239c25c92
6
+ metadata.gz: 1a50a5884274b367d8211a088e53061c9312a27814cc475529c6bde3b7a2d7f1ec1f1769649758a0f8e150dc3fafe1f4ec474fed2b05bbb0df62f79ac8312622
7
+ data.tar.gz: bb4073ba62463c9dfea69a5f204ddb334acc28a53920745fa65fcfc4848839147e1224b6660a684dc8f00ffeadba94c033a4ca07b05e201387787cead05156fc
data/Gemfile CHANGED
@@ -15,3 +15,6 @@ gem 'em-synchrony'
15
15
  gem 'em-http-request'
16
16
  gem 'excon'
17
17
  gem 'httpclient'
18
+
19
+ # New Relic RPM:
20
+ gem 'newrelic_rpm'
@@ -1,3 +1,3 @@
1
1
  module NaranyaEcm
2
- VERSION = "0.0.50"
2
+ VERSION = "0.0.51"
3
3
  end
@@ -12,8 +12,8 @@ module NaranyaEcm::Rest
12
12
  end
13
13
 
14
14
  ##
15
- # Captura un response y genera + avienta una excepción.
16
- def self.raise_by_failed_response(response, message = "")
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
- raise klass.new response, "Server responded with code #{response.status}. Message: #{message}"
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
@@ -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
@@ -1,4 +1,4 @@
1
-
1
+ require "ncontent/sdk/faraday_middleware/request_body_on_environment"
2
2
  require "ncontent/sdk/faraday_middleware/required_response_format"
3
3
  require "ncontent/sdk/faraday_middleware/response_parser"
4
4
  require "ncontent/sdk/faraday_middleware/rest_api_call_benchmark"
@@ -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
- NaranyaEcm::Rest::RestError.raise_by_failed_response(error.response)
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.50
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