pact_broker 2.70.0 → 2.74.1
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 +15 -23
- data/CHANGELOG.md +57 -0
- data/Dockerfile +5 -1
- data/README.md +1 -1
- data/docker-compose-ci-mysql.yml +37 -0
- data/lib/db.rb +1 -0
- data/lib/pact_broker/api/decorators/extended_pact_decorator.rb +9 -1
- data/lib/pact_broker/api/decorators/extended_verification_decorator.rb +8 -0
- data/lib/pact_broker/api/decorators/matrix_decorator.rb +9 -4
- data/lib/pact_broker/api/decorators/tag_decorator.rb +0 -3
- data/lib/pact_broker/api/decorators/verifiable_pact_decorator.rb +3 -1
- data/lib/pact_broker/api/pact_broker_urls.rb +9 -5
- data/lib/pact_broker/api/resources/error_handler.rb +1 -1
- data/lib/pact_broker/api/resources/metadata_resource_methods.rb +24 -0
- data/lib/pact_broker/api/resources/pact.rb +2 -13
- data/lib/pact_broker/api/resources/pact_resource_methods.rb +23 -0
- data/lib/pact_broker/api/resources/pact_version.rb +3 -0
- data/lib/pact_broker/api/resources/tagged_pact_versions.rb +4 -0
- data/lib/pact_broker/api/resources/verifications.rb +2 -4
- data/lib/pact_broker/app.rb +1 -0
- data/lib/pact_broker/configuration.rb +12 -4
- data/lib/pact_broker/db/clean_incremental.rb +154 -15
- data/lib/pact_broker/db/delete_overwritten_data.rb +55 -27
- data/lib/pact_broker/domain/tag.rb +42 -0
- data/lib/pact_broker/domain/verification.rb +87 -0
- data/lib/pact_broker/domain/version.rb +13 -6
- data/lib/pact_broker/metrics/service.rb +17 -4
- data/lib/pact_broker/pacts/all_pact_publications.rb +8 -0
- data/lib/pact_broker/pacts/metadata.rb +53 -8
- data/lib/pact_broker/pacts/repository.rb +45 -28
- data/lib/pact_broker/pacts/selector.rb +22 -0
- data/lib/pact_broker/pacts/selectors.rb +4 -0
- data/lib/pact_broker/tags/tag_with_latest_flag.rb +2 -0
- data/lib/pact_broker/tasks/clean_task.rb +17 -3
- data/lib/pact_broker/tasks/delete_overwritten_data_task.rb +23 -7
- data/lib/pact_broker/test/http_test_data_builder.rb +46 -19
- data/lib/pact_broker/test/test_data_builder.rb +24 -0
- data/lib/pact_broker/version.rb +1 -1
- data/lib/sequel/extensions/statement_timeout.rb +22 -0
- data/script/docker-container/test.sh +3 -0
- data/script/docker/db-psql.sh +3 -0
- data/script/docker/db-reload.sh +11 -0
- data/script/pry.rb +25 -0
- data/script/reproduce-issue-starting-up.rb +43 -0
- data/script/reproduce-issue.rb +8 -23
- data/script/seed.rb +1 -0
- data/script/test/run-rake-on-docker-compose-mysql.sh +8 -0
- data/spec/features/delete_tagged_pact_versions_spec.rb +2 -2
- data/spec/features/get_pact_spec.rb +2 -2
- data/spec/features/get_pact_version.rb +26 -3
- data/spec/fixtures/approvals/clean_incremental_dry_run.approved.json +100 -0
- data/spec/lib/pact_broker/api/decorators/extended_pact_decorator_spec.rb +1 -0
- data/spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb +20 -8
- data/spec/lib/pact_broker/api/decorators/verifiable_pact_decorator_spec.rb +5 -7
- data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +16 -6
- data/spec/lib/pact_broker/api/resources/error_handler_spec.rb +16 -0
- data/spec/lib/pact_broker/api/resources/pact_spec.rb +20 -9
- data/spec/lib/pact_broker/api/resources/tagged_pact_versions_spec.rb +10 -2
- data/spec/lib/pact_broker/api/resources/verifications_spec.rb +7 -3
- data/spec/lib/pact_broker/db/clean_incremental_spec.rb +29 -3
- data/spec/lib/pact_broker/db/delete_overwritten_data_spec.rb +71 -11
- data/spec/lib/pact_broker/domain/tag_spec.rb +23 -9
- data/spec/lib/pact_broker/domain/verification_spec.rb +49 -0
- data/spec/lib/pact_broker/metrics/service_spec.rb +4 -1
- data/spec/lib/pact_broker/pacts/metadata_spec.rb +73 -0
- data/spec/lib/pact_broker/pacts/repository_find_for_verification_fallback_spec.rb +2 -2
- data/spec/lib/pact_broker/pacts/repository_find_for_verification_spec.rb +33 -13
- data/spec/lib/pact_broker/pacts/repository_spec.rb +54 -7
- data/spec/lib/pact_broker/pacts/selected_pact_spec.rb +23 -0
- data/spec/migrations/change_migration_strategy_spec.rb +1 -1
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9bb163d5ed55a2b3f98f18b63763749a0a9a337538a69b30af9f01295e720154
|
4
|
+
data.tar.gz: cd8cc58097602d87c09f9af494b49c28666223350f57a2f4f9ccade3f3b1d57c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a32dd3179963aac89bff4ca0197e80f73576188355b92984e51ee010522e34d7017ab6a2cac6eaf5ac865391b221d7aa619efdd8950727cac20c2e6d2b686e79
|
7
|
+
data.tar.gz: fbd56c79155229b5900294f13b0ce1ce9390cd2260e678a83ef2b358d4ad8112ae6e4f257bc3380e4ed488b67ed838f80214ba16bb8431c002f85878c5989a33
|
data/.github/workflows/test.yml
CHANGED
@@ -3,6 +3,18 @@ name: Test
|
|
3
3
|
on: push
|
4
4
|
|
5
5
|
jobs:
|
6
|
+
sqlite:
|
7
|
+
runs-on: "ubuntu-latest"
|
8
|
+
strategy:
|
9
|
+
matrix:
|
10
|
+
ruby_version: ["2.7"]
|
11
|
+
steps:
|
12
|
+
- uses: actions/checkout@v2
|
13
|
+
- uses: actions/setup-ruby@v1
|
14
|
+
with:
|
15
|
+
ruby-version: ${{ matrix.ruby_version }}
|
16
|
+
- run: "bundle install"
|
17
|
+
- run: "bundle exec rake"
|
6
18
|
postgres:
|
7
19
|
runs-on: "ubuntu-latest"
|
8
20
|
strategy:
|
@@ -25,7 +37,7 @@ jobs:
|
|
25
37
|
- uses: actions/setup-ruby@v1
|
26
38
|
with:
|
27
39
|
ruby-version: ${{ matrix.ruby_version }}
|
28
|
-
- run: "bundle install"
|
40
|
+
- run: "gem install bundler && bundle install"
|
29
41
|
env:
|
30
42
|
INSTALL_PG: "true"
|
31
43
|
- run: "bundle exec rake"
|
@@ -36,27 +48,7 @@ jobs:
|
|
36
48
|
runs-on: "ubuntu-latest"
|
37
49
|
strategy:
|
38
50
|
matrix:
|
39
|
-
ruby_version: ["2.
|
51
|
+
ruby_version: ["2.7"]
|
40
52
|
steps:
|
41
53
|
- uses: actions/checkout@v2
|
42
|
-
-
|
43
|
-
with:
|
44
|
-
ruby-version: ${{ matrix.ruby_version }}
|
45
|
-
- uses: mirromutth/mysql-action@v1.1
|
46
|
-
with:
|
47
|
-
host port: 3306 # Optional, default value is 3306. The port of host
|
48
|
-
#container port: 3307 # Optional, default value is 3306. The port of container
|
49
|
-
character set server: 'utf8' # Optional, default value is 'utf8mb4'. The '--character-set-server' option for mysqld
|
50
|
-
collation server: 'utf8_general_ci' # Optional, default value is 'utf8mb4_general_ci'. The '--collation-server' option for mysqld
|
51
|
-
mysql version: '8.0' # Optional, default value is "latest". The version of the MySQL
|
52
|
-
mysql database: 'pact_broker' # Optional, default value is "test". The specified database which will be create
|
53
|
-
mysql root password: 'pact_broker' # Required if "mysql user" is empty, default is empty. The root superuser password
|
54
|
-
mysql user: 'pact_broker' # Required if "mysql root password" is empty, default is empty. The superuser for the specified database. Can use secrets, too
|
55
|
-
mysql password: 'pact_broker' # Required if "mysql user" exists. The password for the "mysql user"
|
56
|
-
- run: "bundle install"
|
57
|
-
env:
|
58
|
-
INSTALL_MYSQL: "true"
|
59
|
-
- run: "bundle exec rake"
|
60
|
-
env:
|
61
|
-
DATABASE_ADAPTER: github_actions_mysql
|
62
|
-
INSTALL_MYSQL: "true"
|
54
|
+
- run: script/test/run-rake-on-docker-compose-mysql.sh
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,60 @@
|
|
1
|
+
<a name="v2.74.1"></a>
|
2
|
+
### v2.74.1 (2021-01-05)
|
3
|
+
|
4
|
+
#### Bug Fixes
|
5
|
+
|
6
|
+
* **deps**
|
7
|
+
* remove manual specification for nokogiri now the fix for CVE-2020-26247 has been released in 1.11 ([771378a9](/../../commit/771378a9))
|
8
|
+
|
9
|
+
<a name="v2.74.0"></a>
|
10
|
+
### v2.74.0 (2021-01-04)
|
11
|
+
|
12
|
+
#### Features
|
13
|
+
|
14
|
+
* include the consumer version selectors in the metadata of the 'pact for verification' URL ([32bbe1c3](/../../commit/32bbe1c3))
|
15
|
+
|
16
|
+
#### Bug Fixes
|
17
|
+
|
18
|
+
* **deps**
|
19
|
+
* update nokogiri for CVE-2020-26247 ([336ec897](/../../commit/336ec897))
|
20
|
+
|
21
|
+
<a name="v2.73.0"></a>
|
22
|
+
### v2.73.0 (2020-12-16)
|
23
|
+
|
24
|
+
#### Features
|
25
|
+
|
26
|
+
* **wip**
|
27
|
+
* permenently enable feature that keeps pacts as WIP when verified via the URL from a webhook triggered by pact publication ([70071373](/../../commit/70071373))
|
28
|
+
|
29
|
+
* allow error causes to be configured to log at warning level ([3a7bf5ea](/../../commit/3a7bf5ea))
|
30
|
+
* add self relations for tags in matrix resource ([727cee99](/../../commit/727cee99))
|
31
|
+
* add self relation to tags in extended pact and verification resources ([a560ce6d](/../../commit/a560ce6d))
|
32
|
+
|
33
|
+
* **metrics**
|
34
|
+
* timeout matrix count ([43091b57](/../../commit/43091b57))
|
35
|
+
|
36
|
+
#### Bug Fixes
|
37
|
+
|
38
|
+
* url encode tag name in tag URL ([80df832d](/../../commit/80df832d))
|
39
|
+
|
40
|
+
<a name="v2.72.0"></a>
|
41
|
+
### v2.72.0 (2020-12-02)
|
42
|
+
|
43
|
+
#### Features
|
44
|
+
|
45
|
+
* allow overwritten data deletion to be configured with extra options ([fd809737](/../../commit/fd809737))
|
46
|
+
* use the consumer version number in the metadata to select the correct consumer version for a pact version resource ([422c87fc](/../../commit/422c87fc))
|
47
|
+
* return link to latest pact if more pacts exist when deleting pacts by tag ([b87ea704](/../../commit/b87ea704))
|
48
|
+
* update output for clean dry run ([681a5ddd](/../../commit/681a5ddd))
|
49
|
+
* update metrics output ([0617e9df](/../../commit/0617e9df))
|
50
|
+
|
51
|
+
<a name="v2.71.0"></a>
|
52
|
+
### v2.71.0 (2020-11-28)
|
53
|
+
|
54
|
+
#### Features
|
55
|
+
|
56
|
+
* allow clean to be performed in dry run mode ([a7a18fde](/../../commit/a7a18fde))
|
57
|
+
|
1
58
|
<a name="v2.70.0"></a>
|
2
59
|
### v2.70.0 (2020-11-28)
|
3
60
|
|
data/Dockerfile
CHANGED
@@ -26,7 +26,7 @@ RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSI
|
|
26
26
|
|
27
27
|
|
28
28
|
COPY Gemfile /home/Gemfile
|
29
|
-
COPY Gemfile.lock /home/Gemfile.lock
|
29
|
+
# COPY Gemfile.lock /home/Gemfile.lock # lock file does not exist on CI
|
30
30
|
COPY pact_broker.gemspec /home/pact_broker.gemspec
|
31
31
|
COPY lib/pact_broker/version.rb /home/lib/pact_broker/version.rb
|
32
32
|
COPY .gitignore /home/.gitignore
|
@@ -38,6 +38,10 @@ RUN echo '#!/bin/sh' >> /usr/local/bin/start
|
|
38
38
|
RUN echo 'bundle exec rackup -o 0.0.0.0 -p 9292' >> /usr/local/bin/start
|
39
39
|
RUN chmod +x /usr/local/bin/start
|
40
40
|
|
41
|
+
RUN echo '#!/bin/sh' >> /usr/local/bin/test
|
42
|
+
RUN echo 'bundle exec rake' >> /usr/local/bin/test
|
43
|
+
RUN chmod +x /usr/local/bin/test
|
44
|
+
|
41
45
|
RUN echo '#!/bin/sh' >> /home/init-db.sh
|
42
46
|
RUN echo 'bundle exec rake db:prepare:test' >> /home/init-db.sh
|
43
47
|
RUN chmod +x /home/init-db.sh
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Pact Broker
|
2
2
|
[![Gem Version](https://badge.fury.io/rb/pact_broker.svg)](http://badge.fury.io/rb/pact_broker)
|
3
|
-
|
3
|
+
![Build status](https://github.com/pact-foundation/pact_broker/workflows/Test/badge.svg)
|
4
4
|
[![Join the chat at https://pact-foundation.slack.com/](https://img.shields.io/badge/chat-on%20slack-blue.svg?logo=slack)](https://slack.pact.io)
|
5
5
|
[![security](https://hakiri.io/github/pact-foundation/pact_broker/master.svg)](https://hakiri.io/github/pact-foundation/pact_broker/master)
|
6
6
|
[![Code Climate](https://codeclimate.com/github/pact-foundation/pact_broker/badges/gpa.svg)](https://codeclimate.com/github/pact-foundation/pact_broker)
|
@@ -0,0 +1,37 @@
|
|
1
|
+
version: "3"
|
2
|
+
|
3
|
+
services:
|
4
|
+
mysql:
|
5
|
+
image: mysql:5.7.28
|
6
|
+
command: --default-authentication-plugin=mysql_native_password
|
7
|
+
environment:
|
8
|
+
MYSQL_ROOT_PASSWORD: pact_broker
|
9
|
+
MYSQL_DATABASE: pact_broker
|
10
|
+
MYSQL_USER: pact_broker
|
11
|
+
MYSQL_PASSWORD: pact_broker
|
12
|
+
ports:
|
13
|
+
- "3306:3306"
|
14
|
+
|
15
|
+
tests:
|
16
|
+
build: .
|
17
|
+
depends_on:
|
18
|
+
- mysql
|
19
|
+
environment:
|
20
|
+
DATABASE_ADAPTER: docker_compose_mysql
|
21
|
+
PACT_BROKER_HIDE_PACTFLOW_MESSAGES: 'true'
|
22
|
+
INSTALL_MYSQL: 'true'
|
23
|
+
volumes:
|
24
|
+
- ./lib:/home/lib
|
25
|
+
- ./spec:/home/spec
|
26
|
+
- ./db:/home/db
|
27
|
+
- ./config.ru:/home/config.ru
|
28
|
+
- ./tasks:/home/tasks
|
29
|
+
- ./Rakefile:/home/Rakefile
|
30
|
+
- ./config:/home/config
|
31
|
+
- ./.rspec:/home/.rspec
|
32
|
+
- ./.rubocop:/home/.rubocop
|
33
|
+
- ./.gitignore:/home/.gitignore
|
34
|
+
- ./public:/home/public
|
35
|
+
- ./script/docker-container/test.sh:/usr/local/bin/test
|
36
|
+
entrypoint: dockerize
|
37
|
+
command: --wait tcp://mysql:3306 -timeout 60s test
|
data/lib/db.rb
CHANGED
@@ -33,6 +33,7 @@ module DB
|
|
33
33
|
con = Sequel.connect(db_credentials.merge(:logger => logger, :pool_class => Sequel::ThreadedConnectionPool, :encoding => 'utf8'))
|
34
34
|
con.extension(:connection_validator)
|
35
35
|
con.extension(:pagination)
|
36
|
+
con.extension(:statement_timeout)
|
36
37
|
con.extend_datasets do
|
37
38
|
def any?
|
38
39
|
!empty?
|
@@ -11,6 +11,14 @@ module PactBroker
|
|
11
11
|
property :name
|
12
12
|
property :latest, getter: ->(_) { true }
|
13
13
|
|
14
|
+
link :self do | options |
|
15
|
+
{
|
16
|
+
title: 'Tag',
|
17
|
+
name: represented.name,
|
18
|
+
href: tag_url(options[:base_url], represented)
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
14
22
|
link "pb:latest-pact" do | opts |
|
15
23
|
{
|
16
24
|
name: "The latest pact with the tag #{represented.name}",
|
@@ -33,7 +41,7 @@ module PactBroker
|
|
33
41
|
|
34
42
|
def head_tags
|
35
43
|
represented.head_tag_names.collect do | tag_name |
|
36
|
-
OpenStruct.new(name: tag_name, pact: represented)
|
44
|
+
OpenStruct.new(name: tag_name, pact: represented, version: represented.consumer_version)
|
37
45
|
end
|
38
46
|
end
|
39
47
|
end
|
@@ -7,6 +7,14 @@ module PactBroker
|
|
7
7
|
class TagDecorator < BaseDecorator
|
8
8
|
property :name
|
9
9
|
property :latest?, as: :latest
|
10
|
+
|
11
|
+
link :self do | options |
|
12
|
+
{
|
13
|
+
title: 'Tag',
|
14
|
+
name: represented.name,
|
15
|
+
href: tag_url(options[:base_url], represented)
|
16
|
+
}
|
17
|
+
end
|
10
18
|
end
|
11
19
|
|
12
20
|
collection :provider_version_tags, as: :tags, embedded: true, extend: TagDecorator
|
@@ -76,7 +76,7 @@ module PactBroker
|
|
76
76
|
href: version_url(base_url, consumer_version)
|
77
77
|
}
|
78
78
|
},
|
79
|
-
tags: tags(line.consumer_version_tags)
|
79
|
+
tags: tags(line.consumer_version_tags, base_url)
|
80
80
|
},
|
81
81
|
_links: {
|
82
82
|
self: {
|
@@ -86,11 +86,16 @@ module PactBroker
|
|
86
86
|
}
|
87
87
|
end
|
88
88
|
|
89
|
-
def tags(tags)
|
89
|
+
def tags(tags, base_url)
|
90
90
|
tags.collect do | tag |
|
91
91
|
{
|
92
92
|
name: tag.name,
|
93
|
-
latest: tag.latest
|
93
|
+
latest: tag.latest?,
|
94
|
+
_links: {
|
95
|
+
self: {
|
96
|
+
href: tag_url(base_url, tag)
|
97
|
+
}
|
98
|
+
}
|
94
99
|
}
|
95
100
|
end
|
96
101
|
end
|
@@ -114,7 +119,7 @@ module PactBroker
|
|
114
119
|
href: version_url(base_url, provider_version)
|
115
120
|
}
|
116
121
|
},
|
117
|
-
tags: tags(line.provider_version_tags)
|
122
|
+
tags: tags(line.provider_version_tags, base_url)
|
118
123
|
}
|
119
124
|
end
|
120
125
|
|
@@ -1,11 +1,13 @@
|
|
1
1
|
require_relative 'base_decorator'
|
2
2
|
require 'pact_broker/api/pact_broker_urls'
|
3
3
|
require 'pact_broker/pacts/build_verifiable_pact_notices'
|
4
|
+
require 'pact_broker/pacts/metadata'
|
4
5
|
|
5
6
|
module PactBroker
|
6
7
|
module Api
|
7
8
|
module Decorators
|
8
9
|
class VerifiablePactDecorator < BaseDecorator
|
10
|
+
include PactBroker::Pacts::Metadata
|
9
11
|
|
10
12
|
property :shortDescription, getter: -> (context) { PactBroker::Pacts::VerifiablePactMessages.new(context[:represented], nil).pact_version_short_description }
|
11
13
|
|
@@ -27,7 +29,7 @@ module PactBroker
|
|
27
29
|
end
|
28
30
|
|
29
31
|
link :self do | user_options |
|
30
|
-
metadata = represented
|
32
|
+
metadata = build_metadata_for_pact_for_verification(represented)
|
31
33
|
{
|
32
34
|
href: pact_version_url_with_metadata(represented, metadata, user_options[:base_url]),
|
33
35
|
name: represented.name
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'erb'
|
2
2
|
require 'pact_broker/pacts/metadata'
|
3
3
|
require 'pact_broker/logging'
|
4
|
+
require 'base64'
|
5
|
+
require 'rack'
|
4
6
|
|
5
7
|
module PactBroker
|
6
8
|
module Api
|
@@ -75,11 +77,9 @@ module PactBroker
|
|
75
77
|
end
|
76
78
|
|
77
79
|
def decode_pact_metadata(metadata)
|
78
|
-
if metadata
|
80
|
+
if metadata && metadata != ''
|
79
81
|
begin
|
80
|
-
Rack::Utils.parse_nested_query(Base64.strict_decode64(metadata))
|
81
|
-
new_hash[k.to_sym] = v
|
82
|
-
end
|
82
|
+
Rack::Utils.parse_nested_query(Base64.strict_decode64(metadata))
|
83
83
|
rescue StandardError => e
|
84
84
|
logger.warn("Exception parsing webhook metadata: #{metadata}", e)
|
85
85
|
{}
|
@@ -116,6 +116,10 @@ module PactBroker
|
|
116
116
|
"#{base_url}/pacts/provider/#{url_encode(provider_name)}/consumer/#{url_encode(consumer_name)}/versions"
|
117
117
|
end
|
118
118
|
|
119
|
+
def tagged_pact_versions_url consumer_name, provider_name, tag, base_url = ""
|
120
|
+
"#{base_url}/pacts/provider/#{url_encode(provider_name)}/consumer/#{url_encode(consumer_name)}/tag/#{url_encode(tag)}"
|
121
|
+
end
|
122
|
+
|
119
123
|
def integration_url consumer_name, provider_name, base_url = ""
|
120
124
|
"#{base_url}/integrations/provider/#{url_encode(provider_name)}/consumer/#{url_encode(consumer_name)}"
|
121
125
|
end
|
@@ -197,7 +201,7 @@ module PactBroker
|
|
197
201
|
end
|
198
202
|
|
199
203
|
def tag_url base_url, tag
|
200
|
-
"#{tags_url(base_url, tag.version)}/#{tag.name}"
|
204
|
+
"#{tags_url(base_url, tag.version)}/#{url_encode(tag.name)}"
|
201
205
|
end
|
202
206
|
|
203
207
|
def templated_tag_url_for_pacticipant pacticipant_name, base_url = ""
|
@@ -29,7 +29,7 @@ module PactBroker
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def self.log_as_warning?(e)
|
32
|
-
PactBroker.configuration.warning_error_classes.any? { |clazz| e.is_a?(clazz) }
|
32
|
+
PactBroker.configuration.warning_error_classes.any? { |clazz| e.is_a?(clazz) || e.cause&.is_a?(clazz) }
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.display_message(e, obfuscated_message)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'pact_broker/hash_refinements'
|
2
|
+
require 'pact_broker/pacts/metadata'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Api
|
6
|
+
module Resources
|
7
|
+
module MetadataResourceMethods
|
8
|
+
using PactBroker::HashRefinements
|
9
|
+
|
10
|
+
def pact_params
|
11
|
+
@pact_params ||= PactBroker::Pacts::PactParams.from_request(request, maybe_params_with_consumer_version_number.merge(path_info))
|
12
|
+
end
|
13
|
+
|
14
|
+
def maybe_params_with_consumer_version_number
|
15
|
+
metadata.slice(:consumer_version_number)
|
16
|
+
end
|
17
|
+
|
18
|
+
def metadata
|
19
|
+
@metadata ||= PactBroker::Pacts::Metadata.parse_metadata(PactBrokerUrls.decode_pact_metadata(identifier_from_path[:metadata]))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -8,6 +8,7 @@ require 'pact_broker/pacts/pact_params'
|
|
8
8
|
require 'pact_broker/api/contracts/put_pact_params_contract'
|
9
9
|
require 'pact_broker/webhooks/execution_configuration'
|
10
10
|
require 'pact_broker/api/resources/webhook_execution_methods'
|
11
|
+
require 'pact_broker/api/resources/pact_resource_methods'
|
11
12
|
|
12
13
|
module PactBroker
|
13
14
|
module Api
|
@@ -15,6 +16,7 @@ module PactBroker
|
|
15
16
|
class Pact < BaseResource
|
16
17
|
include PacticipantResourceMethods
|
17
18
|
include WebhookExecutionMethods
|
19
|
+
include PactResourceMethods
|
18
20
|
|
19
21
|
def content_types_provided
|
20
22
|
[
|
@@ -110,19 +112,6 @@ module PactBroker
|
|
110
112
|
@pact_params ||= PactBroker::Pacts::PactParams.from_request request, path_info
|
111
113
|
end
|
112
114
|
|
113
|
-
def set_post_deletion_response
|
114
|
-
latest_pact = pact_service.find_latest_pact(pact_params)
|
115
|
-
response_body = { "_links" => { index: { href: base_url } } }
|
116
|
-
if latest_pact
|
117
|
-
response_body["_links"]["pb:latest-pact-version"] = {
|
118
|
-
href: latest_pact_url(base_url, latest_pact),
|
119
|
-
title: "Latest pact"
|
120
|
-
}
|
121
|
-
end
|
122
|
-
response.body = response_body.to_json
|
123
|
-
response.headers["Content-Type" => "application/hal+json;charset=utf-8"]
|
124
|
-
end
|
125
|
-
|
126
115
|
def webhook_options
|
127
116
|
{
|
128
117
|
database_connector: database_connector,
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module PactBroker
|
2
|
+
module Api
|
3
|
+
module Resources
|
4
|
+
module PactResourceMethods
|
5
|
+
def set_post_deletion_response
|
6
|
+
latest_pact = pact_service.find_latest_pact(
|
7
|
+
consumer_name: pact_params[:consumer_name],
|
8
|
+
provider_name: pact_params[:provider_name]
|
9
|
+
)
|
10
|
+
response_body = { "_links" => { index: { href: base_url } } }
|
11
|
+
if latest_pact
|
12
|
+
response_body["_links"]["pb:latest-pact-version"] = {
|
13
|
+
href: latest_pact_url(base_url, latest_pact),
|
14
|
+
title: "Latest pact"
|
15
|
+
}
|
16
|
+
end
|
17
|
+
response.body = response_body.to_json
|
18
|
+
response.headers["Content-Type" => "application/hal+json;charset=utf-8"]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|