pact_broker-client 1.16.2 → 1.17.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/pact_broker/client/hal/entity.rb +34 -5
- data/lib/pact_broker/client/hal/http_client.rb +3 -2
- data/lib/pact_broker/client/hal/link.rb +9 -11
- data/lib/pact_broker/client/version.rb +1 -1
- data/spec/lib/pact_broker/client/hal/entity_spec.rb +59 -5
- data/spec/lib/pact_broker/client/hal/link_spec.rb +7 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fdab3c67440cdd2d780675b8a599d6f1dd09e3d1
|
4
|
+
data.tar.gz: 8f114056c4f6447b1cd6efac1434d9a0eb878d67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39b123daae457e35c9a64492ef8516979259cef4e71462c990c46d22c02cfaa0156262f42710f2e00ae97aebe6facb261c3ed1e117315ba44fdca94f938c042b
|
7
|
+
data.tar.gz: 994166b7e4151a37b36f783385634363cc3aa14056e89faaf5740f2882cebb53054bd1fe2b23973d0a70f6d699f2f106370e1fdb1f9d73306410fc4829fa417d
|
data/CHANGELOG.md
CHANGED
@@ -1,12 +1,18 @@
|
|
1
|
-
require '
|
1
|
+
require 'erb'
|
2
2
|
require 'delegate'
|
3
3
|
require 'pact_broker/client/hal/link'
|
4
4
|
|
5
5
|
module PactBroker
|
6
6
|
module Client
|
7
7
|
module Hal
|
8
|
+
class RelationNotFoundError < ::PactBroker::Client::Error; end
|
9
|
+
|
10
|
+
class ErrorResponseReturned < ::PactBroker::Client::Error; end
|
11
|
+
|
8
12
|
class Entity
|
9
|
-
|
13
|
+
|
14
|
+
def initialize(href, data, http_client, response = nil)
|
15
|
+
@href = href
|
10
16
|
@data = data
|
11
17
|
@links = (@data || {}).fetch("_links", {})
|
12
18
|
@client = http_client
|
@@ -33,14 +39,20 @@ module PactBroker
|
|
33
39
|
Link.new(@links[key].merge(method: http_method), @client).run(*args)
|
34
40
|
end
|
35
41
|
|
36
|
-
def _link(key)
|
42
|
+
def _link(key, fallback_key = nil)
|
37
43
|
if @links[key]
|
38
44
|
Link.new(@links[key], @client)
|
45
|
+
elsif fallback_key && @links[fallback_key]
|
46
|
+
Link.new(@links[fallback_key], @client)
|
39
47
|
else
|
40
48
|
nil
|
41
49
|
end
|
42
50
|
end
|
43
51
|
|
52
|
+
def _link!(key)
|
53
|
+
_link(key) or raise RelationNotFoundError.new("Could not find relation '#{key}' in resource at #{@href}")
|
54
|
+
end
|
55
|
+
|
44
56
|
def success?
|
45
57
|
true
|
46
58
|
end
|
@@ -49,8 +61,8 @@ module PactBroker
|
|
49
61
|
@response
|
50
62
|
end
|
51
63
|
|
52
|
-
def fetch(key)
|
53
|
-
@links[key]
|
64
|
+
def fetch(key, fallback_key = nil)
|
65
|
+
@links[key] || (fallback_key && @links[fallback_key])
|
54
66
|
end
|
55
67
|
|
56
68
|
def method_missing(method_name, *args, &block)
|
@@ -66,12 +78,29 @@ module PactBroker
|
|
66
78
|
def respond_to_missing?(method_name, include_private = false)
|
67
79
|
@data.key?(method_name) || @links.key?(method_name)
|
68
80
|
end
|
81
|
+
|
82
|
+
def assert_success!
|
83
|
+
self
|
84
|
+
end
|
69
85
|
end
|
70
86
|
|
71
87
|
class ErrorEntity < Entity
|
88
|
+
|
89
|
+
def initialize(href, data, http_client, response = nil)
|
90
|
+
@href = href
|
91
|
+
@data = data
|
92
|
+
@links = {}
|
93
|
+
@client = http_client
|
94
|
+
@response = response
|
95
|
+
end
|
96
|
+
|
72
97
|
def success?
|
73
98
|
false
|
74
99
|
end
|
100
|
+
|
101
|
+
def assert_success!
|
102
|
+
raise ErrorResponseReturned.new("Error retrieving #{@href} status=#{response ? response.code: nil} #{response ? response.raw_body : ''}")
|
103
|
+
end
|
75
104
|
end
|
76
105
|
end
|
77
106
|
end
|
@@ -4,7 +4,7 @@ module PactBroker
|
|
4
4
|
module Client
|
5
5
|
module Hal
|
6
6
|
class HttpClient
|
7
|
-
|
7
|
+
attr_accessor :username, :password, :verbose
|
8
8
|
|
9
9
|
def initialize options
|
10
10
|
@username = options[:username]
|
@@ -56,7 +56,7 @@ module PactBroker
|
|
56
56
|
|
57
57
|
class Response < SimpleDelegator
|
58
58
|
def body
|
59
|
-
bod =
|
59
|
+
bod = raw_body
|
60
60
|
if bod && bod != ''
|
61
61
|
JSON.parse(bod)
|
62
62
|
else
|
@@ -77,6 +77,7 @@ module PactBroker
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
80
|
+
|
80
81
|
end
|
81
82
|
end
|
82
83
|
end
|
@@ -38,15 +38,15 @@ module PactBroker
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def get(payload = {}, headers = {})
|
41
|
-
wrap_response(@http_client.get(href, payload, headers))
|
41
|
+
wrap_response(href, @http_client.get(href, payload, headers))
|
42
42
|
end
|
43
43
|
|
44
44
|
def put(payload = nil, headers = {})
|
45
|
-
wrap_response(@http_client.put(href, payload ? JSON.dump(payload) : nil, headers))
|
45
|
+
wrap_response(href, @http_client.put(href, payload ? JSON.dump(payload) : nil, headers))
|
46
46
|
end
|
47
47
|
|
48
48
|
def post(payload = nil, headers = {})
|
49
|
-
wrap_response(@http_client.post(href, payload ? JSON.dump(payload) : nil, headers))
|
49
|
+
wrap_response(href, @http_client.post(href, payload ? JSON.dump(payload) : nil, headers))
|
50
50
|
end
|
51
51
|
|
52
52
|
def expand(params)
|
@@ -57,21 +57,19 @@ module PactBroker
|
|
57
57
|
|
58
58
|
private
|
59
59
|
|
60
|
-
def wrap_response(http_response)
|
61
|
-
require '
|
60
|
+
def wrap_response(href, http_response)
|
61
|
+
require 'pact/hal/entity' # avoid circular reference
|
62
62
|
if http_response.success?
|
63
|
-
Entity.new(http_response.body, @http_client, http_response)
|
63
|
+
Entity.new(href, http_response.body, @http_client, http_response)
|
64
64
|
else
|
65
|
-
ErrorEntity.new(http_response.
|
65
|
+
ErrorEntity.new(href, http_response.raw_body, @http_client, http_response)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
69
|
def expand_url(params, url)
|
70
|
-
|
71
|
-
|
72
|
-
new_url = new_url.gsub('{' + key.to_s + '}', URI.escape(value))
|
70
|
+
params.inject(url) do | url, (key, value) |
|
71
|
+
url.gsub('{' + key.to_s + '}', ERB::Util.url_encode(value))
|
73
72
|
end
|
74
|
-
new_url
|
75
73
|
end
|
76
74
|
end
|
77
75
|
end
|
@@ -32,7 +32,7 @@ module PactBroker::Client
|
|
32
32
|
}
|
33
33
|
end
|
34
34
|
|
35
|
-
subject(:entity) { Entity.new(pact_hash, http_client) }
|
35
|
+
subject(:entity) { Entity.new("http://pact", pact_hash, http_client) }
|
36
36
|
|
37
37
|
it "delegates to the properties in the data" do
|
38
38
|
expect(subject.name).to eq "a name"
|
@@ -60,6 +60,32 @@ module PactBroker::Client
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
+
describe "assert_success!" do
|
64
|
+
context "when the response is successful" do
|
65
|
+
it "returns the entity" do
|
66
|
+
expect(entity.assert_success!).to be entity
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "when the response is not successful and there is no response" do
|
71
|
+
subject(:entity) { ErrorEntity.new("http://pact", pact_hash, http_client) }
|
72
|
+
|
73
|
+
it "raises an error" do
|
74
|
+
expect { entity.assert_success! }.to raise_error ErrorResponseReturned, "Error retrieving http://pact status= "
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "when the response is not successful and there is a response" do
|
79
|
+
let(:response) { double('response', code: 200, raw_body: "body") }
|
80
|
+
|
81
|
+
subject(:entity) { ErrorEntity.new("http://pact", pact_hash, http_client, response) }
|
82
|
+
|
83
|
+
it "raises an error" do
|
84
|
+
expect { entity.assert_success! }.to raise_error ErrorResponseReturned, "Error retrieving http://pact status=200 body"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
63
89
|
describe "can?" do
|
64
90
|
context "when the relation exists" do
|
65
91
|
it "returns true" do
|
@@ -74,19 +100,47 @@ module PactBroker::Client
|
|
74
100
|
end
|
75
101
|
end
|
76
102
|
|
103
|
+
describe "_link!" do
|
104
|
+
context 'when the key exists' do
|
105
|
+
it 'returns a Link' do
|
106
|
+
expect(subject._link!('pb:provider')).to be_a(Link)
|
107
|
+
expect(subject._link!('pb:provider').href).to eq 'http://provider'
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context 'when the key does not exist' do
|
112
|
+
it 'raises an error' do
|
113
|
+
expect { subject._link!('foo') }.to raise_error RelationNotFoundError, "Could not find relation 'foo' in resource at http://pact"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
77
118
|
describe 'fetch' do
|
78
|
-
context 'when the key
|
119
|
+
context 'when the key exists' do
|
79
120
|
it 'returns fetched value' do
|
80
|
-
expect(subject.fetch('pb:provider')).to
|
81
|
-
{href: 'http://provider'}
|
82
|
-
end
|
121
|
+
expect(subject.fetch('pb:provider')).to eq("href" => 'http://provider')
|
83
122
|
end
|
84
123
|
end
|
124
|
+
|
85
125
|
context "when the key doesn't not exist" do
|
86
126
|
it 'returns nil' do
|
87
127
|
expect(subject.fetch('i-dont-exist')).to be nil
|
88
128
|
end
|
89
129
|
end
|
130
|
+
|
131
|
+
context "when a fallback key is provided" do
|
132
|
+
context "when the fallback value exists" do
|
133
|
+
it "returns the fallback value" do
|
134
|
+
expect(subject.fetch('i-dont-exist', 'pb:provider')).to eq("href" => 'http://provider')
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
context "when the fallback value does not exist" do
|
139
|
+
it "returns nil" do
|
140
|
+
expect(subject.fetch('i-dont-exist', 'i-also-dont-exist')).to be nil
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
90
144
|
end
|
91
145
|
end
|
92
146
|
end
|
@@ -10,7 +10,7 @@ module PactBroker::Client
|
|
10
10
|
end
|
11
11
|
|
12
12
|
let(:response) do
|
13
|
-
instance_double('PactBroker::Client::Hal::HttpClient::Response', success?: success, body: response_body)
|
13
|
+
instance_double('PactBroker::Client::Hal::HttpClient::Response', success?: success, body: response_body, raw_body: response_body.to_json)
|
14
14
|
end
|
15
15
|
|
16
16
|
let(:success) { true }
|
@@ -48,7 +48,7 @@ module PactBroker::Client
|
|
48
48
|
end
|
49
49
|
|
50
50
|
it "creates an Entity" do
|
51
|
-
expect(PactBroker::Client::Hal::Entity).to receive(:new).with(response_body, http_client, response)
|
51
|
+
expect(PactBroker::Client::Hal::Entity).to receive(:new).with("http://foo/{bar}", response_body, http_client, response)
|
52
52
|
do_run
|
53
53
|
end
|
54
54
|
|
@@ -64,7 +64,7 @@ module PactBroker::Client
|
|
64
64
|
let(:success) { false }
|
65
65
|
|
66
66
|
it "creates an ErrorEntity" do
|
67
|
-
expect(PactBroker::Client::Hal::ErrorEntity).to receive(:new).with(response_body, http_client, response)
|
67
|
+
expect(PactBroker::Client::Hal::ErrorEntity).to receive(:new).with("http://foo/{bar}", response_body.to_json, http_client, response)
|
68
68
|
do_run
|
69
69
|
end
|
70
70
|
end
|
@@ -102,6 +102,10 @@ module PactBroker::Client
|
|
102
102
|
it "returns a duplicate Link with the expanded href with URL escaping" do
|
103
103
|
expect(subject.expand(bar: 'wiffle meep').href).to eq "http://foo/wiffle%20meep"
|
104
104
|
end
|
105
|
+
|
106
|
+
it "returns a duplicate Link with the expanded href with URL escaping for forward slashes" do
|
107
|
+
expect(subject.expand(bar: 'wiffle/meep').href).to eq "http://foo/wiffle%2Fmeep"
|
108
|
+
end
|
105
109
|
end
|
106
110
|
end
|
107
111
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact_broker-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Beth Skurrie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|