pact_broker-client 1.41.0 → 1.46.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +21 -0
- data/CHANGELOG.md +57 -0
- data/README.md +69 -48
- data/doc/pacts/markdown/Pact Broker Client - Pact Broker.md +79 -102
- data/doc/pacts/markdown/Pact Broker Client - Pactflow.md +94 -0
- data/doc/pacts/markdown/README.md +1 -0
- data/lib/pact_broker/client/backports.rb +9 -0
- data/lib/pact_broker/client/base_command.rb +98 -0
- data/lib/pact_broker/client/can_i_deploy.rb +40 -5
- data/lib/pact_broker/client/cli/broker.rb +18 -160
- data/lib/pact_broker/client/cli/custom_thor.rb +12 -16
- data/lib/pact_broker/client/cli/deployment_commands.rb +94 -0
- data/lib/pact_broker/client/cli/environment_commands.rb +70 -0
- data/lib/pact_broker/client/cli/pacticipant_commands.rb +53 -0
- data/lib/pact_broker/client/cli/webhook_commands.rb +122 -0
- data/lib/pact_broker/client/deployments.rb +4 -0
- data/lib/pact_broker/client/deployments/record_deployment.rb +38 -0
- data/lib/pact_broker/client/deployments/record_release.rb +99 -0
- data/lib/pact_broker/client/deployments/record_support_ended.rb +103 -0
- data/lib/pact_broker/client/deployments/record_undeployment.rb +127 -0
- data/lib/pact_broker/client/describe_text_formatter.rb +23 -0
- data/lib/pact_broker/client/environments.rb +6 -0
- data/lib/pact_broker/client/environments/create_environment.rb +31 -0
- data/lib/pact_broker/client/environments/delete_environment.rb +27 -0
- data/lib/pact_broker/client/environments/describe_environment.rb +26 -0
- data/lib/pact_broker/client/environments/environment_command.rb +66 -0
- data/lib/pact_broker/client/environments/list_environments.rb +30 -0
- data/lib/pact_broker/client/environments/text_formatter.rb +30 -0
- data/lib/pact_broker/client/environments/update_environment.rb +31 -0
- data/lib/pact_broker/client/generate_display_name.rb +27 -0
- data/lib/pact_broker/client/hal/entity.rb +31 -6
- data/lib/pact_broker/client/hal/http_client.rb +8 -2
- data/lib/pact_broker/client/hal/link.rb +8 -0
- data/lib/pact_broker/client/hal_client_methods.rb +1 -3
- data/lib/pact_broker/client/matrix/text_formatter.rb +21 -13
- data/lib/pact_broker/client/pacticipants.rb +6 -0
- data/lib/pact_broker/client/pacticipants/create.rb +24 -34
- data/lib/pact_broker/client/pacticipants/describe.rb +33 -0
- data/lib/pact_broker/client/pacticipants/list.rb +34 -0
- data/lib/pact_broker/client/pacticipants/text_formatter.rb +41 -0
- data/lib/pact_broker/client/string_refinements.rb +56 -0
- data/lib/pact_broker/client/version.rb +1 -1
- data/lib/pact_broker/client/versions.rb +4 -1
- data/lib/pact_broker/client/versions/describe.rb +3 -1
- data/lib/pact_broker/client/versions/formatter.rb +3 -1
- data/lib/pact_broker/client/versions/json_formatter.rb +5 -3
- data/lib/pact_broker/client/versions/text_formatter.rb +3 -1
- data/lib/pact_broker/client/webhooks/create.rb +14 -8
- data/pact-broker-client.gemspec +1 -0
- data/script/record-deployments-and-releases.sh +18 -0
- data/script/webhook-commands.sh +12 -0
- data/spec/fixtures/approvals/can_i_deploy_failure_dry_run.approved.txt +7 -0
- data/spec/fixtures/approvals/can_i_deploy_success_dry_run.approved.txt +7 -0
- data/spec/fixtures/approvals/describe_environment.approved.txt +7 -0
- data/spec/fixtures/approvals/describe_pacticipant.approved.txt +2 -0
- data/spec/fixtures/approvals/list_environments.approved.txt +3 -0
- data/spec/integration/describe_environment_spec.rb +31 -0
- data/spec/lib/pact_broker/client/can_i_deploy_spec.rb +62 -2
- data/spec/lib/pact_broker/client/cli/broker_can_i_deploy_spec.rb +17 -4
- data/spec/lib/pact_broker/client/cli/broker_publish_spec.rb +1 -1
- data/spec/lib/pact_broker/client/cli/broker_run_webhook_commands_spec.rb +7 -5
- data/spec/lib/pact_broker/client/deployments/record_deployment_spec.rb +204 -0
- data/spec/lib/pact_broker/client/deployments/record_support_ended_spec.rb +208 -0
- data/spec/lib/pact_broker/client/deployments/record_undeployment_spec.rb +219 -0
- data/spec/lib/pact_broker/client/environments/delete_environment_spec.rb +120 -0
- data/spec/lib/pact_broker/client/environments/describe_environment_spec.rb +89 -0
- data/spec/lib/pact_broker/client/environments/update_environment_spec.rb +167 -0
- data/spec/lib/pact_broker/client/generate_display_name_spec.rb +39 -0
- data/spec/lib/pact_broker/client/hal/entity_spec.rb +2 -2
- data/spec/lib/pact_broker/client/pacticipants/create_spec.rb +2 -2
- data/spec/pacts/pact_broker_client-pact_broker.json +88 -108
- data/spec/pacts/pact_broker_client-pactflow.json +118 -0
- data/spec/service_providers/create_environment_spec.rb +78 -0
- data/spec/service_providers/list_environments_spec.rb +77 -0
- data/spec/service_providers/pact_broker_client_matrix_ignore_spec.rb +1 -1
- data/spec/service_providers/pact_broker_client_register_repository_spec.rb +2 -2
- data/spec/service_providers/pact_helper.rb +15 -10
- data/spec/service_providers/pactflow_webhooks_create_spec.rb +86 -0
- data/spec/service_providers/pacticipants_create_spec.rb +5 -4
- data/spec/service_providers/publish_pacts_spec.rb +3 -1
- data/spec/service_providers/record_deployment_spec.rb +14 -32
- data/spec/service_providers/record_release_spec.rb +132 -0
- data/spec/service_providers/record_undeployment_spec.rb +166 -0
- data/spec/service_providers/webhooks_create_spec.rb +1 -1
- data/spec/spec_helper.rb +15 -2
- data/spec/support/approvals.rb +1 -1
- data/spec/support/shared_context.rb +2 -1
- data/tasks/pact.rake +21 -1
- metadata +82 -7
- data/lib/pact_broker/client/versions/record_deployment.rb +0 -109
- data/lib/pact_broker/client/versions/record_undeployment.rb +0 -102
- data/spec/lib/pact_broker/client/versions/record_deployment_spec.rb +0 -82
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'table_print'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Client
|
6
|
+
module Environments
|
7
|
+
class TextFormatter
|
8
|
+
|
9
|
+
def self.call(environments)
|
10
|
+
return "" if environments.size == 0
|
11
|
+
|
12
|
+
data = environments.collect do | environment |
|
13
|
+
OpenStruct.new(environment)
|
14
|
+
end.sort_by{ | environment | environment.name.downcase }
|
15
|
+
|
16
|
+
uuid_width = data.collect(&:uuid).collect(&:size).max
|
17
|
+
|
18
|
+
tp_options = [
|
19
|
+
{ uuid: { width: uuid_width } },
|
20
|
+
{ name: {} },
|
21
|
+
{ displayName: { display_name: "Display name" } },
|
22
|
+
{ production: {} }
|
23
|
+
]
|
24
|
+
|
25
|
+
TablePrint::Printer.new(data, tp_options).table_print
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'pact_broker/client/environments/environment_command'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Client
|
5
|
+
module Environments
|
6
|
+
class UpdateEnvironment < PactBroker::Client::Environments::EnvironmentCommand
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
attr_reader :updated_environment_resource
|
11
|
+
|
12
|
+
def do_call
|
13
|
+
@updated_environment_resource = existing_environment_link.put!(request_body)
|
14
|
+
PactBroker::Client::CommandResult.new(updated_environment_resource.success?, result_message)
|
15
|
+
end
|
16
|
+
|
17
|
+
def request_body
|
18
|
+
@request_body ||= existing_environment_body.merge(new_environment_body)
|
19
|
+
end
|
20
|
+
|
21
|
+
def result_message
|
22
|
+
if json_output?
|
23
|
+
updated_environment_resource.response.raw_body
|
24
|
+
else
|
25
|
+
::Term::ANSIColor.green("Updated #{request_body["name"]} environment in #{pact_broker_name}")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'pact_broker/client/string_refinements'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Client
|
5
|
+
module GenerateDisplayName
|
6
|
+
using PactBroker::Client::StringRefinements
|
7
|
+
|
8
|
+
def self.call(name)
|
9
|
+
return nil if name.nil?
|
10
|
+
name
|
11
|
+
.to_s
|
12
|
+
.gsub(/([A-Z])([A-Z])([a-z])/,'\1 \2\3')
|
13
|
+
.gsub(/([a-z\d])([A-Z])(\S)/,'\1 \2\3')
|
14
|
+
.gsub(/(\S)([\-_\s\.])(\S)/, '\1 \3')
|
15
|
+
.gsub(/\s+/, " ")
|
16
|
+
.strip
|
17
|
+
.split(" ")
|
18
|
+
.collect{ |word| word.camelcase(true) }
|
19
|
+
.join(" ")
|
20
|
+
end
|
21
|
+
|
22
|
+
def generate_display_name(name)
|
23
|
+
GenerateDisplayName.call(name)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -8,7 +8,15 @@ module PactBroker
|
|
8
8
|
module Client
|
9
9
|
module Hal
|
10
10
|
class RelationNotFoundError < ::PactBroker::Client::Error; end
|
11
|
-
class
|
11
|
+
class EmbeddedEntityNotFoundError < ::PactBroker::Client::Error; end
|
12
|
+
class ErrorResponseReturned < ::PactBroker::Client::Error
|
13
|
+
attr_reader :entity
|
14
|
+
|
15
|
+
def initialize(message, entity)
|
16
|
+
super(message)
|
17
|
+
@entity = entity
|
18
|
+
end
|
19
|
+
end
|
12
20
|
|
13
21
|
class Entity
|
14
22
|
def initialize(href, data, http_client, response = nil)
|
@@ -92,7 +100,17 @@ module PactBroker
|
|
92
100
|
|
93
101
|
def embedded_entity
|
94
102
|
embedded_ent = yield @data["_embedded"]
|
95
|
-
|
103
|
+
if embedded_ent
|
104
|
+
Entity.new(self_href(embedded_ent), embedded_ent, @client, response)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def embedded_entities!(key)
|
109
|
+
embedded_ents = (@data["_embedded"] && @data["_embedded"][key])
|
110
|
+
raise EmbeddedEntityNotFoundError.new("Could not find embedded entity with key '#{key}' in resource at #{@href}") unless embedded_ents
|
111
|
+
embedded_ents.collect do | embedded_ent |
|
112
|
+
Entity.new(self_href(embedded_ent), embedded_ent, @client, response)
|
113
|
+
end
|
96
114
|
end
|
97
115
|
|
98
116
|
def embedded_entities(key = nil)
|
@@ -102,7 +120,7 @@ module PactBroker
|
|
102
120
|
yield @data["_embedded"]
|
103
121
|
end
|
104
122
|
embedded_ents.collect do | embedded_ent |
|
105
|
-
Entity.new(embedded_ent
|
123
|
+
Entity.new(self_href(embedded_ent), embedded_ent, @client, response)
|
106
124
|
end
|
107
125
|
end
|
108
126
|
|
@@ -139,6 +157,10 @@ module PactBroker
|
|
139
157
|
def assert_success!(_ignored = nil)
|
140
158
|
self
|
141
159
|
end
|
160
|
+
|
161
|
+
def self_href(entity_hash)
|
162
|
+
entity_hash["_links"] && entity_hash["_links"]["self"] && entity_hash["_links"]["self"]["href"]
|
163
|
+
end
|
142
164
|
end
|
143
165
|
|
144
166
|
class ErrorEntity < Entity
|
@@ -158,14 +180,17 @@ module PactBroker
|
|
158
180
|
false
|
159
181
|
end
|
160
182
|
|
161
|
-
def
|
162
|
-
default_message = "Error
|
183
|
+
def error_message(messages = {})
|
184
|
+
default_message = "Error making request to #{@href} status=#{response ? response.status: nil} #{response ? response.raw_body : ''}".strip
|
163
185
|
message = if response && messages[response.status]
|
164
186
|
(messages[response.status] || "") + " (#{default_message})"
|
165
187
|
else
|
166
188
|
default_message
|
167
189
|
end
|
168
|
-
|
190
|
+
end
|
191
|
+
|
192
|
+
def assert_success!(messages = {})
|
193
|
+
raise ErrorResponseReturned.new(error_message(messages), self)
|
169
194
|
end
|
170
195
|
end
|
171
196
|
end
|
@@ -18,7 +18,7 @@ module PactBroker
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def get href, params = {}, headers = {}
|
21
|
-
query = params.collect{ |(key, value)| "#{CGI::escape(key.to_s)}=#{CGI::escape(value)}" }.join("&")
|
21
|
+
query = params.collect{ |(key, value)| "#{CGI::escape(key.to_s)}=#{CGI::escape(value.to_s)}" }.join("&")
|
22
22
|
uri = URI(href)
|
23
23
|
uri.query = query
|
24
24
|
perform_request(create_request(uri, 'Get', nil, headers), uri)
|
@@ -39,9 +39,15 @@ module PactBroker
|
|
39
39
|
perform_request(create_request(uri, 'Patch', body, headers), uri)
|
40
40
|
end
|
41
41
|
|
42
|
+
def delete href, body = nil, headers = {}
|
43
|
+
uri = URI(href)
|
44
|
+
perform_request(create_request(uri, 'Delete', body, headers), uri)
|
45
|
+
end
|
46
|
+
|
42
47
|
def create_request uri, http_method, body = nil, headers = {}
|
43
48
|
request = Net::HTTP.const_get(http_method).new(uri.request_uri)
|
44
|
-
request['Content-Type']
|
49
|
+
request['Content-Type'] ||= "application/json" if ['Post', 'Put'].include?(http_method)
|
50
|
+
request['Content-Type'] ||= "application/merge-patch+json" if ['Patch'].include?(http_method)
|
45
51
|
request['Accept'] = "application/hal+json"
|
46
52
|
headers.each do | key, value |
|
47
53
|
request[key] = value
|
@@ -69,6 +69,14 @@ module PactBroker
|
|
69
69
|
patch(*args).assert_success!
|
70
70
|
end
|
71
71
|
|
72
|
+
def delete(payload = nil, headers = {})
|
73
|
+
wrap_response(href, @http_client.delete(href, payload ? JSON.dump(payload) : nil, headers))
|
74
|
+
end
|
75
|
+
|
76
|
+
def delete!(*args)
|
77
|
+
delete(*args).assert_success!
|
78
|
+
end
|
79
|
+
|
72
80
|
def expand(params)
|
73
81
|
expanded_url = expand_url(params, href)
|
74
82
|
new_attrs = @attrs.merge('href' => expanded_url)
|
@@ -11,21 +11,17 @@ module PactBroker
|
|
11
11
|
|
12
12
|
Line = Struct.new(:consumer, :consumer_version, :provider, :provider_version, :success, :ref, :ignored)
|
13
13
|
|
14
|
-
TP_OPTIONS = [
|
15
|
-
{ consumer: {} },
|
16
|
-
{ consumer_version: {display_name: 'C.VERSION'} },
|
17
|
-
{ provider: {} },
|
18
|
-
{ provider_version: {display_name: 'P.VERSION'} },
|
19
|
-
{ success: {display_name: 'SUCCESS?'} },
|
20
|
-
{ ref: { display_name: 'RESULT#' } }
|
21
|
-
]
|
22
|
-
|
23
14
|
def self.call(matrix)
|
24
|
-
tp_options = TP_OPTIONS.dup
|
25
15
|
matrix_rows = matrix[:matrix]
|
26
16
|
return "" if matrix_rows.size == 0
|
17
|
+
data = prepare_data(matrix_rows)
|
18
|
+
printer = TablePrint::Printer.new(data, tp_options(data))
|
19
|
+
printer.table_print + verification_result_urls_text(matrix)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.prepare_data(matrix_rows)
|
27
23
|
verification_result_number = 0
|
28
|
-
|
24
|
+
matrix_rows.each_with_index.collect do | line |
|
29
25
|
has_verification_result_url = lookup(line, nil, :verificationResult, :_links, :self, :href)
|
30
26
|
if has_verification_result_url
|
31
27
|
verification_result_number += 1
|
@@ -40,9 +36,17 @@ module PactBroker
|
|
40
36
|
lookup(line, nil, :ignored)
|
41
37
|
)
|
42
38
|
end
|
39
|
+
end
|
43
40
|
|
44
|
-
|
45
|
-
|
41
|
+
def self.tp_options(data)
|
42
|
+
[
|
43
|
+
{ consumer: { width: max_width(data, :consumer, 'CONSUMER') } },
|
44
|
+
{ consumer_version: { display_name: 'C.VERSION', width: max_width(data, :consumer_version, 'C.VERSION') } },
|
45
|
+
{ provider: { width: max_width(data, :provider, 'PROVIDER') } },
|
46
|
+
{ provider_version: { display_name: 'P.VERSION', width: max_width(data, :provider_version, 'P.VERSION') } },
|
47
|
+
{ success: { display_name: 'SUCCESS?' } },
|
48
|
+
{ ref: { display_name: 'RESULT#' } }
|
49
|
+
]
|
46
50
|
end
|
47
51
|
|
48
52
|
def self.lookup line, default, *keys
|
@@ -75,6 +79,10 @@ module PactBroker
|
|
75
79
|
text
|
76
80
|
end
|
77
81
|
end
|
82
|
+
|
83
|
+
def self.max_width(data, column, title)
|
84
|
+
(data.collect{ |row| row.send(column) } + [title]).compact.collect(&:size).max
|
85
|
+
end
|
78
86
|
end
|
79
87
|
end
|
80
88
|
end
|
@@ -1,55 +1,45 @@
|
|
1
|
-
require 'pact_broker/client/
|
2
|
-
require 'json'
|
3
|
-
require 'pact_broker/client/command_result'
|
4
|
-
require 'pact_broker/client/hal_client_methods'
|
1
|
+
require 'pact_broker/client/base_command'
|
5
2
|
|
6
3
|
module PactBroker
|
7
4
|
module Client
|
8
5
|
module Pacticipants2
|
9
|
-
class Create
|
6
|
+
class Create < PactBroker::Client::BaseCommand
|
10
7
|
|
11
|
-
|
8
|
+
private
|
12
9
|
|
13
|
-
|
14
|
-
new(params, pact_broker_base_url, pact_broker_client_options).call
|
15
|
-
end
|
10
|
+
attr_reader :action, :response_entity
|
16
11
|
|
17
|
-
def
|
18
|
-
|
19
|
-
@index_entry_point = create_index_entry_point(pact_broker_base_url, pact_broker_client_options)
|
20
|
-
@verbose = pact_broker_client_options[:verbose]
|
21
|
-
end
|
12
|
+
def do_call
|
13
|
+
pacticipant_entity = index_resource._link('pb:pacticipant').expand('pacticipant' => params[:name]).get
|
22
14
|
|
23
|
-
def call
|
24
|
-
pacticipant_entity = index_entity._link('pb:pacticipant').expand('pacticipant' => params[:name]).get
|
25
|
-
message = nil
|
26
15
|
response_entity = if pacticipant_entity.does_not_exist?
|
27
|
-
|
28
|
-
|
16
|
+
@action = "created"
|
17
|
+
index_resource._link!('pb:pacticipants').post!(pacticipant_resource_params)
|
18
|
+
elsif pacticipant_entity.success?
|
19
|
+
@action = "updated"
|
20
|
+
pacticipant_entity._link!('self').patch!(pacticipant_resource_params, { "Content-Type" => "application/json" })
|
29
21
|
else
|
30
|
-
|
31
|
-
pacticipant_entity._link!('self').patch(pacticipant_resource_params)
|
22
|
+
pacticipant_entity.assert_success!
|
32
23
|
end
|
33
24
|
|
34
25
|
response_entity.assert_success!
|
35
|
-
PactBroker::Client::CommandResult.new(true,
|
36
|
-
rescue StandardError => e
|
37
|
-
$stderr.puts("#{e.class} - #{e}\n#{e.backtrace.join("\n")}") if verbose
|
38
|
-
PactBroker::Client::CommandResult.new(false, "#{e.class} - #{e}")
|
26
|
+
PactBroker::Client::CommandResult.new(true, result_message)
|
39
27
|
end
|
40
28
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
29
|
+
def result_message
|
30
|
+
if json_output?
|
31
|
+
response_entity.response.raw_body
|
32
|
+
else
|
33
|
+
green(message = "Pacticipant \"#{params[:name]}\" #{action} in #{pact_broker_name}")
|
34
|
+
end
|
47
35
|
end
|
48
36
|
|
49
37
|
def pacticipant_resource_params
|
50
|
-
|
51
|
-
|
52
|
-
|
38
|
+
{
|
39
|
+
name: params[:name],
|
40
|
+
repositoryUrl: params[:repository_url],
|
41
|
+
displayName: params[:display_name]
|
42
|
+
}.compact
|
53
43
|
end
|
54
44
|
end
|
55
45
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'pact_broker/client/base_command'
|
2
|
+
require 'pact_broker/client/describe_text_formatter'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Client
|
6
|
+
module Pacticipants2
|
7
|
+
class Describe < PactBroker::Client::BaseCommand
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def do_call
|
12
|
+
PactBroker::Client::CommandResult.new(true, result_message)
|
13
|
+
end
|
14
|
+
|
15
|
+
def pacticipant_entity
|
16
|
+
@pacticipant_entity ||= index_resource._link('pb:pacticipant').expand('pacticipant' => params[:name]).get!
|
17
|
+
end
|
18
|
+
|
19
|
+
def result_message
|
20
|
+
if json_output?
|
21
|
+
pacticipant_entity.response.raw_body
|
22
|
+
else
|
23
|
+
properties = pacticipant_entity.response.body.except("_links", "_embedded")
|
24
|
+
if pacticipant_entity._embedded && pacticipant_entity._embedded["labels"] && pacticipant_entity._embedded["labels"].any?
|
25
|
+
properties["labels"] = pacticipant_entity._embedded["labels"]
|
26
|
+
end
|
27
|
+
PactBroker::Client::DescribeTextFormatter.call(properties)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'pact_broker/client/base_command'
|
2
|
+
require 'pact_broker/client/pacticipants/text_formatter'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Client
|
6
|
+
module Pacticipants2
|
7
|
+
class List < PactBroker::Client::BaseCommand
|
8
|
+
private
|
9
|
+
|
10
|
+
attr_reader :environments_resource
|
11
|
+
|
12
|
+
def do_call
|
13
|
+
PactBroker::Client::CommandResult.new(true, result_message)
|
14
|
+
end
|
15
|
+
|
16
|
+
def environments_resource
|
17
|
+
@environments_resource = environments_link.get!
|
18
|
+
end
|
19
|
+
|
20
|
+
def environments_link
|
21
|
+
index_resource._link!('pb:pacticipants')
|
22
|
+
end
|
23
|
+
|
24
|
+
def result_message
|
25
|
+
if json_output?
|
26
|
+
environments_resource.response.raw_body
|
27
|
+
else
|
28
|
+
TextFormatter.call(environments_resource._embedded["pacticipants"])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'table_print'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Client
|
6
|
+
module Pacticipants2
|
7
|
+
class TextFormatter
|
8
|
+
def self.call(pacticipants)
|
9
|
+
return "" if pacticipants.size == 0
|
10
|
+
|
11
|
+
data = pacticipants.collect do | pacticipant |
|
12
|
+
# Might add a UUID in at some stage. Backwards compatible supporting code.
|
13
|
+
OpenStruct.new({ uuid: "" }.merge(pacticipant).merge(url: pacticipant["_links"]["self"]["href"]))
|
14
|
+
end.sort_by{ | pacticipant | pacticipant.name.downcase }
|
15
|
+
|
16
|
+
TablePrint::Printer.new(data, tp_options(data)).table_print
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.tp_options(data)
|
20
|
+
uuid_width = max_width(data, :uuid, "")
|
21
|
+
name_width = max_width(data, :name, "NAME")
|
22
|
+
display_name_width = max_width(data, :displayName, "DISPLAY NAME")
|
23
|
+
|
24
|
+
tp_options = [
|
25
|
+
{ name: { width: name_width} },
|
26
|
+
{ displayName: { display_name: "Display name", width: display_name_width } },
|
27
|
+
]
|
28
|
+
|
29
|
+
if uuid_width > 0
|
30
|
+
tp_options.unshift({ uuid: { width: uuid_width } })
|
31
|
+
end
|
32
|
+
tp_options
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.max_width(data, column, title)
|
36
|
+
(data.collect{ |row| row.send(column) } + [title]).compact.collect(&:size).max
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|