pact_broker 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.gitignore +0 -1
- data/.rspec +1 -0
- data/CHANGELOG.md +47 -0
- data/README.md +4 -2
- data/config.ru +3 -5
- data/db/migrations/09_add_timestamps.rb +12 -0
- data/db/migrations/10_populate_timestamps.rb +15 -0
- data/db/migrations/11_made_timestamps_mandatory.rb +20 -0
- data/db/migrations/12_create_webhooks_table.rb +21 -0
- data/db/migrations/13_add_columns_to_webhooks.rb +8 -0
- data/lib/pact_broker/api.rb +14 -0
- data/lib/pact_broker/api/decorators.rb +2 -2
- data/lib/pact_broker/api/decorators/base_decorator.rb +2 -1
- data/lib/pact_broker/api/decorators/basic_pacticipant_decorator.rb +21 -0
- data/lib/pact_broker/api/decorators/decorator_context.rb +20 -0
- data/lib/pact_broker/api/decorators/latest_pact_decorator.rb +2 -2
- data/lib/pact_broker/api/decorators/pact_decorator.rb +12 -5
- data/lib/pact_broker/api/decorators/pact_details_decorator.rb +22 -0
- data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +6 -4
- data/lib/pact_broker/api/decorators/relationships_csv_decorator.rb +25 -3
- data/lib/pact_broker/api/decorators/representable_pact.rb +3 -1
- data/lib/pact_broker/api/decorators/tag_decorator.rb +3 -0
- data/lib/pact_broker/api/decorators/webhook_decorator.rb +52 -0
- data/lib/pact_broker/api/decorators/webhook_execution_result_decorator.rb +58 -0
- data/lib/pact_broker/api/decorators/webhook_request_decorator.rb +18 -0
- data/lib/pact_broker/api/decorators/webhooks_decorator.rb +37 -0
- data/lib/pact_broker/api/pact_broker_urls.rb +16 -0
- data/lib/pact_broker/api/renderers/html_pact_renderer.rb +2 -1
- data/lib/pact_broker/api/resources/base_resource.rb +12 -1
- data/lib/pact_broker/api/resources/group.rb +38 -0
- data/lib/pact_broker/api/resources/index.rb +30 -21
- data/lib/pact_broker/api/resources/latest_pact.rb +1 -1
- data/lib/pact_broker/api/resources/latest_pacts.rb +1 -1
- data/lib/pact_broker/api/resources/pact.rb +18 -2
- data/lib/pact_broker/api/resources/pact_webhooks.rb +87 -0
- data/lib/pact_broker/api/resources/pacticipant.rb +15 -6
- data/lib/pact_broker/api/resources/pacticipants.rb +1 -1
- data/lib/pact_broker/api/resources/tag.rb +2 -2
- data/lib/pact_broker/api/resources/webhook.rb +44 -0
- data/lib/pact_broker/api/resources/webhook_execution.rb +43 -0
- data/lib/pact_broker/api/resources/webhooks.rb +29 -0
- data/lib/pact_broker/app.rb +46 -8
- data/lib/pact_broker/db.rb +10 -0
- data/lib/pact_broker/doc/controllers/app.rb +32 -0
- data/lib/pact_broker/doc/views/latest-pacts.markdown +3 -0
- data/lib/pact_broker/doc/views/layouts/main.haml +5 -0
- data/lib/pact_broker/doc/views/pacticipants.markdown +10 -0
- data/lib/pact_broker/doc/views/self.markdown +8 -0
- data/lib/pact_broker/doc/views/webhooks.markdown +48 -0
- data/lib/pact_broker/functions/groupify.rb +39 -0
- data/lib/pact_broker/jobs/after_pact_save.rb +13 -0
- data/lib/pact_broker/json.rb +4 -0
- data/lib/pact_broker/locale/en.yml +23 -0
- data/lib/pact_broker/messages.rb +18 -0
- data/lib/pact_broker/models/group.rb +21 -0
- data/lib/pact_broker/models/pact.rb +4 -2
- data/lib/pact_broker/models/pacticipant.rb +3 -1
- data/lib/pact_broker/models/relationship.rb +34 -0
- data/lib/pact_broker/models/tag.rb +3 -1
- data/lib/pact_broker/models/version.rb +3 -1
- data/lib/pact_broker/models/webhook.rb +53 -0
- data/lib/pact_broker/models/webhook_execution_result.rb +26 -0
- data/lib/pact_broker/models/webhook_request.rb +107 -0
- data/lib/pact_broker/models/webhook_request_header.rb +13 -0
- data/lib/pact_broker/repositories.rb +6 -0
- data/lib/pact_broker/repositories/pact_repository.rb +25 -7
- data/lib/pact_broker/repositories/pacticipant_repository.rb +4 -0
- data/lib/pact_broker/repositories/webhook_repository.rb +134 -0
- data/lib/pact_broker/services.rb +10 -0
- data/lib/pact_broker/services/group_service.rb +24 -0
- data/lib/pact_broker/services/pact_service.rb +37 -7
- data/lib/pact_broker/services/pacticipant_service.rb +12 -1
- data/lib/pact_broker/services/webhook_service.rb +63 -0
- data/lib/pact_broker/tasks.rb +0 -1
- data/lib/pact_broker/ui/controllers/base_controller.rb +1 -0
- data/lib/pact_broker/ui/controllers/groups.rb +25 -0
- data/lib/pact_broker/ui/controllers/relationships.rb +0 -2
- data/lib/pact_broker/ui/helpers/url_helper.rb +17 -0
- data/lib/pact_broker/ui/view_models/relationship.rb +13 -4
- data/lib/pact_broker/ui/view_models/relationships.rb +1 -1
- data/lib/pact_broker/ui/views/groups/show.html.erb +409 -0
- data/lib/pact_broker/ui/views/relationships/show.haml +4 -2
- data/lib/pact_broker/version.rb +1 -1
- data/pact_broker.gemspec +7 -6
- data/public/{d3.v3.js.pagespeed.ce.dFNRrGTALe.js → javascripts/d3.v3.js.pagespeed.ce.dFNRrGTALe.js} +0 -0
- data/public/stylesheets/relationships.css +4 -0
- data/spec/integration/endpoints/group.rb +22 -0
- data/spec/lib/pact_broker/api/decorators/pact_decorator_spec.rb +49 -0
- data/spec/lib/pact_broker/api/decorators/pacticipant_decorator_spec.rb +25 -0
- data/spec/lib/pact_broker/api/decorators/relationships_csv_decorator_spec.rb +7 -4
- data/spec/lib/pact_broker/api/decorators/webhook_decorator_spec.rb +121 -0
- data/spec/lib/pact_broker/api/decorators/webhook_execution_result_decorator_spec.rb +69 -0
- data/spec/lib/pact_broker/api/decorators/webhook_request_decorator_spec.rb +78 -0
- data/spec/lib/pact_broker/api/decorators/webhooks_decorator_spec.rb +46 -0
- data/spec/lib/pact_broker/api/resources/group_spec.rb +80 -0
- data/spec/lib/pact_broker/api/resources/pact_spec.rb +41 -0
- data/spec/lib/pact_broker/api/resources/pact_webhooks_spec.rb +184 -0
- data/spec/lib/pact_broker/api/resources/pacticipant_spec.rb +71 -0
- data/spec/lib/pact_broker/api/resources/webhook_execution_spec.rb +77 -0
- data/spec/lib/pact_broker/api/resources/webhook_spec.rb +60 -0
- data/spec/lib/pact_broker/api/resources/webhooks_spec.rb +44 -0
- data/spec/lib/pact_broker/doc/controllers/app_spec.rb +51 -0
- data/spec/lib/pact_broker/functions/groupify_spec.rb +50 -0
- data/spec/lib/pact_broker/models/group_spec.rb +26 -0
- data/spec/lib/pact_broker/models/webhook_request_spec.rb +175 -0
- data/spec/lib/pact_broker/models/webhook_spec.rb +59 -0
- data/spec/lib/pact_broker/repositories/pact_repository_spec.rb +40 -0
- data/spec/lib/pact_broker/repositories/webhook_repository_spec.rb +257 -0
- data/spec/lib/pact_broker/services/group_service_spec.rb +52 -0
- data/spec/lib/pact_broker/services/pact_service_spec.rb +49 -0
- data/spec/lib/pact_broker/services/pacticipant_service_spec.rb +50 -0
- data/spec/lib/pact_broker/services/webhook_service_spec.rb +51 -0
- data/spec/lib/pact_broker/ui/view_models/relationship_spec.rb +20 -6
- data/spec/lib/pact_broker/ui/view_models/relationships_spec.rb +33 -0
- data/spec/service_consumers/provider_states_for_pact_broker_client.rb +1 -1
- data/spec/spec_helper.rb +11 -4
- data/spec/support/provider_state_builder.rb +11 -0
- data/spec/support/shared_examples_for_responses.rb +25 -0
- data/vendor/hal-browser/js/hal/views/embedded_resource.js +3 -3
- data/vendor/hal-browser/js/hal/views/resource.js +3 -3
- metadata +174 -80
- data/assets/d3.v3.js +0 -9263
- data/assets/force.csv +0 -29
- data/assets/index.html +0 -186
- data/assets/index2.html +0 -224
- data/assets/relationships +0 -4
- data/assets/stylesheets/github.css +0 -387
- data/lib/pact_broker/tasks/delete.rake +0 -20
- data/public/Network Graph REA.html +0 -48
- data/public/rea.csv +0 -10
@@ -9,6 +9,10 @@ module PactBroker
|
|
9
9
|
PactBroker::Models::Pacticipant.where(name: name).single_record
|
10
10
|
end
|
11
11
|
|
12
|
+
def find_by_id id
|
13
|
+
PactBroker::Models::Pacticipant.where(id: id).single_record
|
14
|
+
end
|
15
|
+
|
12
16
|
def find_all
|
13
17
|
PactBroker::Models::Pacticipant.order(:name).all
|
14
18
|
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'sequel'
|
2
|
+
require 'pact_broker/models/webhook'
|
3
|
+
require 'pact_broker/models/pacticipant'
|
4
|
+
require 'pact_broker/db'
|
5
|
+
require 'base64'
|
6
|
+
|
7
|
+
module PactBroker
|
8
|
+
module Repositories
|
9
|
+
|
10
|
+
class WebhookRepository
|
11
|
+
|
12
|
+
# Experimenting with decoupling the model from the database representation.
|
13
|
+
# Sure makes it messier for saving/retrieving.
|
14
|
+
|
15
|
+
include Repositories
|
16
|
+
|
17
|
+
def create webhook, consumer, provider
|
18
|
+
db_webhook = Webhook.from_model webhook, consumer, provider
|
19
|
+
db_webhook.uuid = SecureRandom.urlsafe_base64
|
20
|
+
db_webhook.save
|
21
|
+
webhook.request.headers.each_pair do | name, value |
|
22
|
+
db_webhook.add_header WebhookHeader.from_model(name, value, db_webhook.id)
|
23
|
+
end
|
24
|
+
|
25
|
+
find_by_uuid db_webhook.uuid
|
26
|
+
end
|
27
|
+
|
28
|
+
def find_by_uuid uuid
|
29
|
+
db_webhook = Webhook.where(uuid: uuid).single_record
|
30
|
+
return nil if db_webhook.nil?
|
31
|
+
db_webhook.to_model
|
32
|
+
end
|
33
|
+
|
34
|
+
def delete_by_uuid uuid
|
35
|
+
Webhook.where(uuid: uuid).destroy
|
36
|
+
end
|
37
|
+
|
38
|
+
def delete_by_pacticipant pacticipant
|
39
|
+
Webhook.where(consumer_id: pacticipant.id).destroy
|
40
|
+
Webhook.where(provider_id: pacticipant.id).destroy
|
41
|
+
end
|
42
|
+
|
43
|
+
def find_all
|
44
|
+
Webhook.all.collect { | db_webhook| db_webhook.to_model }
|
45
|
+
end
|
46
|
+
|
47
|
+
def find_by_consumer_and_provider consumer, provider
|
48
|
+
Webhook.where(consumer_id: consumer.id, provider_id: provider.id).collect { | db_webhook| db_webhook.to_model }
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
class Webhook < Sequel::Model
|
54
|
+
|
55
|
+
set_primary_key :id
|
56
|
+
associate(:many_to_one, :provider, :class => "PactBroker::Models::Pacticipant", :key => :provider_id, :primary_key => :id)
|
57
|
+
associate(:many_to_one, :consumer, :class => "PactBroker::Models::Pacticipant", :key => :consumer_id, :primary_key => :id)
|
58
|
+
one_to_many :headers, :class => "PactBroker::Repositories::WebhookHeader", :reciprocal => :webhook
|
59
|
+
|
60
|
+
def before_destroy
|
61
|
+
WebhookHeader.where(webhook_id: id).destroy
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.from_model webhook, consumer, provider
|
65
|
+
is_json_request_body = !(String === webhook.request.body || webhook.request.body.nil?) # Can't rely on people to set content type
|
66
|
+
new(
|
67
|
+
uuid: webhook.uuid,
|
68
|
+
method: webhook.request.method,
|
69
|
+
url: webhook.request.url,
|
70
|
+
username: webhook.request.username,
|
71
|
+
password: not_plain_text_password(webhook.request.password),
|
72
|
+
body: (is_json_request_body ? webhook.request.body.to_json : webhook.request.body),
|
73
|
+
is_json_request_body: is_json_request_body
|
74
|
+
).tap do | db_webhook |
|
75
|
+
db_webhook.consumer_id = consumer.id
|
76
|
+
db_webhook.provider_id = provider.id
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.not_plain_text_password password
|
81
|
+
password.nil? ? nil : Base64.strict_encode64(password)
|
82
|
+
end
|
83
|
+
|
84
|
+
def to_model
|
85
|
+
Models::Webhook.new(
|
86
|
+
uuid: uuid,
|
87
|
+
consumer: consumer,
|
88
|
+
provider: provider,
|
89
|
+
request: Models::WebhookRequest.new(request_attributes),
|
90
|
+
created_at: created_at,
|
91
|
+
updated_at: updated_at)
|
92
|
+
end
|
93
|
+
|
94
|
+
def request_attributes
|
95
|
+
values.merge(headers: parsed_headers, body: parsed_body, password: plain_text_password)
|
96
|
+
end
|
97
|
+
|
98
|
+
def plain_text_password
|
99
|
+
password.nil? ? nil : Base64.strict_decode64(password)
|
100
|
+
end
|
101
|
+
|
102
|
+
def parsed_headers
|
103
|
+
WebhookHeader.where(webhook_id: id).all.each_with_object({}) do | header, hash |
|
104
|
+
hash[header[:name]] = header[:value]
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def parsed_body
|
109
|
+
if body && is_json_request_body
|
110
|
+
JSON.parse(body)
|
111
|
+
else
|
112
|
+
body
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
Webhook.plugin :timestamps, :update_on_create=>true
|
119
|
+
|
120
|
+
class WebhookHeader < Sequel::Model
|
121
|
+
|
122
|
+
associate(:many_to_one, :webhook, :class => "PactBroker::Repositories::Webhook", :key => :webhook_id, :primary_key => :id)
|
123
|
+
|
124
|
+
def self.from_model name, value, webhook_id
|
125
|
+
db_header = new
|
126
|
+
db_header.name = name
|
127
|
+
db_header.value = value
|
128
|
+
db_header.webhook_id = webhook_id
|
129
|
+
db_header
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
data/lib/pact_broker/services.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'pact_broker/services/pact_service'
|
2
2
|
require 'pact_broker/services/pacticipant_service'
|
3
3
|
require 'pact_broker/services/tag_service'
|
4
|
+
require 'pact_broker/services/group_service'
|
5
|
+
require 'pact_broker/services/webhook_service'
|
4
6
|
|
5
7
|
module PactBroker
|
6
8
|
module Services
|
@@ -15,5 +17,13 @@ module PactBroker
|
|
15
17
|
def tag_service
|
16
18
|
TagService
|
17
19
|
end
|
20
|
+
|
21
|
+
def group_service
|
22
|
+
GroupService
|
23
|
+
end
|
24
|
+
|
25
|
+
def webhook_service
|
26
|
+
WebhookService
|
27
|
+
end
|
18
28
|
end
|
19
29
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'pact_broker/repositories'
|
2
|
+
require 'pact_broker/functions/groupify'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
|
6
|
+
module Services
|
7
|
+
module GroupService
|
8
|
+
|
9
|
+
extend self
|
10
|
+
|
11
|
+
extend PactBroker::Repositories
|
12
|
+
extend PactBroker::Services
|
13
|
+
|
14
|
+
def find_group_containing pacticipant
|
15
|
+
groups.find { | group | group.include_pacticipant? pacticipant }
|
16
|
+
end
|
17
|
+
|
18
|
+
def groups
|
19
|
+
Functions::Groupify.call pacticipant_service.find_relationships
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -7,7 +7,8 @@ module PactBroker
|
|
7
7
|
|
8
8
|
extend self
|
9
9
|
|
10
|
-
extend
|
10
|
+
extend Repositories
|
11
|
+
extend Services
|
11
12
|
|
12
13
|
def find_latest_pact params
|
13
14
|
pact_repository.find_latest_pact(params[:consumer_name], params[:provider_name], params[:tag])
|
@@ -24,18 +25,47 @@ module PactBroker
|
|
24
25
|
def create_or_update_pact params
|
25
26
|
provider = pacticipant_repository.find_by_name_or_create params[:provider_name]
|
26
27
|
consumer = pacticipant_repository.find_by_name_or_create params[:consumer_name]
|
27
|
-
|
28
|
+
consumer_version = version_repository.find_by_pacticipant_id_and_number_or_create consumer.id, params[:consumer_version_number]
|
29
|
+
pact = pact_repository.find_by_version_and_provider(consumer_version.id, provider.id)
|
28
30
|
|
29
|
-
if pact
|
30
|
-
|
31
|
-
return pact, false
|
31
|
+
if pact
|
32
|
+
return update_pact params, pact
|
32
33
|
else
|
33
|
-
|
34
|
-
return pact, true
|
34
|
+
return create_pact params, consumer_version, provider
|
35
35
|
end
|
36
36
|
|
37
37
|
end
|
38
38
|
|
39
|
+
def pact_has_changed_since_previous_version? pact
|
40
|
+
previous_pact = pact_repository.find_previous_pact pact
|
41
|
+
previous_pact && pact.json_content != previous_pact.json_content
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def update_pact params, pact
|
47
|
+
previous_json_content = pact.json_content
|
48
|
+
pact.update(json_content: params[:json_content])
|
49
|
+
if previous_json_content != params[:json_content]
|
50
|
+
webhook_service.execute_webhooks pact
|
51
|
+
end
|
52
|
+
return pact, false
|
53
|
+
end
|
54
|
+
|
55
|
+
def create_pact params, version, provider
|
56
|
+
pact = pact_repository.create json_content: params[:json_content], version_id: version.id, provider_id: provider.id
|
57
|
+
execute_webhooks pact
|
58
|
+
return pact, true
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
def execute_webhooks pact
|
64
|
+
if pact_has_changed_since_previous_version? pact
|
65
|
+
webhook_service.execute_webhooks pact
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
39
69
|
end
|
40
70
|
end
|
41
71
|
end
|
@@ -7,7 +7,7 @@ module PactBroker
|
|
7
7
|
class PacticipantService
|
8
8
|
|
9
9
|
extend PactBroker::Repositories
|
10
|
-
extend PactBroker::
|
10
|
+
extend PactBroker::Services
|
11
11
|
|
12
12
|
def self.find_all_pacticipants
|
13
13
|
pacticipant_repository.find_all
|
@@ -40,6 +40,17 @@ module PactBroker
|
|
40
40
|
pacticipant_repository.create(params)
|
41
41
|
end
|
42
42
|
|
43
|
+
def self.delete name
|
44
|
+
pacticipant = find_pacticipant_by_name name
|
45
|
+
connection = PactBroker::Models::Pacticipant.new.db
|
46
|
+
connection.run("delete from tags where version_id IN (select id from versions where pacticipant_id IN (select id from pacticipants where name = '#{name}'))")
|
47
|
+
connection.run("delete from pacts where version_id IN (select id from versions where pacticipant_id IN (select id from pacticipants where name = '#{name}'))")
|
48
|
+
connection.run("delete from pacts where provider_id IN (select id from pacticipants where name = '#{name}')")
|
49
|
+
connection.run("delete from versions where pacticipant_id IN (select id from pacticipants where name = '#{name}')")
|
50
|
+
webhook_service.delete_by_pacticipant pacticipant
|
51
|
+
connection.run("delete from pacticipants where name = '#{name}'")
|
52
|
+
end
|
53
|
+
|
43
54
|
end
|
44
55
|
end
|
45
56
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'pact_broker/repositories'
|
2
|
+
require 'pact_broker/logging'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
|
6
|
+
module Services
|
7
|
+
class WebhookService
|
8
|
+
|
9
|
+
extend Repositories
|
10
|
+
include Logging
|
11
|
+
|
12
|
+
def self.create webhook, consumer, provider
|
13
|
+
webhook_repository.create webhook, consumer, provider
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.find_by_uuid uuid
|
17
|
+
webhook_repository.find_by_uuid uuid
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.delete_by_uuid uuid
|
21
|
+
webhook_repository.delete_by_uuid uuid
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.delete_by_pacticipant pacticipant
|
25
|
+
webhook_repository.delete_by_pacticipant pacticipant
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.find_all
|
29
|
+
webhook_repository.find_all
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.execute_webhook_now webhook
|
33
|
+
webhook.execute
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.find_by_consumer_and_provider consumer, provider
|
37
|
+
webhook_repository.find_by_consumer_and_provider consumer, provider
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.execute_webhooks pact
|
41
|
+
webhooks = webhook_repository.find_by_consumer_and_provider pact.consumer, pact.provider
|
42
|
+
if webhooks.any?
|
43
|
+
run_later(webhooks)
|
44
|
+
else
|
45
|
+
logger.debug "No webhook found for consumer \"#{pact.consumer.name}\" and provider \"#{pact.provider.name}\""
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# TODO background job?
|
50
|
+
def self.run_later webhooks
|
51
|
+
Thread.new do
|
52
|
+
webhooks.each do | webhook |
|
53
|
+
begin
|
54
|
+
webhook.execute
|
55
|
+
rescue StandardError => e
|
56
|
+
# Exceptions are already logged, no need to log again.
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/pact_broker/tasks.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'pact_broker/ui/controllers/base_controller'
|
2
|
+
require 'pact_broker/ui/view_models/relationships'
|
3
|
+
require 'haml'
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
module UI
|
7
|
+
module Controllers
|
8
|
+
class Groups < Base
|
9
|
+
|
10
|
+
include PactBroker::Services
|
11
|
+
|
12
|
+
get ":name" do
|
13
|
+
erb :'groups/show.html', {
|
14
|
+
locals: {
|
15
|
+
csv_path: "/groups/#{params[:name]}/csv",
|
16
|
+
pacticipant_name: params[:name]}
|
17
|
+
}, {
|
18
|
+
layout: 'layouts/main'
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'pact_broker/api/pact_broker_urls'
|
2
|
+
require 'pact_broker/ui/helpers/url_helper'
|
2
3
|
|
3
4
|
module PactBroker
|
4
5
|
module UI
|
@@ -12,11 +13,19 @@ module PactBroker
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def consumer_name
|
15
|
-
@relationship.
|
16
|
+
@relationship.consumer_name
|
16
17
|
end
|
17
18
|
|
18
19
|
def provider_name
|
19
|
-
@relationship.
|
20
|
+
@relationship.provider_name
|
21
|
+
end
|
22
|
+
|
23
|
+
def consumer_group_url
|
24
|
+
Helpers::URLHelper.group_url consumer_name
|
25
|
+
end
|
26
|
+
|
27
|
+
def provider_group_url
|
28
|
+
Helpers::URLHelper.group_url provider_name
|
20
29
|
end
|
21
30
|
|
22
31
|
def latest_pact_url
|
@@ -24,9 +33,9 @@ module PactBroker
|
|
24
33
|
end
|
25
34
|
|
26
35
|
def <=> other
|
27
|
-
comp = consumer_name <=> other.consumer_name
|
36
|
+
comp = consumer_name.downcase <=> other.consumer_name.downcase
|
28
37
|
return comp unless comp == 0
|
29
|
-
provider_name <=> other.provider_name
|
38
|
+
provider_name.downcase <=> other.provider_name.downcase
|
30
39
|
end
|
31
40
|
|
32
41
|
end
|