lhc 15.2.0 → 16.0.0.pre.pro2162

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: 00b791317124325a44a99ca08c5cfabb611affd67d38603476151c106b84d924
4
- data.tar.gz: 198d4f707ab907c7209ea1f8bbf41452f46fb3079dbf14a73f243ed37b09d6dc
3
+ metadata.gz: 624333537e8e35fa6ece5b46b1748263e023b439060c8e8b6b7ca0572db52ead
4
+ data.tar.gz: 588b9c2328f9ef96fa6709d6d12580083712e863838cb6e3b75b9dfb2e0efe35
5
5
  SHA512:
6
- metadata.gz: f6955a082a0e31f564f7b4c6243bfd8274e684cb392702f38d81f044d9ccbc9ff20085428d2529e6a48bd3f194ff69c99686c7744ce681ac8234942f1d4830f5
7
- data.tar.gz: 5b11847bfb5f8a9e00797e7c8d87dbd5f9784c6f60cb926d414723fc16faf0fba871ffc6917e63475a6a6a3ae8b49b112b7c6f8fc716a6ee61deaa42d2a040f0
6
+ metadata.gz: d038ab78edbddf4f9d3cd8c4f8dd85285448a79498df99f02e9893bf04a68a80fc17fa286555399752452c1e68701307eb2d45112df1bb31df7f96b81c531b23
7
+ data.tar.gz: d45a0a5e8990644c7748527affe7fcee24f481f10043f6368ca90a5bbe8b76ad6e32fbfecc85e65e8f21765799926576ad815f443b34617540b6da8594f66d2b
data/.rubocop.yml CHANGED
@@ -26,9 +26,6 @@ require:
26
26
  Bundler/OrderedGems:
27
27
  Enabled: false
28
28
 
29
- Gemspec/RequireMFA:
30
- Enabled: false
31
-
32
29
  Lint/SuppressedException:
33
30
  Exclude:
34
31
  - spec/**/*
@@ -263,7 +260,7 @@ Style/CaseLikeIf:
263
260
  Enabled: false
264
261
 
265
262
  Style/HashEachMethods:
266
- Enabled: false
263
+ Enabled: false
267
264
 
268
265
  Style/HashConversion: # (new in 1.10)
269
266
  Enabled: false
@@ -271,9 +268,6 @@ Style/HashConversion: # (new in 1.10)
271
268
  Style/NilLambda: # (new in 1.3)
272
269
  Enabled: false
273
270
 
274
- Style/OpenStructUse:
275
- Enabled: false
276
-
277
271
  RSpec/DescribeClass:
278
272
  Exclude:
279
273
  - spec/views/**/*
data/README.md CHANGED
@@ -618,18 +618,12 @@ Adds the following to body of all requests:
618
618
 
619
619
  ##### Reauthenticate
620
620
 
621
- The current implementation offers only reauthentication for _client access tokens_.
622
- Make sure that your interceptors contain `LHC::Auth` and `LHC::Retry`, whereas `LHC::Retry` comes _after_ `LHC::Auth` in the chain.
623
- Provide the refresh token as following:
624
- ```ruby
625
- LHC.get('http://local.ch', auth: { bearer: -> { access_token }, refresh_client_token: -> { TokenRefreshUtil.client_access_token(true) })
626
- ```
627
- Where `TokenRefreshUtil.client_access_token(true)` forces a refresh of the token and returns the new token. It is also expected that this implementation will handle invalidating caches if necessary.
621
+ The current implementation can only offer reauthenticate for _client access tokens_. For this to work the following has to be given:
628
622
 
629
- You can also set a global `refresh_client_token`. This is not recommended for apps with multiple endpoint and different access tokens.
630
- ```ruby
631
- LHC::Auth.refresh_client_token = -> { TokenRefreshUtil.client_access_token(true) }
632
- ```
623
+ * You have configured and implemented `LHC::Auth.refresh_client_token = -> { TokenRefreshUtil.client_access_token(true) }` which when called will force a refresh of the token and return the new value. It is also expected that this implementation will handle invalidating caches if necessary.
624
+ * Your interceptors contain `LHC::Auth` and `LHC::Retry`, whereas `LHC::Retry` comes _after_ `LHC::Auth` in the chain.
625
+
626
+ ##### Bearer Authentication with client access token
633
627
 
634
628
  Reauthentication will be initiated if:
635
629
 
data/lhc.gemspec CHANGED
@@ -15,7 +15,8 @@ Gem::Specification.new do |s|
15
15
  s.summary = 'Advanced HTTP Client for Ruby, fueled with interceptors'
16
16
  s.description = 'LHC is an extended/advanced HTTP client. Implementing basic http-communication enhancements like interceptors, exception handling, format handling, accessing response data, configuring endpoints and placeholders and fully compatible, RFC-compliant URL-template support.'
17
17
 
18
- s.files = `git ls-files`.split("\n")
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- spec/*`.split("\n")
19
20
  s.require_paths = ['lib']
20
21
 
21
22
  s.requirements << 'Ruby >= 2.0.0'
@@ -23,7 +24,6 @@ Gem::Specification.new do |s|
23
24
 
24
25
  s.add_dependency 'activesupport', '>= 5.2'
25
26
  s.add_dependency 'addressable'
26
- s.add_dependency 'local_uri'
27
27
  s.add_dependency 'typhoeus', '>= 0.11'
28
28
 
29
29
  s.add_development_dependency 'geminabox'
@@ -35,7 +35,6 @@ Gem::Specification.new do |s|
35
35
  s.add_development_dependency 'rubocop', '~> 1.0'
36
36
  s.add_development_dependency 'rubocop-performance', '~> 1.0'
37
37
  s.add_development_dependency 'rubocop-rspec', '~> 1.26.0'
38
- s.add_development_dependency 'sprockets-rails'
39
38
  s.add_development_dependency 'timecop'
40
39
  s.add_development_dependency 'webmock'
41
40
 
data/lib/lhc/error.rb CHANGED
@@ -75,7 +75,7 @@ class LHC::Error < StandardError
75
75
  debug << "Options: #{request.scrubbed_options}"
76
76
  debug << "Headers: #{request.scrubbed_headers}"
77
77
  debug << "Response Code: #{response.code} (#{response.options[:return_code]})"
78
- debug << "Response Options: #{response.scrubbed_options}"
78
+ debug << "Response Options: #{response.options}"
79
79
  debug << response.body
80
80
  debug << _message
81
81
  debug.map { |str| self.class.fix_invalid_encoding(str) }.join("\n")
@@ -39,7 +39,7 @@ class LHC::Auth < LHC::Interceptor
39
39
  set_bearer_authorization_header(token)
40
40
  end
41
41
 
42
- # rubocop:disable Naming/AccessorMethodName
42
+ # rubocop:disable Style/AccessorMethodName
43
43
  def set_authorization_header(value)
44
44
  request.headers['Authorization'] = value
45
45
  end
@@ -50,18 +50,20 @@ class LHC::Auth < LHC::Interceptor
50
50
  end
51
51
 
52
52
  def set_bearer_authorization_header(token)
53
- auth_options = request.options[:auth] || {}
54
- auth_options.merge!(bearer_token: token)
55
- request.options[:auth] = auth_options unless request.options.key?(:auth)
56
-
53
+ request.options[:auth].merge!(bearer_token: token)
57
54
  set_authorization_header("Bearer #{token}")
58
55
  end
59
- # rubocop:enable Naming/AccessorMethodName
56
+ # rubocop:enable Style/AccessorMethodName
60
57
 
61
58
  def reauthenticate!
62
- # refresh token and update header
63
- token = refresh_client_token_option.call
64
- set_bearer_authorization_header(token)
59
+ # refresh access_token
60
+ refresh_client_token_option.call
61
+
62
+ # Now as the token is refreshe
63
+ # we need to use the refreshed bearer token
64
+ # in the authorization header
65
+ bearer_authentication! if auth_options[:bearer]
66
+
65
67
  # trigger LHC::Retry and ensure we do not trigger reauthenticate!
66
68
  # again should it fail another time
67
69
  new_options = request.options.dup
@@ -7,8 +7,8 @@ class LHC::Rollbar < LHC::Interceptor
7
7
  include LHC::FixInvalidEncodingConcern
8
8
 
9
9
  def after_response
10
- return unless Object.const_defined?(:Rollbar)
11
- return unless report?
10
+ return unless Object.const_defined?('Rollbar')
11
+ return if response.success?
12
12
 
13
13
  request = response.request
14
14
  additional_params = request.options.fetch(:rollbar, {})
@@ -29,18 +29,9 @@ class LHC::Rollbar < LHC::Interceptor
29
29
  }.merge additional_params
30
30
  begin
31
31
  Rollbar.warning("Status: #{response.code} URL: #{request.url}", data)
32
- rescue JSON::GeneratorError, Encoding::UndefinedConversionError
32
+ rescue Encoding::UndefinedConversionError
33
33
  sanitized_data = data.deep_transform_values { |value| self.class.fix_invalid_encoding(value) }
34
34
  Rollbar.warning("Status: #{response.code} URL: #{request.url}", sanitized_data)
35
35
  end
36
36
  end
37
-
38
- private
39
-
40
- def report?
41
- return false if response.success?
42
- return false if response.request.error_ignored?
43
-
44
- true
45
- end
46
37
  end
data/lib/lhc/request.rb CHANGED
@@ -72,7 +72,6 @@ class LHC::Request
72
72
 
73
73
  def scrubbed_options
74
74
  scrubbed_options = options.deep_dup
75
- scrubbed_options[:cache] = LHC::CacheScrubber.new(scrubbed_options[:cache]).scrubbed
76
75
  scrubbed_options[:params] = LHC::ParamsScrubber.new(scrubbed_options[:params]).scrubbed
77
76
  scrubbed_options[:headers] = LHC::HeadersScrubber.new(scrubbed_options[:headers], scrubbed_options[:auth]).scrubbed
78
77
  scrubbed_options[:auth] = LHC::AuthScrubber.new(scrubbed_options[:auth]).scrubbed
data/lib/lhc/response.rb CHANGED
@@ -54,12 +54,6 @@ class LHC::Response
54
54
  request.format
55
55
  end
56
56
 
57
- def scrubbed_options
58
- scrubbed_options = options.deep_dup
59
- scrubbed_options[:effective_url] = LHC::EffectiveUrlScrubber.new(scrubbed_options[:effective_url]).scrubbed
60
- scrubbed_options
61
- end
62
-
63
57
  private
64
58
 
65
59
  attr_accessor :raw
data/lib/lhc/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LHC
4
- VERSION ||= '15.2.0'
4
+ VERSION ||= '16.0.0-pro2162'
5
5
  end
data/lib/lhc.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'local_uri'
4
3
  require 'typhoeus'
5
4
  require 'active_support/core_ext/object/blank'
6
5
  require 'active_support/core_ext/hash/keys'
@@ -120,10 +119,6 @@ module LHC
120
119
  'lhc/scrubbers/auth_scrubber'
121
120
  autoload :BodyScrubber,
122
121
  'lhc/scrubbers/body_scrubber'
123
- autoload :CacheScrubber,
124
- 'lhc/scrubbers/cache_scrubber'
125
- autoload :EffectiveUrlScrubber,
126
- 'lhc/scrubbers/effective_url_scrubber'
127
122
  autoload :HeadersScrubber,
128
123
  'lhc/scrubbers/headers_scrubber'
129
124
  autoload :ParamsScrubber,
@@ -15,7 +15,7 @@ describe LHC::Error do
15
15
  expect { "#{valid} #{invalid}" }.to raise_error Encoding::CompatibilityError
16
16
  end
17
17
  it 'to_json on an array raises an error' do
18
- expect { [valid, invalid].to_json }.to raise_error JSON::GeneratorError
18
+ expect { [valid, invalid].to_json }.to raise_error Encoding::UndefinedConversionError
19
19
  end
20
20
 
21
21
  it 'to_s on a hash does not raise an error' do
@@ -23,7 +23,7 @@ describe LHC::Error do
23
23
  end
24
24
 
25
25
  it 'to_json on a hash does raise an error' do
26
- expect { { valid: valid, invalid: invalid }.to_json }.to raise_error JSON::GeneratorError
26
+ expect { { valid: valid, invalid: invalid }.to_json }.to raise_error Encoding::UndefinedConversionError
27
27
  end
28
28
  end
29
29
 
@@ -55,12 +55,10 @@ describe LHC::Error do
55
55
  end
56
56
 
57
57
  let(:response) do
58
- options = { return_code: :internal_error, response_headers: "" }
59
58
  double('LHC::Response',
60
59
  request: request,
61
60
  code: 500,
62
- options: options,
63
- scrubbed_options: options,
61
+ options: { return_code: :internal_error, response_headers: "" },
64
62
  body: '{"status":500,"message":"undefined"}')
65
63
  end
66
64
 
@@ -5,7 +5,10 @@ require 'rails_helper'
5
5
  describe LHC::Auth do
6
6
  let(:initial_token) { '123456' }
7
7
  let(:refresh_token) { 'abcdef' }
8
- let(:options) { { bearer: initial_token, refresh_client_token: -> { refresh_token } } }
8
+
9
+ let(:options) do
10
+ { bearer: -> { DummyAuthentication.access_token }, refresh_client_token: -> { DummyAuthentication.refresh_token } }
11
+ end
9
12
  let!(:auth_failing) do
10
13
  stub_request(:get, 'http://local.ch')
11
14
  .with(headers: { 'Authorization' => "Bearer #{initial_token}" })
@@ -17,6 +20,23 @@ describe LHC::Auth do
17
20
  end
18
21
 
19
22
  before(:each) do
23
+ class DummyAuthentication
24
+
25
+ def self.refresh_token
26
+ # updates access_token
27
+ end
28
+
29
+ def self.access_token
30
+ # this is used as bearer token
31
+ end
32
+ end
33
+
34
+ # It does not matter what value this method returns it is not use by LHC.
35
+ # That method needs just to make sure that the value of the access_token
36
+ # is the new valid token
37
+ allow(DummyAuthentication).to receive(:refresh_token).and_return(nil)
38
+
39
+ allow(DummyAuthentication).to receive(:access_token).and_return(initial_token, refresh_token)
20
40
  LHC.config.interceptors = [LHC::Auth, LHC::Retry]
21
41
  end
22
42
 
@@ -27,27 +47,6 @@ describe LHC::Auth do
27
47
  expect(auth_suceeding_after_recovery).to have_been_made.once
28
48
  end
29
49
 
30
- context 'without `auth` options' do
31
- let(:headers) do
32
- { 'Authorization' => "Bearer #{initial_token}" }
33
- end
34
-
35
- before do
36
- LHC::Auth.refresh_client_token = -> { refresh_token }
37
- end
38
-
39
- after do
40
- LHC::Auth.refresh_client_token = -> { nil }
41
- end
42
-
43
- it 'recovery is attempted' do
44
- LHC.config.endpoint(:local, 'http://local.ch')
45
- # the retried request (with updated Bearer), that should work
46
- LHC.get(:local, { headers: headers })
47
- expect(auth_suceeding_after_recovery).to have_been_made.once
48
- end
49
- end
50
-
51
50
  it "recovery is not attempted again when the request has reauthenticated: true " do
52
51
  LHC.config.endpoint(:local, 'http://local.ch', auth: options.merge(reauthenticated: true))
53
52
  expect { LHC.get(:local) }.to raise_error(LHC::Unauthorized)
@@ -9,7 +9,7 @@ describe LHC::Rollbar do
9
9
 
10
10
  context 'Rollbar is undefined' do
11
11
  before(:each) do
12
- Object.send(:remove_const, 'Rollbar') if Object.const_defined?(:Rollbar)
12
+ Object.send(:remove_const, 'Rollbar') if Object.const_defined?('Rollbar')
13
13
  end
14
14
  it 'does not report' do
15
15
  stub_request(:get, 'http://local.ch').to_return(status: 400)
@@ -65,24 +65,5 @@ describe LHC::Rollbar do
65
65
  request: hash_including(url: anything, method: anything, headers: hash_including(private_key: LHC::Scrubber::SCRUB_DISPLAY), params: { api_key: LHC::Scrubber::SCRUB_DISPLAY })
66
66
  )
67
67
  end
68
-
69
- context 'ignored errors' do
70
- it 'does not report to rollbar if the error is ignored' do
71
- stub_request(:get, 'http://local.ch').to_return(status: 404)
72
- LHC.get('http://local.ch', ignore: [LHC::NotFound])
73
- expect(::Rollbar).not_to have_received(:warning)
74
- end
75
-
76
- it 'does report to rollbar' do
77
- stub_request(:get, 'http://local.ch').to_return(status: 400)
78
- expect(-> { LHC.get('http://local.ch', ignore: [LHC::NotFound]) }).to raise_error LHC::BadRequest
79
- expect(::Rollbar).not_to have_received(:warning)
80
- .with(
81
- 'Status: 400 URL: http://local.ch',
82
- response: hash_including(body: anything, code: anything, headers: anything, time: anything, timeout?: anything),
83
- request: hash_including(url: anything, method: anything, headers: hash_including(private_key: LHC::Scrubber::SCRUB_DISPLAY), params: { api_key: LHC::Scrubber::SCRUB_DISPLAY })
84
- )
85
- end
86
- end
87
68
  end
88
69
  end
@@ -18,12 +18,9 @@ describe LHC::Request do
18
18
  let(:params) { { api_key: 'api-key-params' } }
19
19
  let(:headers) { { private_key: 'private-key-header' } }
20
20
  let(:body) { { user_token: 'user-token-body' } }
21
- let(:cache) do
22
- { key: "LHS_REQUEST_CYCLE_CACHE(v1) POST http://local.ch?#{params}" }
23
- end
24
21
 
25
22
  let(:request) do
26
- response = LHC.post(:local, params: params, headers: headers, body: body, cache: cache)
23
+ response = LHC.post(:local, params: params, headers: headers, body: body)
27
24
  response.request
28
25
  end
29
26
 
@@ -33,8 +30,6 @@ describe LHC::Request do
33
30
  expect(request.scrubbed_options[:body]).to include(user_token: LHC::Scrubber::SCRUB_DISPLAY)
34
31
  expect(request.scrubbed_options[:auth][:bearer_token]).to eq(LHC::Scrubber::SCRUB_DISPLAY)
35
32
  expect(request.scrubbed_options[:auth][:basic]).to be nil
36
- expect(request.scrubbed_options[:cache])
37
- .to include(key: "LHS_REQUEST_CYCLE_CACHE(v1) POST http://local.ch?{:api_key=>\"[FILTERED]\"}")
38
33
  end
39
34
 
40
35
  context 'when bearer auth is not a proc' do
@@ -58,19 +53,6 @@ describe LHC::Request do
58
53
  end
59
54
  end
60
55
 
61
- context 'when parameter should not get scrubbed' do
62
- let(:params) { { any_parameter: 'any-parameter' } }
63
-
64
- let(:cache) do
65
- { key: "LHS_REQUEST_CYCLE_CACHE(v1) POST http://local.ch?#{params}" }
66
- end
67
-
68
- it 'does not scrubb the parameter' do
69
- expect(request.scrubbed_options[:cache])
70
- .to include(key: "LHS_REQUEST_CYCLE_CACHE(v1) POST http://local.ch?#{params}")
71
- end
72
- end
73
-
74
56
  context 'when body data is nested' do
75
57
  let(:body) do
76
58
  {
@@ -122,8 +104,6 @@ describe LHC::Request do
122
104
  expect(request.scrubbed_options[:headers]).not_to include(private_key: LHC::Scrubber::SCRUB_DISPLAY)
123
105
  expect(request.scrubbed_options[:body]).not_to include(user_token: LHC::Scrubber::SCRUB_DISPLAY)
124
106
  expect(request.scrubbed_options[:auth][:bearer_token]).not_to eq(LHC::Scrubber::SCRUB_DISPLAY)
125
- expect(request.scrubbed_options[:cache])
126
- .not_to include(key: "LHS_REQUEST_CYCLE_CACHE(v1) POST http://local.ch?{:api_key=>\"[FILTERED]\"}")
127
107
  end
128
108
  end
129
109
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lhc
3
3
  version: !ruby/object:Gem::Version
4
- version: 15.2.0
4
+ version: 16.0.0.pre.pro2162
5
5
  platform: ruby
6
6
  authors:
7
7
  - https://github.com/local-ch/lhc/contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-14 00:00:00.000000000 Z
11
+ date: 2021-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: local_uri
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: typhoeus
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -192,20 +178,6 @@ dependencies:
192
178
  - - "~>"
193
179
  - !ruby/object:Gem::Version
194
180
  version: 1.26.0
195
- - !ruby/object:Gem::Dependency
196
- name: sprockets-rails
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - ">="
200
- - !ruby/object:Gem::Version
201
- version: '0'
202
- type: :development
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - ">="
207
- - !ruby/object:Gem::Version
208
- version: '0'
209
181
  - !ruby/object:Gem::Dependency
210
182
  name: timecop
211
183
  requirement: !ruby/object:Gem::Requirement
@@ -301,8 +273,6 @@ files:
301
273
  - lib/lhc/scrubber.rb
302
274
  - lib/lhc/scrubbers/auth_scrubber.rb
303
275
  - lib/lhc/scrubbers/body_scrubber.rb
304
- - lib/lhc/scrubbers/cache_scrubber.rb
305
- - lib/lhc/scrubbers/effective_url_scrubber.rb
306
276
  - lib/lhc/scrubbers/headers_scrubber.rb
307
277
  - lib/lhc/scrubbers/params_scrubber.rb
308
278
  - lib/lhc/test/cache_helper.rb
@@ -431,7 +401,6 @@ files:
431
401
  - spec/response/effective_url_spec.rb
432
402
  - spec/response/headers_spec.rb
433
403
  - spec/response/options_spec.rb
434
- - spec/response/scrubbed_options_spec.rb
435
404
  - spec/response/success_spec.rb
436
405
  - spec/response/time_spec.rb
437
406
  - spec/spec_helper.rb
@@ -458,13 +427,147 @@ required_ruby_version: !ruby/object:Gem::Requirement
458
427
  version: '2.7'
459
428
  required_rubygems_version: !ruby/object:Gem::Requirement
460
429
  requirements:
461
- - - ">="
430
+ - - ">"
462
431
  - !ruby/object:Gem::Version
463
- version: '0'
432
+ version: 1.3.1
464
433
  requirements:
465
434
  - Ruby >= 2.0.0
466
435
  rubygems_version: 3.1.4
467
436
  signing_key:
468
437
  specification_version: 4
469
438
  summary: Advanced HTTP Client for Ruby, fueled with interceptors
470
- test_files: []
439
+ test_files:
440
+ - spec/basic_methods/delete_spec.rb
441
+ - spec/basic_methods/get_spec.rb
442
+ - spec/basic_methods/post_spec.rb
443
+ - spec/basic_methods/put_spec.rb
444
+ - spec/basic_methods/request_spec.rb
445
+ - spec/basic_methods/request_without_rails_spec.rb
446
+ - spec/config/endpoints_spec.rb
447
+ - spec/config/placeholders_spec.rb
448
+ - spec/config/scrubs_spec.rb
449
+ - spec/core_ext/hash/deep_transform_values_spec.rb
450
+ - spec/dummy/README.rdoc
451
+ - spec/dummy/Rakefile
452
+ - spec/dummy/app/assets/config/manifest.js
453
+ - spec/dummy/app/assets/images/.keep
454
+ - spec/dummy/app/assets/javascripts/application.js
455
+ - spec/dummy/app/assets/stylesheets/application.css
456
+ - spec/dummy/app/controllers/application_controller.rb
457
+ - spec/dummy/app/controllers/concerns/.keep
458
+ - spec/dummy/app/helpers/application_helper.rb
459
+ - spec/dummy/app/mailers/.keep
460
+ - spec/dummy/app/models/.keep
461
+ - spec/dummy/app/models/concerns/.keep
462
+ - spec/dummy/app/views/layouts/application.html.erb
463
+ - spec/dummy/bin/bundle
464
+ - spec/dummy/bin/rails
465
+ - spec/dummy/bin/rake
466
+ - spec/dummy/config.ru
467
+ - spec/dummy/config/application.rb
468
+ - spec/dummy/config/boot.rb
469
+ - spec/dummy/config/environment.rb
470
+ - spec/dummy/config/environments/development.rb
471
+ - spec/dummy/config/environments/production.rb
472
+ - spec/dummy/config/environments/test.rb
473
+ - spec/dummy/config/initializers/assets.rb
474
+ - spec/dummy/config/initializers/backtrace_silencers.rb
475
+ - spec/dummy/config/initializers/cookies_serializer.rb
476
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
477
+ - spec/dummy/config/initializers/inflections.rb
478
+ - spec/dummy/config/initializers/mime_types.rb
479
+ - spec/dummy/config/initializers/session_store.rb
480
+ - spec/dummy/config/initializers/wrap_parameters.rb
481
+ - spec/dummy/config/locales/en.yml
482
+ - spec/dummy/config/routes.rb
483
+ - spec/dummy/config/secrets.yml
484
+ - spec/dummy/lib/assets/.keep
485
+ - spec/dummy/log/.keep
486
+ - spec/dummy/public/404.html
487
+ - spec/dummy/public/422.html
488
+ - spec/dummy/public/500.html
489
+ - spec/dummy/public/favicon.ico
490
+ - spec/dummy/tmp/cache/.gitkeep
491
+ - spec/endpoint/compile_spec.rb
492
+ - spec/endpoint/match_spec.rb
493
+ - spec/endpoint/placeholders_spec.rb
494
+ - spec/endpoint/remove_interpolated_params_spec.rb
495
+ - spec/endpoint/values_as_params_spec.rb
496
+ - spec/error/dup_spec.rb
497
+ - spec/error/find_spec.rb
498
+ - spec/error/response_spec.rb
499
+ - spec/error/timeout_spec.rb
500
+ - spec/error/to_s_spec.rb
501
+ - spec/formats/form_spec.rb
502
+ - spec/formats/json_spec.rb
503
+ - spec/formats/multipart_spec.rb
504
+ - spec/formats/plain_spec.rb
505
+ - spec/interceptors/after_request_spec.rb
506
+ - spec/interceptors/after_response_spec.rb
507
+ - spec/interceptors/auth/basic_auth_spec.rb
508
+ - spec/interceptors/auth/bearer_spec.rb
509
+ - spec/interceptors/auth/body_spec.rb
510
+ - spec/interceptors/auth/long_basic_auth_credentials_spec.rb
511
+ - spec/interceptors/auth/no_instance_var_for_options_spec.rb
512
+ - spec/interceptors/auth/reauthentication_configuration_spec.rb
513
+ - spec/interceptors/auth/reauthentication_spec.rb
514
+ - spec/interceptors/before_request_spec.rb
515
+ - spec/interceptors/before_response_spec.rb
516
+ - spec/interceptors/caching/hydra_spec.rb
517
+ - spec/interceptors/caching/main_spec.rb
518
+ - spec/interceptors/caching/methods_spec.rb
519
+ - spec/interceptors/caching/multilevel_cache_spec.rb
520
+ - spec/interceptors/caching/options_spec.rb
521
+ - spec/interceptors/caching/parameters_spec.rb
522
+ - spec/interceptors/caching/response_status_spec.rb
523
+ - spec/interceptors/caching/to_cache_spec.rb
524
+ - spec/interceptors/default_interceptors_spec.rb
525
+ - spec/interceptors/default_timeout/main_spec.rb
526
+ - spec/interceptors/define_spec.rb
527
+ - spec/interceptors/dup_spec.rb
528
+ - spec/interceptors/logging/main_spec.rb
529
+ - spec/interceptors/monitoring/caching_spec.rb
530
+ - spec/interceptors/monitoring/main_spec.rb
531
+ - spec/interceptors/prometheus_spec.rb
532
+ - spec/interceptors/response_competition_spec.rb
533
+ - spec/interceptors/retry/main_spec.rb
534
+ - spec/interceptors/return_response_spec.rb
535
+ - spec/interceptors/rollbar/invalid_encoding_spec.rb
536
+ - spec/interceptors/rollbar/main_spec.rb
537
+ - spec/interceptors/throttle/main_spec.rb
538
+ - spec/interceptors/throttle/reset_track_spec.rb
539
+ - spec/interceptors/zipkin/distributed_tracing_spec.rb
540
+ - spec/rails_helper.rb
541
+ - spec/request/body_spec.rb
542
+ - spec/request/encoding_spec.rb
543
+ - spec/request/error_handling_spec.rb
544
+ - spec/request/headers_spec.rb
545
+ - spec/request/ignore_errors_spec.rb
546
+ - spec/request/option_dup_spec.rb
547
+ - spec/request/parallel_requests_spec.rb
548
+ - spec/request/params_encoding_spec.rb
549
+ - spec/request/request_without_rails_spec.rb
550
+ - spec/request/scrubbed_headers_spec.rb
551
+ - spec/request/scrubbed_options_spec.rb
552
+ - spec/request/scrubbed_params_spec.rb
553
+ - spec/request/url_patterns_spec.rb
554
+ - spec/request/user_agent_spec.rb
555
+ - spec/request/user_agent_without_rails_spec.rb
556
+ - spec/response/body_spec.rb
557
+ - spec/response/code_spec.rb
558
+ - spec/response/data_accessor_spec.rb
559
+ - spec/response/data_spec.rb
560
+ - spec/response/effective_url_spec.rb
561
+ - spec/response/headers_spec.rb
562
+ - spec/response/options_spec.rb
563
+ - spec/response/success_spec.rb
564
+ - spec/response/time_spec.rb
565
+ - spec/spec_helper.rb
566
+ - spec/support/fixtures/json/feedback.json
567
+ - spec/support/fixtures/json/feedbacks.json
568
+ - spec/support/fixtures/json/localina_content_ad.json
569
+ - spec/support/load_json.rb
570
+ - spec/support/reset_config.rb
571
+ - spec/support/zipkin_mock.rb
572
+ - spec/timeouts/no_signal_spec.rb
573
+ - spec/timeouts/timings_spec.rb
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class LHC::CacheScrubber < LHC::Scrubber
4
- def initialize(data)
5
- super(data)
6
- scrub_cache_options!
7
- end
8
-
9
- private
10
-
11
- def scrub_cache_options!
12
- return if scrubbed.blank?
13
- return if scrub_elements.blank?
14
-
15
- scrub_cache_key!
16
- end
17
-
18
- def scrub_cache_key!
19
- return if scrubbed[:key].blank?
20
-
21
- scrub_elements.each do |scrub_element|
22
- matches = scrubbed[:key].match(/:#{scrub_element}=>"(.*?)"/)
23
- next if matches.nil?
24
-
25
- value = matches[-1]
26
- scrubbed[:key].gsub!(value, SCRUB_DISPLAY)
27
- end
28
- end
29
-
30
- def scrub_elements
31
- # The cache key includes the whole request url inklusive params.
32
- # We need to scrub those params from the cache key.
33
- LHC.config.scrubs[:params]
34
- end
35
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class LHC::EffectiveUrlScrubber < LHC::Scrubber
4
- def initialize(data)
5
- super(data)
6
- scrub_effective_url_options!
7
- end
8
-
9
- private
10
-
11
- def scrub_effective_url_options!
12
- return if scrubbed.blank?
13
- return if scrub_elements.blank?
14
-
15
- scrub_effective_url!
16
- end
17
-
18
- def scrub_effective_url!
19
- return if scrubbed.blank?
20
-
21
- scrub_elements.each do |scrub_element|
22
- uri = LocalUri::URI.new(scrubbed)
23
- self.scrubbed = CGI.unescape(uri.query.merge(scrub_element => SCRUB_DISPLAY).to_s)
24
- end
25
- end
26
-
27
- def scrub_elements
28
- # The effective url includes the params of the request
29
- # so we need to scrub those params from the effective url.
30
- LHC.config.scrubs[:params]
31
- end
32
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- describe LHC::Response do
6
- let(:options) do
7
- { effective_url: 'http://local.ch?api_key=api-key' }
8
- end
9
-
10
- let(:raw_response) { OpenStruct.new(options: options) }
11
-
12
- before do
13
- LHC.config.scrubs[:params] << 'api_key'
14
- end
15
-
16
- it 'scrubbes effective url' do
17
- response = LHC::Response.new(raw_response, nil)
18
- expect(response.scrubbed_options[:effective_url]).to eq "http://local.ch?api_key=#{LHC::Scrubber::SCRUB_DISPLAY}"
19
- end
20
- end