finapps_core 6.0.0 → 6.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95f8aa98b4a17b4497c2940488e03953b5898ee1d3dfcb2fee61d537484075bf
4
- data.tar.gz: 84c70cff196aec1f0b31a534e5c7c3b142f68ba308506ed823a654e89da182b6
3
+ metadata.gz: d18e32588446fcca7dbf1e07e819e278d3d2abb4bf75207eba374b5c60c5f14c
4
+ data.tar.gz: 0f7f59132bdf40f76b80925390bacb4067be4a3604d45a0defdbd3f3dbe5b298
5
5
  SHA512:
6
- metadata.gz: 82aa422c010d8eaa84b5b12f886107ac096b64dbedd07d50ec218ceced322d1fefb72b11cc3bff6a60f4bf466f09918bb081dab9a062ac51adfca2c54d0a2ce3
7
- data.tar.gz: 790061688554488ec8fdd3c8522409a1a61813f8063bfdb1083be32305b0a01eb3c6a0c1f60931364112521e71fcbbe846572ee7e8c86a1fd76a47265d977db5
6
+ metadata.gz: 3278d2d0ca52fcf1042923b9fe641b112b2c7956062e81527c84b5e24d3805df7479b233ded5c2e5c2fa96a7c2457107ee52afdf1c783f3a307c7b0626ad5cef
7
+ data.tar.gz: d845efa3086595a6b5c024a91a6755d92fe24fa3e85e79cc530074d4469b861c2e54c133289a19762b2c126145d2e01f9891da4617b99d98490c60af6380171e
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday/logging/formatter'
4
+
5
+ module FinAppsCore
6
+ module Logging
7
+ class ContenTypeFormatter < Faraday::Logging::Formatter
8
+ CONTENT_TYPE = 'Content-Type' unless defined?(ContenTypeFormatter::CONTENT_TYPE)
9
+
10
+ def response(env)
11
+ status = proc { "Status #{env.status}" }
12
+ public_send(log_level, 'response', &status)
13
+
14
+ log_headers('response', env.response_headers) if log_headers?(:response)
15
+ log_body('response', env[:body]) if env[:body] && log_body?(:response) && loggable?(env)
16
+ end
17
+
18
+ private
19
+
20
+ def loggable?(env)
21
+ loggable_types = ['application/json', 'text/plain']
22
+ process_response_type?(env, loggable_types)
23
+ end
24
+
25
+ def process_response_type?(env, content_types)
26
+ type = response_type(env)
27
+ content_types.empty? || content_types.any? do |pattern|
28
+ pattern.is_a?(Regexp) ? type.match?(pattern) : type == pattern
29
+ end
30
+ end
31
+
32
+ def response_type(env)
33
+ type = env[:response_headers][CONTENT_TYPE].to_s
34
+ type = type.split(';', 2).first if type.index(';')
35
+ type
36
+ end
37
+ end
38
+ end
39
+ end
@@ -27,7 +27,7 @@ module FinAppsCore
27
27
  def assign_attributes(new_attributes)
28
28
  unless new_attributes.respond_to?(:each_pair)
29
29
  fail ArgumentError, 'When assigning attributes, '\
30
- "you must pass a hash argument, #{new_attributes.class} passed."
30
+ "you must pass a hash argument, #{new_attributes.class} passed."
31
31
  end
32
32
  return if new_attributes.empty?
33
33
 
@@ -19,7 +19,10 @@ module FinAppsCore
19
19
  end
20
20
 
21
21
  def init_connection_response(conn, logger)
22
- conn.response :logger, logger, bodies: true
22
+ conn.response :logger, logger, bodies: true,
23
+ headers: true,
24
+ formatter: FinAppsCore::Logging::ContenTypeFormatter,
25
+ log_level: :debug
23
26
  conn.response :json,
24
27
  content_type: /\bjson$/,
25
28
  parser_options: {symbolize_names: true}
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FinAppsCore
4
- VERSION = '6.0.0'
4
+ VERSION = '6.0.1'
5
5
  end
data/lib/finapps_core.rb CHANGED
@@ -12,6 +12,8 @@ require 'finapps_core/utils/loggeable'
12
12
  require 'finapps_core/utils/validatable'
13
13
  require 'finapps_core/error'
14
14
 
15
+ require 'finapps_core/logging/content_type_formatter'
16
+
15
17
  require 'finapps_core/middleware/request/tenant_authentication'
16
18
  require 'finapps_core/middleware/request/no_encoding_basic_authentication'
17
19
  require 'finapps_core/middleware/request/accept_json'
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'stringio'
4
+ require 'logger'
5
+
6
+ RSpec.describe Faraday::Response::Logger do
7
+ let(:string_io) { StringIO.new }
8
+ let(:logger) { Logger.new(string_io) }
9
+ let(:conn) do
10
+ rubbles = %w(Barney Betty)
11
+ logger_options = {
12
+ bodies: true,
13
+ formatter: FinAppsCore::Logging::ContenTypeFormatter
14
+ }
15
+
16
+ Faraday.new do |b|
17
+ b.response :logger, logger, logger_options
18
+ b.adapter :test do |stubs|
19
+ stubs.get('/text') { [200, {'Content-Type' => 'text/plain'}, 'hello'] }
20
+ stubs.get('/json') { [200, {'Content-Type' => 'application/json'}, rubbles] }
21
+ stubs.get('/pdf') { [200, {'Content-Type' => 'application/pdf'}, 'binary-here'] }
22
+ end
23
+ end
24
+ end
25
+
26
+ before do
27
+ logger.level = Logger::DEBUG
28
+ end
29
+
30
+ context 'when content type is text/plain' do
31
+ before { conn.get '/text' }
32
+
33
+ it 'logs response body' do
34
+ expect(string_io.string).to match('hello')
35
+ end
36
+ end
37
+
38
+ context 'when content type is application/json' do
39
+ before { conn.get '/json' }
40
+
41
+ it 'logs response body' do
42
+ expect(string_io.string).to match('[\"Barney\", \"Betty\"]')
43
+ end
44
+ end
45
+
46
+ context 'when content type is something else' do
47
+ before { conn.get '/pdf' }
48
+
49
+ it 'does not log response body' do
50
+ expect(string_io.string).not_to match('binary-here')
51
+ end
52
+ end
53
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: finapps_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0
4
+ version: 6.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erich Quintero
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-28 00:00:00.000000000 Z
11
+ date: 2021-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -299,6 +299,7 @@ files:
299
299
  - lib/core_extensions/string/json_to_hash.rb
300
300
  - lib/finapps_core.rb
301
301
  - lib/finapps_core/error.rb
302
+ - lib/finapps_core/logging/content_type_formatter.rb
302
303
  - lib/finapps_core/middleware/middleware.rb
303
304
  - lib/finapps_core/middleware/request/accept_json.rb
304
305
  - lib/finapps_core/middleware/request/no_encoding_basic_authentication.rb
@@ -319,6 +320,7 @@ files:
319
320
  - lib/finapps_core/version.rb
320
321
  - lib/tasks/releaser.rake
321
322
  - spec/core_extensions/object/is_integer_spec.rb
323
+ - spec/logging/conten_type_formatter_spec.rb
322
324
  - spec/middleware/request/accept_json_spec.rb
323
325
  - spec/middleware/request/no_encoding_basic_authentication_spec.rb
324
326
  - spec/middleware/request/request_id_spec.rb
@@ -372,21 +374,22 @@ signing_key:
372
374
  specification_version: 4
373
375
  summary: FinApps REST API ruby client - Core.
374
376
  test_files:
375
- - spec/core_extensions/object/is_integer_spec.rb
376
- - spec/support/fake_api.rb
377
- - spec/spec_helper.rb
377
+ - spec/rest/base_client_spec.rb
378
+ - spec/rest/defaults_spec.rb
379
+ - spec/rest/configuration_spec.rb
380
+ - spec/rest/resources_spec.rb
381
+ - spec/rest/credentials_spec.rb
378
382
  - spec/spec_helpers/client.rb
379
383
  - spec/middleware/request/user_agent_spec.rb
384
+ - spec/middleware/request/request_id_spec.rb
380
385
  - spec/middleware/request/x_consumer_id_spec.rb
381
- - spec/middleware/request/accept_json_spec.rb
382
386
  - spec/middleware/request/x_tenant_id_spec.rb
383
387
  - spec/middleware/request/tenant_authentication_spec.rb
388
+ - spec/middleware/request/accept_json_spec.rb
384
389
  - spec/middleware/request/no_encoding_basic_authentication_spec.rb
385
- - spec/middleware/request/request_id_spec.rb
386
390
  - spec/middleware/response/raise_error_spec.rb
391
+ - spec/support/fake_api.rb
392
+ - spec/core_extensions/object/is_integer_spec.rb
393
+ - spec/logging/conten_type_formatter_spec.rb
394
+ - spec/spec_helper.rb
387
395
  - spec/utils/validatable_spec.rb
388
- - spec/rest/configuration_spec.rb
389
- - spec/rest/resources_spec.rb
390
- - spec/rest/credentials_spec.rb
391
- - spec/rest/defaults_spec.rb
392
- - spec/rest/base_client_spec.rb