lhc 3.5.4 → 3.5.5
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 +4 -4
- data/README.md +4 -0
- data/lhc.gemspec +3 -1
- data/lib/lhc/endpoint.rb +1 -1
- data/lib/lhc/version.rb +1 -1
- data/non_rails_spec/request/request_spec.rb +3 -3
- data/spec/basic_methods/delete_spec.rb +3 -3
- data/spec/basic_methods/post_spec.rb +5 -5
- data/spec/basic_methods/put_spec.rb +5 -5
- data/spec/basic_methods/request_spec.rb +1 -1
- data/spec/config/endpoints_spec.rb +12 -12
- data/spec/config/placeholders_spec.rb +8 -8
- data/spec/endpoint/compile_spec.rb +17 -3
- data/spec/endpoint/match_spec.rb +2 -2
- data/spec/endpoint/placeholders_spec.rb +1 -1
- data/spec/endpoint/remove_interpolated_params_spec.rb +1 -1
- data/spec/endpoint/values_as_params_spec.rb +1 -1
- data/spec/error/find_spec.rb +36 -36
- data/spec/interceptors/after_request_spec.rb +2 -2
- data/spec/interceptors/after_response_spec.rb +2 -2
- data/spec/interceptors/before_request_spec.rb +2 -2
- data/spec/interceptors/before_response_spec.rb +2 -2
- data/spec/interceptors/default_interceptors_spec.rb +2 -2
- data/spec/interceptors/define_spec.rb +4 -4
- data/spec/interceptors/response_competition_spec.rb +3 -3
- data/spec/interceptors/return_response_spec.rb +3 -3
- data/spec/response/body_spec.rb +1 -1
- data/spec/response/code_spec.rb +1 -1
- data/spec/response/effective_url_spec.rb +1 -1
- data/spec/response/headers_spec.rb +1 -1
- data/spec/response/options_spec.rb +1 -1
- data/spec/response/success_spec.rb +2 -2
- data/spec/response/time_spec.rb +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bd96d437b05df955ff37aed6c1bea4c6c3a68ff
|
4
|
+
data.tar.gz: 6fa74559274820bf6cecca05fc6deb4620483529
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a46627d6d00ea9193860f8cab7e8beaace7c514992cccc803baa36ed050112667445c7cd683f9c95e1d19703dc2e0fd47feb969d09e1d770b9c5bcd4be7b9bb0
|
7
|
+
data.tar.gz: 1ea0e5bd2384dc033d38f93a20227160de7c6512b4ff9322c3f2800237ce9db354ea88489ee761938580295ddceab2e70a325852f4c5649670fdfd2fc71b958d
|
data/README.md
CHANGED
@@ -124,3 +124,7 @@ To monitor and manipulate the http communication done with LHC, you can define i
|
|
124
124
|
```
|
125
125
|
|
126
126
|
→ [Read more about interceptors](docs/interceptors.md)
|
127
|
+
|
128
|
+
## License
|
129
|
+
|
130
|
+
[GNU Affero General Public License Version 3.](https://www.gnu.org/licenses/agpl-3.0.en.html)
|
data/lhc.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.email = ['ws-operations@local.ch']
|
12
12
|
s.homepage = 'https://github.com/local-ch/lhc'
|
13
13
|
s.summary = 'LocalHttpServices'
|
14
|
-
s.description = 'Rails gem wrapping typhoeus and providing additional features (like interceptors)'
|
14
|
+
s.description = 'Rails gem for HTTP wrapping typhoeus and providing additional features (like interceptors)'
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
17
17
|
s.test_files = `git ls-files -- spec/*`.split("\n") +
|
@@ -30,4 +30,6 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_development_dependency 'geminabox'
|
31
31
|
s.add_development_dependency 'pry'
|
32
32
|
s.add_development_dependency 'ciderizer'
|
33
|
+
|
34
|
+
s.license = 'GPL-3'
|
33
35
|
end
|
data/lib/lhc/endpoint.rb
CHANGED
data/lib/lhc/version.rb
CHANGED
@@ -2,12 +2,12 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe LHC::Request do
|
4
4
|
before do
|
5
|
-
allow_any_instance_of(
|
6
|
-
allow_any_instance_of(
|
5
|
+
allow_any_instance_of(LHC::Request).to receive(:use_configured_endpoint!)
|
6
|
+
allow_any_instance_of(LHC::Request).to receive(:generate_url_from_template!)
|
7
7
|
end
|
8
8
|
context 'request without rails' do
|
9
9
|
it 'does have deep_merge dependency met' do
|
10
|
-
expect {
|
10
|
+
expect { LHC::Request.new({}, false) }.not_to raise_error
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -16,16 +16,16 @@ describe LHC do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'does a delete request when providing a complete url' do
|
19
|
-
|
19
|
+
LHC.delete('http://datastore/v2/feedbacks/12121')
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'it makes response data available in a rails way' do
|
23
|
-
response =
|
23
|
+
response = LHC.delete('http://datastore/v2/feedbacks/12121')
|
24
24
|
expect(response.data.recommended).to eq true
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'provides response headers' do
|
28
|
-
response =
|
28
|
+
response = LHC.delete('http://datastore/v2/feedbacks/12121')
|
29
29
|
expect(response.headers).to be
|
30
30
|
end
|
31
31
|
end
|
@@ -17,23 +17,23 @@ describe LHC do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'does a post request when providing a complete url' do
|
20
|
-
|
20
|
+
LHC.post('http://datastore/v2/feedbacks', body: feedback.to_json)
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'does a post request when providing the name of a configured endpoint' do
|
24
24
|
url = 'http://:datastore/v2/feedbacks'
|
25
25
|
options = { params: { datastore: 'datastore' } }
|
26
|
-
|
27
|
-
|
26
|
+
LHC.configure { |c| c.endpoint(:feedbacks, url, options) }
|
27
|
+
LHC.post(:feedbacks, body: feedback.to_json)
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'it makes response data available in a rails way' do
|
31
|
-
response =
|
31
|
+
response = LHC.post('http://datastore/v2/feedbacks', body: feedback.to_json)
|
32
32
|
expect(response.data.source_id).to eq 'aaa'
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'provides response headers' do
|
36
|
-
response =
|
36
|
+
response = LHC.post('http://datastore/v2/feedbacks', body: feedback.to_json)
|
37
37
|
expect(response.headers).to be
|
38
38
|
end
|
39
39
|
end
|
@@ -23,23 +23,23 @@ describe LHC do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'does a post request when providing a complete url' do
|
26
|
-
|
26
|
+
LHC.put('http://datastore/v2/feedbacks', body: change.to_json)
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'does a post request when providing the name of a configured endpoint' do
|
30
30
|
url = 'http://:datastore/v2/feedbacks'
|
31
31
|
options = { params: { datastore: 'datastore' } }
|
32
|
-
|
33
|
-
|
32
|
+
LHC.configure { |c| c.endpoint(:feedbacks, url, options) }
|
33
|
+
LHC.put(:feedbacks, body: change.to_json)
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'it makes response data available in a rails way' do
|
37
|
-
response =
|
37
|
+
response = LHC.put('http://datastore/v2/feedbacks', body: change.to_json)
|
38
38
|
expect(response.data.recommended).to eq false
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'provides response headers' do
|
42
|
-
response =
|
42
|
+
response = LHC.put('http://datastore/v2/feedbacks', body: change.to_json)
|
43
43
|
expect(response.headers).to be
|
44
44
|
end
|
45
45
|
end
|
@@ -10,7 +10,7 @@ describe LHC do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'does a request returning a response' do
|
13
|
-
response =
|
13
|
+
response = LHC.request(url: 'http://datastore/v2/feedbacks', params: { has_reviews: true }, method: :get)
|
14
14
|
expect(response.data.total).to eq total
|
15
15
|
end
|
16
16
|
end
|
@@ -12,50 +12,50 @@ describe LHC do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
before(:each) do
|
15
|
-
|
15
|
+
LHC.configure do |c|
|
16
16
|
c.endpoint(:kpi_tracker, url, options)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'configures urls to be able to access them by name later' do
|
21
|
-
expect(
|
22
|
-
expect(
|
21
|
+
expect(LHC.config.endpoints[:kpi_tracker].url).to eq url
|
22
|
+
expect(LHC.config.endpoints[:kpi_tracker].options).to eq options
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'compile url' do
|
26
26
|
stub_request(:get, 'http://analytics/track/123/w/request?env=PROD')
|
27
|
-
response =
|
27
|
+
response = LHC.get(:kpi_tracker, params: { entity_id: 123, type: 'request' })
|
28
28
|
expect(response.request.options[:followlocation]).to eq false
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'gets overwritten by explicit request options' do
|
32
32
|
stub_request(:get, 'http://analytics/track/123/w/request?env=STG')
|
33
|
-
|
33
|
+
LHC.get(:kpi_tracker, params: { entity_id: 123, type: 'request', env: 'STG' })
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'raises in case of claching endpoint names' do
|
37
37
|
expect(lambda {
|
38
|
-
|
38
|
+
LHC.config.endpoint(:kpi_tracker, 'http://kpi-tracker')
|
39
39
|
}).to raise_error 'Endpoint already exists for that name'
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'enforces endpoint name to be a symbol' do
|
43
|
-
|
44
|
-
expect(
|
43
|
+
LHC.configure { |c| c.endpoint('datastore', 'http://datastore') }
|
44
|
+
expect(LHC.config.endpoints[:datastore].url).to eq 'http://datastore'
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
48
|
context 'configured enpoints with default params' do
|
49
49
|
before(:each) do
|
50
|
-
|
50
|
+
LHC.config.endpoint(:telemarketers, 'http://datastore/v2/spamnumbers?order_by=-user_frequency&swiss_number=true&offset=0&limit=:limit', params: { limit: 200 })
|
51
51
|
stub_request(:get, 'http://datastore/v2/spamnumbers?limit=200&offset=0&order_by=-user_frequency&swiss_number=true')
|
52
52
|
.to_return(status: 200)
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'is possible to call them multiple times with default params' do
|
56
|
-
|
57
|
-
|
58
|
-
|
56
|
+
LHC.get(:telemarketers)
|
57
|
+
LHC.get(:telemarketers)
|
58
|
+
LHC.get(:telemarketers)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -3,28 +3,28 @@ require 'rails_helper'
|
|
3
3
|
describe LHC do
|
4
4
|
context 'configuration of placeholders' do
|
5
5
|
it 'uses values for placeholders defined globally' do
|
6
|
-
|
6
|
+
LHC.configure { |c| c.placeholder(:datastore, 'http://datastore/v2') }
|
7
7
|
stub_request(:get, "http://datastore/v2/feedbacks")
|
8
|
-
|
8
|
+
LHC.get(':datastore/feedbacks')
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'uses explicit values first' do
|
12
|
-
|
12
|
+
LHC.configure { |c| c.placeholder(:campaign_id, '123') }
|
13
13
|
stub_request(:get, 'http://datastore/v2/campaign/456/feedbacks')
|
14
14
|
url = 'http://datastore/v2/campaign/:campaign_id/feedbacks'
|
15
|
-
|
15
|
+
LHC.get(url, params: { campaign_id: '456' })
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'raises in case of claching placeholder name' do
|
19
|
-
|
19
|
+
LHC.configure { |c| c.placeholder(:datastore, 'http://datastore') }
|
20
20
|
expect(lambda {
|
21
|
-
|
21
|
+
LHC.config.placeholder(:datastore, 'http://datastore')
|
22
22
|
}).to raise_error 'Placeholder already exists for that name'
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'enforces placeholder name to be a symbol' do
|
26
|
-
|
27
|
-
expect(
|
26
|
+
LHC.configure { |c| c.placeholder('datatore', 'http://datastore') }
|
27
|
+
expect(LHC.config.placeholders[:datatore]).to eq 'http://datastore'
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -3,14 +3,14 @@ require 'rails_helper'
|
|
3
3
|
describe LHC::Endpoint do
|
4
4
|
context 'compile' do
|
5
5
|
it 'uses parameters for interpolation' do
|
6
|
-
endpoint =
|
6
|
+
endpoint = LHC::Endpoint.new(':datastore/v2/:campaign_id/feedbacks')
|
7
7
|
expect(
|
8
8
|
endpoint.compile(datastore: 'http://datastore', campaign_id: 'abc')
|
9
9
|
).to eq "http://datastore/v2/abc/feedbacks"
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'uses provided proc to find values' do
|
13
|
-
endpoint =
|
13
|
+
endpoint = LHC::Endpoint.new(':datastore/v2')
|
14
14
|
config = { datastore: 'http://datastore' }
|
15
15
|
find_value = lambda { |match|
|
16
16
|
config[match.gsub(':', '').to_sym]
|
@@ -21,10 +21,24 @@ describe LHC::Endpoint do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'compiles when templates contain dots' do
|
24
|
-
endpoint =
|
24
|
+
endpoint = LHC::Endpoint.new(':datastore/entries/:id.json')
|
25
25
|
expect(
|
26
26
|
endpoint.compile(datastore: 'http://datastore', id: 123)
|
27
27
|
).to eq "http://datastore/entries/123.json"
|
28
28
|
end
|
29
|
+
|
30
|
+
it 'compiles complex urls containing all sort of characters' do
|
31
|
+
endpoint = LHC::Endpoint.new(':ads/?adrawdata/3.0/1108.1/2844859/0/0/header=yes;cookie=no;adct=204;alias=:region_id:lang:product_type:product;key=cat=:category_id')
|
32
|
+
expect(
|
33
|
+
endpoint.compile(ads: 'http://ads', region_id: 291, lang: 'de', product_type: 'ABC', product: 'xyz', category_id: 312)
|
34
|
+
).to eq 'http://ads/?adrawdata/3.0/1108.1/2844859/0/0/header=yes;cookie=no;adct=204;alias=291deABCxyz;key=cat=312'
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'compiles complex urls containing &' do
|
38
|
+
endpoint = LHC::Endpoint.new('http://:weather_search_host/forecast?format=json&period=hour&limit=:limit&areas=:zipcodes&when=:when')
|
39
|
+
expect(
|
40
|
+
endpoint.compile(weather_search_host: 'weather', limit: 5, zipcodes: [8005, 8004].join(','), when: 'today')
|
41
|
+
).to eq 'http://weather/forecast?format=json&period=hour&limit=5&areas=8005,8004&when=today'
|
42
|
+
end
|
29
43
|
end
|
30
44
|
end
|
data/spec/endpoint/match_spec.rb
CHANGED
@@ -14,7 +14,7 @@ describe LHC::Endpoint do
|
|
14
14
|
':datastore/entries/:id.json' => 'http://local.ch/entries/123.json'
|
15
15
|
}.each do |template, url|
|
16
16
|
expect(
|
17
|
-
|
17
|
+
LHC::Endpoint.match?(url, template)
|
18
18
|
).to be, "#{url} should match #{template}!"
|
19
19
|
end
|
20
20
|
end
|
@@ -29,7 +29,7 @@ describe LHC::Endpoint do
|
|
29
29
|
':datastore/entries/:id' => 'http://local.ch/entries/123.json'
|
30
30
|
}.each do |template, url|
|
31
31
|
expect(
|
32
|
-
|
32
|
+
LHC::Endpoint.match?(url, template)
|
33
33
|
).not_to be, "#{url} should not match #{template}!"
|
34
34
|
end
|
35
35
|
end
|
@@ -3,7 +3,7 @@ require 'rails_helper'
|
|
3
3
|
describe LHC::Endpoint do
|
4
4
|
context 'placeholders' do
|
5
5
|
it 'returns all placeholders alphabetically sorted' do
|
6
|
-
endpoint =
|
6
|
+
endpoint = LHC::Endpoint.new(':datastore/v2/:campaign_id/feedbacks')
|
7
7
|
expect(
|
8
8
|
endpoint.placeholders
|
9
9
|
).to eq [':campaign_id', ':datastore']
|
@@ -7,7 +7,7 @@ describe LHC::Endpoint do
|
|
7
7
|
campaign_id: 'abc',
|
8
8
|
has_reviews: true
|
9
9
|
}
|
10
|
-
endpoint =
|
10
|
+
endpoint = LHC::Endpoint.new(':datastore/v2/:campaign_id/feedbacks')
|
11
11
|
removed = endpoint.remove_interpolated_params!(params)
|
12
12
|
expect(params).to eq(has_reviews: true)
|
13
13
|
expect(removed).to eq(datastore: 'http://datastore', campaign_id: 'abc')
|
data/spec/error/find_spec.rb
CHANGED
@@ -7,48 +7,48 @@ describe LHC::Error do
|
|
7
7
|
|
8
8
|
context 'find' do
|
9
9
|
it 'finds error class by status code' do
|
10
|
-
expect(
|
11
|
-
expect(
|
12
|
-
expect(
|
13
|
-
expect(
|
14
|
-
expect(
|
15
|
-
expect(
|
16
|
-
expect(
|
17
|
-
expect(
|
18
|
-
expect(
|
19
|
-
expect(
|
20
|
-
expect(
|
21
|
-
expect(
|
22
|
-
expect(
|
23
|
-
expect(
|
24
|
-
expect(
|
25
|
-
expect(
|
26
|
-
expect(
|
27
|
-
expect(
|
28
|
-
expect(
|
29
|
-
expect(
|
30
|
-
expect(
|
31
|
-
expect(
|
32
|
-
expect(
|
33
|
-
expect(
|
34
|
-
expect(
|
35
|
-
expect(
|
36
|
-
expect(
|
37
|
-
expect(
|
38
|
-
expect(
|
39
|
-
expect(
|
40
|
-
expect(
|
10
|
+
expect(LHC::Error.find(response('400'))).to eq LHC::BadRequest
|
11
|
+
expect(LHC::Error.find(response('401'))).to eq LHC::Unauthorized
|
12
|
+
expect(LHC::Error.find(response('402'))).to eq LHC::PaymentRequired
|
13
|
+
expect(LHC::Error.find(response('403'))).to eq LHC::Forbidden
|
14
|
+
expect(LHC::Error.find(response('403'))).to eq LHC::Forbidden
|
15
|
+
expect(LHC::Error.find(response('404'))).to eq LHC::NotFound
|
16
|
+
expect(LHC::Error.find(response('405'))).to eq LHC::MethodNotAllowed
|
17
|
+
expect(LHC::Error.find(response('406'))).to eq LHC::NotAcceptable
|
18
|
+
expect(LHC::Error.find(response('407'))).to eq LHC::ProxyAuthenticationRequired
|
19
|
+
expect(LHC::Error.find(response('408'))).to eq LHC::RequestTimeout
|
20
|
+
expect(LHC::Error.find(response('409'))).to eq LHC::Conflict
|
21
|
+
expect(LHC::Error.find(response('410'))).to eq LHC::Gone
|
22
|
+
expect(LHC::Error.find(response('411'))).to eq LHC::LengthRequired
|
23
|
+
expect(LHC::Error.find(response('412'))).to eq LHC::PreconditionFailed
|
24
|
+
expect(LHC::Error.find(response('413'))).to eq LHC::RequestEntityTooLarge
|
25
|
+
expect(LHC::Error.find(response('414'))).to eq LHC::RequestUriToLong
|
26
|
+
expect(LHC::Error.find(response('415'))).to eq LHC::UnsupportedMediaType
|
27
|
+
expect(LHC::Error.find(response('416'))).to eq LHC::RequestedRangeNotSatisfiable
|
28
|
+
expect(LHC::Error.find(response('417'))).to eq LHC::ExpectationFailed
|
29
|
+
expect(LHC::Error.find(response('422'))).to eq LHC::UnprocessableEntity
|
30
|
+
expect(LHC::Error.find(response('423'))).to eq LHC::Locked
|
31
|
+
expect(LHC::Error.find(response('424'))).to eq LHC::FailedDependency
|
32
|
+
expect(LHC::Error.find(response('426'))).to eq LHC::UpgradeRequired
|
33
|
+
expect(LHC::Error.find(response('500'))).to eq LHC::InternalServerError
|
34
|
+
expect(LHC::Error.find(response('501'))).to eq LHC::NotImplemented
|
35
|
+
expect(LHC::Error.find(response('502'))).to eq LHC::BadGateway
|
36
|
+
expect(LHC::Error.find(response('503'))).to eq LHC::ServiceUnavailable
|
37
|
+
expect(LHC::Error.find(response('504'))).to eq LHC::GatewayTimeout
|
38
|
+
expect(LHC::Error.find(response('505'))).to eq LHC::HttpVersionNotSupported
|
39
|
+
expect(LHC::Error.find(response('507'))).to eq LHC::InsufficientStorage
|
40
|
+
expect(LHC::Error.find(response('510'))).to eq LHC::NotExtended
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'finds error class also by extended status codes' do
|
44
|
-
expect(
|
45
|
-
expect(
|
44
|
+
expect(LHC::Error.find(response('40001'))).to eq LHC::BadRequest
|
45
|
+
expect(LHC::Error.find(response('50002'))).to eq LHC::InternalServerError
|
46
46
|
end
|
47
47
|
|
48
48
|
it 'returns UnknownError if no specific error was found' do
|
49
|
-
expect(
|
50
|
-
expect(
|
51
|
-
expect(
|
49
|
+
expect(LHC::Error.find(response('0'))).to eq LHC::UnknownError
|
50
|
+
expect(LHC::Error.find(response(''))).to eq LHC::UnknownError
|
51
|
+
expect(LHC::Error.find(response('600'))).to eq LHC::UnknownError
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -7,13 +7,13 @@ describe LHC do
|
|
7
7
|
def after_request(request)
|
8
8
|
end
|
9
9
|
end
|
10
|
-
|
10
|
+
LHC.configure { |c| c.interceptors = [SomeInterceptor] }
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'can perform some actions after a request was fired' do
|
14
14
|
expect_any_instance_of(SomeInterceptor).to receive(:after_request)
|
15
15
|
stub_request(:get, 'http://local.ch')
|
16
|
-
|
16
|
+
LHC.get('http://local.ch')
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -25,7 +25,7 @@ describe LHC do
|
|
25
25
|
Services.timing(path.downcase, response.time)
|
26
26
|
end
|
27
27
|
end
|
28
|
-
|
28
|
+
LHC.configure { |c| c.interceptors = [StatsTimingInterceptor] }
|
29
29
|
end
|
30
30
|
|
31
31
|
let(:url) { "http://local.ch/v2/feedbacks/-Sc4_pYNpqfsudzhtivfkA" }
|
@@ -33,7 +33,7 @@ describe LHC do
|
|
33
33
|
it 'can take action after a response was received' do
|
34
34
|
allow(Services).to receive(:timing).with('web.dummy.test.get.http.local.ch.200', 0)
|
35
35
|
stub_request(:get, url)
|
36
|
-
|
36
|
+
LHC.get(url)
|
37
37
|
expect(Services).to have_received(:timing)
|
38
38
|
end
|
39
39
|
end
|
@@ -8,12 +8,12 @@ describe LHC do
|
|
8
8
|
request.params[:tid] = 123
|
9
9
|
end
|
10
10
|
end
|
11
|
-
|
11
|
+
LHC.configure { |c| c.interceptors = [TrackingIdInterceptor] }
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'can modify requests before they are send' do
|
15
15
|
stub_request(:get, "http://local.ch/?tid=123")
|
16
|
-
|
16
|
+
LHC.get('http://local.ch')
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -7,13 +7,13 @@ describe LHC do
|
|
7
7
|
def before_response(request)
|
8
8
|
end
|
9
9
|
end
|
10
|
-
|
10
|
+
LHC.configure { |c| c.interceptors = [SomeInterceptor] }
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'can perform some actions before a reponse is received' do
|
14
14
|
expect_any_instance_of(SomeInterceptor).to receive(:before_response)
|
15
15
|
stub_request(:get, 'http://local.ch')
|
16
|
-
|
16
|
+
LHC.get('http://local.ch')
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -3,11 +3,11 @@ require 'rails_helper'
|
|
3
3
|
describe LHC do
|
4
4
|
context 'default interceptors' do
|
5
5
|
before(:each) do
|
6
|
-
|
6
|
+
LHC.configure {}
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'alwayses return a list for default interceptors' do
|
10
|
-
expect(
|
10
|
+
expect(LHC.config.interceptors).to eq []
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -10,18 +10,18 @@ describe LHC do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'performs interceptor when they are set globally' do
|
13
|
-
|
13
|
+
LHC.configure { |c| c.interceptors = [SomeInterceptor] }
|
14
14
|
expect_any_instance_of(SomeInterceptor).to receive(:before_request)
|
15
15
|
stub_request(:get, 'http://local.ch')
|
16
|
-
|
16
|
+
LHC.get('http://local.ch')
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'overrides interceptors on request level' do
|
20
|
-
|
20
|
+
LHC.configure { |c| c.interceptors = [SomeInterceptor] }
|
21
21
|
expect_any_instance_of(AnotherInterceptor).to receive(:before_request)
|
22
22
|
expect_any_instance_of(SomeInterceptor).not_to receive(:before_request)
|
23
23
|
stub_request(:get, 'http://local.ch')
|
24
|
-
|
24
|
+
LHC.get('http://local.ch', interceptors: [AnotherInterceptor])
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -25,14 +25,14 @@ describe LHC do
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
|
28
|
+
LHC.configure { |c| c.interceptors = [LocalCacheInterceptor, RemoteCacheInterceptor] }
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'can handle multiple interceptors that compete for returning the response' do
|
32
|
-
response =
|
32
|
+
response = LHC.get('http://local.ch')
|
33
33
|
expect(response.body).to eq 'Im served from remote cache'
|
34
34
|
LocalCacheInterceptor.cached = true
|
35
|
-
response =
|
35
|
+
response = LHC.get('http://local.ch')
|
36
36
|
expect(response.body).to eq 'Im served from local cache'
|
37
37
|
end
|
38
38
|
end
|
@@ -9,11 +9,11 @@ describe LHC do
|
|
9
9
|
LHC::Response.new(Typhoeus::Response.new(response_body: 'Im served from cache'), nil)
|
10
10
|
end
|
11
11
|
end
|
12
|
-
|
12
|
+
LHC.configure { |c| c.interceptors = [CacheInterceptor] }
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'can return a response rather then doing a real request' do
|
16
|
-
response =
|
16
|
+
response = LHC.get('http://local.ch')
|
17
17
|
expect(response.body).to eq 'Im served from cache'
|
18
18
|
end
|
19
19
|
|
@@ -28,7 +28,7 @@ describe LHC do
|
|
28
28
|
|
29
29
|
it 'raises an exception when two interceptors try to return a response' do
|
30
30
|
expect(lambda {
|
31
|
-
|
31
|
+
LHC.get('http://local.ch', interceptors: [CacheInterceptor, AnotherInterceptor])
|
32
32
|
}).to raise_error 'Response already set from another interceptor'
|
33
33
|
end
|
34
34
|
end
|
data/spec/response/body_spec.rb
CHANGED
@@ -7,7 +7,7 @@ describe LHC::Response do
|
|
7
7
|
let(:raw_response) { OpenStruct.new(body: body) }
|
8
8
|
|
9
9
|
it 'provides response body' do
|
10
|
-
response =
|
10
|
+
response = LHC::Response.new(raw_response, nil)
|
11
11
|
expect(response.body).to eq body
|
12
12
|
end
|
13
13
|
end
|
data/spec/response/code_spec.rb
CHANGED
@@ -7,7 +7,7 @@ describe LHC::Response do
|
|
7
7
|
let(:raw_response) { OpenStruct.new(code: code) }
|
8
8
|
|
9
9
|
it 'provides response code' do
|
10
|
-
response =
|
10
|
+
response = LHC::Response.new(raw_response, nil)
|
11
11
|
expect(response.code).to eq code
|
12
12
|
end
|
13
13
|
end
|
@@ -7,7 +7,7 @@ describe LHC::Response do
|
|
7
7
|
let(:raw_response) { OpenStruct.new(effective_url: effective_url) }
|
8
8
|
|
9
9
|
it 'provides effective_url' do
|
10
|
-
response =
|
10
|
+
response = LHC::Response.new(raw_response, nil)
|
11
11
|
expect(response.effective_url).to eq effective_url
|
12
12
|
end
|
13
13
|
end
|
@@ -9,7 +9,7 @@ describe LHC::Response do
|
|
9
9
|
let(:raw_response) { OpenStruct.new(headers: headers) }
|
10
10
|
|
11
11
|
it 'provides headers' do
|
12
|
-
response =
|
12
|
+
response = LHC::Response.new(raw_response, nil)
|
13
13
|
expect(response.headers).to eq headers
|
14
14
|
end
|
15
15
|
end
|
@@ -9,7 +9,7 @@ describe LHC::Response do
|
|
9
9
|
let(:raw_response) { OpenStruct.new(options: options) }
|
10
10
|
|
11
11
|
it 'provides headers' do
|
12
|
-
response =
|
12
|
+
response = LHC::Response.new(raw_response, nil)
|
13
13
|
expect(response.options).to eq options
|
14
14
|
end
|
15
15
|
end
|
@@ -2,8 +2,8 @@ require 'rails_helper'
|
|
2
2
|
|
3
3
|
describe LHC::Response do
|
4
4
|
context 'success?' do
|
5
|
-
let(:response_success) {
|
6
|
-
let(:response_error) {
|
5
|
+
let(:response_success) { LHC::Response.new(Typhoeus::Response.new(response_code: 200, mock: true), nil) }
|
6
|
+
let(:response_error) { LHC::Response.new(Typhoeus::Response.new(response_code: 404, mock: true), nil) }
|
7
7
|
|
8
8
|
it { expect(response_success.success?).to be_truthy }
|
9
9
|
it { expect(response_error.success?).to be_falsy }
|
data/spec/response/time_spec.rb
CHANGED
@@ -7,7 +7,7 @@ describe LHC::Response do
|
|
7
7
|
let(:raw_response) { OpenStruct.new(time: time) }
|
8
8
|
|
9
9
|
it 'provides response time in milliseconds' do
|
10
|
-
response =
|
10
|
+
response = LHC::Response.new(raw_response, nil)
|
11
11
|
expect(response.time).to eq time * 1000
|
12
12
|
end
|
13
13
|
end
|
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: 3.5.
|
4
|
+
version: 3.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- local.ch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|
@@ -122,7 +122,8 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
-
description: Rails gem wrapping typhoeus and providing additional features
|
125
|
+
description: Rails gem for HTTP wrapping typhoeus and providing additional features
|
126
|
+
(like interceptors)
|
126
127
|
email:
|
127
128
|
- ws-operations@local.ch
|
128
129
|
executables: []
|
@@ -256,7 +257,8 @@ files:
|
|
256
257
|
- spec/timeouts/no_signal_spec.rb
|
257
258
|
- spec/timeouts/timings_spec.rb
|
258
259
|
homepage: https://github.com/local-ch/lhc
|
259
|
-
licenses:
|
260
|
+
licenses:
|
261
|
+
- GPL-3
|
260
262
|
metadata: {}
|
261
263
|
post_install_message:
|
262
264
|
rdoc_options: []
|