finapps_core 6.0.0 → 6.0.1

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: 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