pact_broker 2.0.0.beta.6 → 2.0.0.beta.7
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/CHANGELOG.md +9 -0
- data/README.md +12 -12
- data/db/migrations/08_create_latest_pact_view.rb +4 -4
- data/db/migrations/14_add_timestamps_to_pact_views.rb +5 -4
- data/db/migrations/20_add_pact_version_content_sha_to_all_pacts_view.rb +12 -10
- data/db/migrations/28_create_all_pact_publications.rb +6 -5
- data/lib/pact_broker/api/decorators/verification_decorator.rb +0 -3
- data/lib/pact_broker/api/decorators/verification_summary_decorator.rb +36 -0
- data/lib/pact_broker/api/decorators/versions_decorator.rb +1 -1
- data/lib/pact_broker/api/resources/latest_verifications_for_consumer_version.rb +5 -5
- data/lib/pact_broker/api/resources/versions.rb +1 -1
- data/lib/pact_broker/app.rb +2 -0
- data/lib/pact_broker/configuration.rb +6 -1
- data/lib/pact_broker/domain/order_versions.rb +15 -5
- data/lib/pact_broker/domain/verification.rb +1 -1
- data/lib/pact_broker/domain/webhook.rb +0 -1
- data/lib/pact_broker/domain/webhook_request.rb +6 -4
- data/lib/pact_broker/logging.rb +4 -0
- data/lib/pact_broker/pacticipants/repository.rb +3 -2
- data/lib/pact_broker/pacticipants/service.rb +12 -9
- data/lib/pact_broker/pacts/all_pact_publications.rb +2 -2
- data/lib/pact_broker/pacts/repository.rb +11 -2
- data/lib/pact_broker/pacts/service.rb +4 -0
- data/lib/pact_broker/tags/repository.rb +5 -5
- data/lib/pact_broker/verifications/repository.rb +4 -3
- data/lib/pact_broker/verifications/service.rb +8 -0
- data/lib/pact_broker/verifications/summary_for_consumer_version.rb +41 -0
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/versions/parse_semantic_version.rb +14 -4
- data/lib/pact_broker/versions/repository.rb +1 -1
- data/lib/pact_broker/webhooks/job.rb +46 -0
- data/lib/pact_broker/webhooks/service.rb +9 -8
- data/lib/pact_broker/webhooks/webhook.rb +1 -1
- data/pact_broker.gemspec +4 -3
- data/pact_broker_client-pact_broker.json +4 -4
- data/script/foo-bar.json +22 -0
- data/script/publish-new.sh +7 -0
- data/script/publish.sh +2 -2
- data/script/recreate-pg-db.sh +10 -0
- data/spec/features/get_verifications_for_consumer_version_spec.rb +1 -1
- data/spec/fixtures/a_consumer-a_provider-2.json +1 -1
- data/spec/fixtures/a_consumer-a_provider-3.json +1 -1
- data/spec/fixtures/a_consumer-a_provider-conflict.json +1 -1
- data/spec/fixtures/a_consumer-a_provider-merged.json +2 -2
- data/spec/fixtures/a_consumer-a_provider.json +1 -1
- data/spec/fixtures/consumer-provider.json +1 -1
- data/spec/fixtures/renderer_pact.json +1 -1
- data/spec/lib/pact_broker/api/decorators/{verifications_decorator_spec.rb → verification_summary_decorator_spec.rb} +16 -13
- data/spec/lib/pact_broker/api/resources/latest_verifications_for_consumer_version_spec.rb +5 -5
- data/spec/lib/pact_broker/domain/order_versions_spec.rb +30 -10
- data/spec/lib/pact_broker/domain/webhook_request_spec.rb +3 -1
- data/spec/lib/pact_broker/pacticipants/repository_spec.rb +16 -0
- data/spec/lib/pact_broker/pacticipants/service_spec.rb +74 -24
- data/spec/lib/pact_broker/verifications/summary_for_consumer_version_spec.rb +72 -0
- data/spec/lib/pact_broker/versions/parse_semantic_version_spec.rb +5 -2
- data/spec/lib/pact_broker/webhooks/job_spec.rb +67 -0
- data/spec/lib/pact_broker/webhooks/service_spec.rb +40 -3
- data/spec/support/provider_state_builder.rb +3 -2
- data/tasks/db.rake +3 -2
- metadata +35 -14
- data/lib/pact_broker/api/decorators/verifications_decorator.rb +0 -30
- data/lib/pact_broker/pacts/all_pacts.rb +0 -12
- data/lib/pact_broker/pacts/latest_pacts.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a23016da41a3bd4b5a3a71cd21c5ee26f34ebc15
|
4
|
+
data.tar.gz: 45cf807ca83536d65a7a75404dea32cb7407eab1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e992dcc04ccf7453864d261f4a87a891ee23c624da4c116cbbb92d7cf3228214da2c5bc80e022d4ba2c523c31b4de0757eb8ae09c5ddcb7c1b34723c7d49998
|
7
|
+
data.tar.gz: aa4ace1b1d4032f7ebde957c9dab32023c378e41f9f950a38fdf8baa58cee6d082e3f4060b339da6032649c181bc9d1f948814eae5892c4d5e8e6250abb5567e
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,10 @@ Do this to generate your change history
|
|
2
2
|
|
3
3
|
$ git log --pretty=format:' * %h - %s (%an, %ad)' vX.Y.Z..HEAD
|
4
4
|
|
5
|
+
#### 2.0.0.beta.7 (2017-05-12)
|
6
|
+
* 741bf96 - Include information about missing verifications in the latest verifications resource. Only set success to be true when all pacts have been successfully verified. (Beth Skurrie, Fri May 12 14:59:48 2017 +1000)
|
7
|
+
* 64f20c6 - Allow one, two or three "parts" in the application version number. Eg. 12, 3.4 and 1.2.400 are all valid. (Beth Skurrie, Wed May 10 16:19:07 2017 +1000)
|
8
|
+
|
5
9
|
#### 2.0.0.beta.6 (2017-05-09)
|
6
10
|
* 8f1c911 - Ensure all resources provide application/hal+json. (Beth Skurrie, Tue May 9 18:32:37 2017 +1000)
|
7
11
|
|
@@ -32,6 +36,11 @@ Do this to generate your change history
|
|
32
36
|
* 77eaf7b - Added pb:latest-verifications link to version resource. (Beth Skurrie, Tue Apr 11 16:25:45 2017 +1000)
|
33
37
|
* aaf44d9 - Added endpoint to view the latest verifications for a given consumer version. (Beth Skurrie, Tue Apr 11 11:16:03 2017 +1000)
|
34
38
|
|
39
|
+
#### 1.18.0 (2017-05-09)
|
40
|
+
* 397060b - Display application versions in reverse order in the Versions resource. (Beth Skurrie, Tue May 9 13:59:54 2017 +1000)
|
41
|
+
* 251c878 - Allow application versions to be ordered by creation date where no consistent orderable object can be extracted from the consumer application version. (Beth Skurrie, Tue May 9 13:22:36 2017 +1000)
|
42
|
+
* 68bb6d9 - Execute webhooks using sucker punch. (Beth Skurrie, Mon May 8 10:32:45 2017 +1000)
|
43
|
+
|
35
44
|
#### 1.17.2 (2017-05-04)
|
36
45
|
* b8f45e1 - fix issue with pact document link not displaying #94 (Matt Fellows, Wed May 3 11:23:09 2017 +1000)
|
37
46
|
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Pact Broker
|
2
2
|
|
3
|
-
[](https://travis-ci.org/pact-foundation/pact_broker) [](https://gitter.im/pact-foundation/pact_broker?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
4
4
|
|
5
5
|
The Pact Broker provides a repository for consumer driven contracts created using the pact gem.
|
6
6
|
|
@@ -23,7 +23,7 @@ Features:
|
|
23
23
|
* Tracks changes between Pact versions so you can tell when a consumer has changed its expectations.
|
24
24
|
* [Docker Pact Broker][docker]
|
25
25
|
|
26
|
-
Travis CI Status: [](https://travis-ci.org/pact-foundation/pact_broker)
|
27
27
|
|
28
28
|
### How would I use the Pact Broker?
|
29
29
|
|
@@ -41,47 +41,47 @@ If you don't have a [Pact Broker CI Nerf Gun][nerf], you'll probably want to rea
|
|
41
41
|
|
42
42
|
## Documentation
|
43
43
|
|
44
|
-
See the [Pact Broker Client](https://github.com/
|
44
|
+
See the [Pact Broker Client](https://github.com/pact-foundation/pact_broker-client) for documentation on how to publish a pact to the Pact Broker, and configure the URLs in the provider project.
|
45
45
|
|
46
|
-
See the [wiki](https://github.com/
|
46
|
+
See the [wiki](https://github.com/pact-foundation/pact_broker/wiki) for documentation related to the Pact Broker itself.
|
47
47
|
|
48
48
|
### Screenshots
|
49
49
|
|
50
50
|
#### Index
|
51
51
|
|
52
52
|
* * *
|
53
|
-
<img src="https://raw.githubusercontent.com/wiki/
|
53
|
+
<img src="https://raw.githubusercontent.com/wiki/pact-foundation/pact_broker/images/index.png"/>
|
54
54
|
|
55
55
|
#### Autogenerated documentation
|
56
56
|
|
57
57
|
Paste the pact URL into a browser to view a HTML version of the pact.
|
58
58
|
* * *
|
59
|
-
<img src="https://raw.githubusercontent.com/wiki/
|
59
|
+
<img src="https://raw.githubusercontent.com/wiki/pact-foundation/pact_broker/images/autogenerated_documentation.png"/>
|
60
60
|
|
61
61
|
|
62
62
|
#### Network diagram
|
63
63
|
|
64
64
|
* * *
|
65
|
-
<img src="https://raw.githubusercontent.com/wiki/
|
65
|
+
<img src="https://raw.githubusercontent.com/wiki/pact-foundation/pact_broker/images/network_diagram.png"/>
|
66
66
|
|
67
67
|
#### HAL browser
|
68
68
|
|
69
69
|
Use the embedded HAL browser to navigate the API.
|
70
70
|
* * *
|
71
|
-
<img src="https://raw.githubusercontent.com/wiki/
|
71
|
+
<img src="https://raw.githubusercontent.com/wiki/pact-foundation/pact_broker/images/hal_browser.png"/>
|
72
72
|
|
73
73
|
#### HAL documentation
|
74
74
|
|
75
75
|
Use the HAL browser to view documentation as you browse.
|
76
76
|
* * *
|
77
|
-
<img src="https://raw.githubusercontent.com/wiki/
|
77
|
+
<img src="https://raw.githubusercontent.com/wiki/pact-foundation/pact_broker/images/hal_documentation.png"/>
|
78
78
|
|
79
79
|
## Usage
|
80
80
|
|
81
81
|
### To have a play around on your local machine
|
82
82
|
|
83
83
|
* Install ruby 2.2.0 or later and bundler >= 1.12.0
|
84
|
-
* Run `git clone git@github.com:
|
84
|
+
* Run `git clone git@github.com:pact-foundation/pact_broker.git && cd pact_broker/example`
|
85
85
|
* Run `bundle`
|
86
86
|
* Run `bundle exec rackup -p 8080`
|
87
87
|
* Open [http://localhost:8080](http://localhost:8080) and you should see a list containing the pact between the Zoo App and the Animal Service.
|
@@ -100,7 +100,7 @@ the [Hosted Pact Broker](https://pact.dius.com.au/?utm_source=github&utm_campaig
|
|
100
100
|
You can use the [Pact Broker Docker container][docker] or [Terraform on AWS][terraform] or to roll your own...
|
101
101
|
|
102
102
|
* Create a database using a product that is supported by the Sequel gem (listed on this page http://sequel.jeremyevans.net/rdoc/files/README_rdoc.html). The migrations have been tested on MySQL and PostgreSQL - your mileage will vary on other databases.
|
103
|
-
* __Note:__ It is recommended to use __PostgreSQL__ as it will support JSON search features that are planned in a future release, however MySQL the other [semi supported](https://github.com/
|
103
|
+
* __Note:__ It is recommended to use __PostgreSQL__ as it will support JSON search features that are planned in a future release, however MySQL the other [semi supported](https://github.com/pact-foundation/pact_broker/issues/33) database.
|
104
104
|
* Install ruby 2.2.0 or later and bundler >= 1.12.0
|
105
105
|
* Copy the [example](/example) directory to the location you want to install the application.
|
106
106
|
* Modify the config.ru and Gemfile as desired (eg. choose database driver gem, set your database credentials. Use the "pg" gem if using Postgres.)
|
@@ -110,7 +110,7 @@ You can use the [Pact Broker Docker container][docker] or [Terraform on AWS][ter
|
|
110
110
|
|
111
111
|
[decouple]: http://techblog.realestate.com.au/enter-the-pact-matrix-or-how-to-decouple-the-release-cycles-of-your-microservices/
|
112
112
|
[pact]: https://github.com/realestate-com-au/pact
|
113
|
-
[nerf]: https://github.com/
|
113
|
+
[nerf]: https://github.com/pact-foundation/pact_broker/wiki/pact-broker-ci-nerf-gun
|
114
114
|
[different-teams]: https://github.com/realestate-com-au/pact/wiki/Using-pact-where-the-consumer-team-is-different-from-the-provider-team
|
115
115
|
[docker]: https://hub.docker.com/r/dius/pact-broker
|
116
116
|
[terraform]: https://github.com/nadnerb/terraform-pact-broker
|
@@ -1,10 +1,10 @@
|
|
1
1
|
Sequel.migration do
|
2
2
|
change do
|
3
3
|
create_view(:all_pacts,
|
4
|
-
Sequel::Model.db[:pacts].select(:
|
5
|
-
:
|
6
|
-
:
|
7
|
-
:
|
4
|
+
Sequel::Model.db[:pacts].select(Sequel[:pacts][:id], Sequel[:c][:id].as(:consumer_id), Sequel[:c][:name].as(:consumer_name),
|
5
|
+
Sequel[:cv][:number].as(:consumer_version_number), Sequel[:cv][:order].as(:consumer_version_order),
|
6
|
+
Sequel[:p][:id].as(:provider_id), Sequel[:p][:name].as(:provider_name),
|
7
|
+
Sequel[:pacts][:json_content]).
|
8
8
|
join(:versions, {:id => :version_id}, {:table_alias => :cv, implicit_qualifier: :pacts}).
|
9
9
|
join(:pacticipants, {:id => :pacticipant_id}, {:table_alias => :c, implicit_qualifier: :cv}).
|
10
10
|
join(:pacticipants, {:id => :provider_id}, {:table_alias => :p, implicit_qualifier: :pacts}))
|
@@ -1,10 +1,11 @@
|
|
1
1
|
Sequel.migration do
|
2
2
|
change do
|
3
3
|
create_or_replace_view(:all_pacts,
|
4
|
-
Sequel::Model.db[:pacts].select(
|
5
|
-
:
|
6
|
-
:
|
7
|
-
:
|
4
|
+
Sequel::Model.db[:pacts].select(
|
5
|
+
Sequel[:pacts][:id], Sequel[:c][:id].as(:consumer_id), Sequel[:c][:name].as(:consumer_name),
|
6
|
+
Sequel[:cv][:number].as(:consumer_version_number), Sequel[:cv][:order].as(:consumer_version_order),
|
7
|
+
Sequel[:p][:id].as(:provider_id), Sequel[:p][:name].as(:provider_name),
|
8
|
+
Sequel[:pacts][:json_content], Sequel[:pacts][:created_at], Sequel[:pacts][:updated_at]).
|
8
9
|
join(:versions, {:id => :version_id}, {:table_alias => :cv, implicit_qualifier: :pacts}).
|
9
10
|
join(:pacticipants, {:id => :pacticipant_id}, {:table_alias => :c, implicit_qualifier: :cv}).
|
10
11
|
join(:pacticipants, {:id => :provider_id}, {:table_alias => :p, implicit_qualifier: :pacts}))
|
@@ -4,15 +4,17 @@ require_relative 'migration_helper'
|
|
4
4
|
Sequel.migration do
|
5
5
|
change do
|
6
6
|
create_or_replace_view(:all_pacts,
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
7
|
+
Sequel::Model.db[:pacts].select(
|
8
|
+
Sequel[:pacts][:id],
|
9
|
+
Sequel[:c][:id].as(:consumer_id), Sequel[:c][:name].as(:consumer_name),
|
10
|
+
Sequel[:cv][:id].as(:consumer_version_id), Sequel[:cv][:number].as(:consumer_version_number), Sequel[:cv][:order].as(:consumer_version_order),
|
11
|
+
Sequel[:p][:id].as(:provider_id), Sequel[:p][:name].as(:provider_name),
|
12
|
+
Sequel[:pvc][:sha].as(:pact_version_content_sha), Sequel[:pacts][:created_at], Sequel[:pacts][:updated_at]).
|
13
|
+
join(:versions, {:id => :version_id}, {:table_alias => :cv, implicit_qualifier: :pacts}).
|
14
|
+
join(:pacticipants, {:id => :pacticipant_id}, {:table_alias => :c, implicit_qualifier: :cv}).
|
15
|
+
join(:pacticipants, {:id => :provider_id}, {:table_alias => :p, implicit_qualifier: :pacts}).
|
16
|
+
join(:pact_version_contents, {:sha => :pact_version_content_sha}, {:table_alias => :pvc, implicit_qualifier: :pacts})
|
17
|
+
)
|
18
|
+
|
17
19
|
end
|
18
20
|
end
|
@@ -2,11 +2,12 @@ Sequel.migration do
|
|
2
2
|
up do
|
3
3
|
# The denormalised pact publication details for each publication
|
4
4
|
create_view(:all_pact_publications,
|
5
|
-
Sequel::Model.db[:pact_publications].select(
|
6
|
-
:
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
5
|
+
Sequel::Model.db[:pact_publications].select(
|
6
|
+
Sequel[:pact_publications][:id],
|
7
|
+
Sequel[:c][:id].as(:consumer_id), Sequel[:c][:name].as(:consumer_name),
|
8
|
+
Sequel[:cv][:id].as(:consumer_version_id), Sequel[:cv][:number].as(:consumer_version_number), Sequel[:cv][:order].as(:consumer_version_order),
|
9
|
+
Sequel[:p][:id].as(:provider_id), Sequel[:p][:name].as(:provider_name),
|
10
|
+
Sequel[:pact_publications][:revision_number], Sequel[:pv][:id].as(:pact_version_id), Sequel[:pv][:sha].as(:pact_version_sha), Sequel[:pact_publications][:created_at]).
|
10
11
|
join(:versions, {:id => :consumer_version_id}, {:table_alias => :cv, implicit_qualifier: :pact_publications}).
|
11
12
|
join(:pacticipants, {:id => :pacticipant_id}, {:table_alias => :c, implicit_qualifier: :cv}).
|
12
13
|
join(:pacticipants, {:id => :provider_id}, {:table_alias => :p, implicit_qualifier: :pact_publications}).
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative 'base_decorator'
|
2
|
+
require_relative 'version_decorator'
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
module Api
|
7
|
+
module Decorators
|
8
|
+
|
9
|
+
class VerificationSummaryDecorator < BaseDecorator
|
10
|
+
|
11
|
+
property :success
|
12
|
+
property :provider_summary, as: :providerSummary do
|
13
|
+
property :successful
|
14
|
+
property :failed
|
15
|
+
property :unknown
|
16
|
+
end
|
17
|
+
|
18
|
+
collection :verifications, as: :verificationResults, embedded: true, :extend => PactBroker::Api::Decorators::VerificationDecorator
|
19
|
+
|
20
|
+
link :self do | context |
|
21
|
+
{
|
22
|
+
href: context.fetch(:resource_url),
|
23
|
+
title: "Latest verification results for consumer #{context.fetch(:consumer_name)} version #{context.fetch(:consumer_version_number)}"
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def provider_summary
|
28
|
+
OpenStruct.new(
|
29
|
+
successful: represented.select(&:success).collect(&:provider_name),
|
30
|
+
failed: represented.select{|verification| !verification.success }.collect(&:provider_name))
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -2,7 +2,7 @@ require 'pact_broker/api/resources/base_resource'
|
|
2
2
|
require 'pact_broker/configuration'
|
3
3
|
require 'pact_broker/domain/verification'
|
4
4
|
require 'pact_broker/api/contracts/verification_contract'
|
5
|
-
require 'pact_broker/api/decorators/
|
5
|
+
require 'pact_broker/api/decorators/verification_summary_decorator'
|
6
6
|
|
7
7
|
module PactBroker
|
8
8
|
module Api
|
@@ -24,14 +24,14 @@ module PactBroker
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def to_json
|
27
|
-
|
28
|
-
decorator_for(
|
27
|
+
summary = verification_service.verification_summary_for_consumer_version(identifier_from_path)
|
28
|
+
decorator_for(summary).to_json(user_options: decorator_context(identifier_from_path))
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
32
32
|
|
33
|
-
def decorator_for
|
34
|
-
PactBroker::Api::Decorators::
|
33
|
+
def decorator_for summary
|
34
|
+
PactBroker::Api::Decorators::VerificationSummaryDecorator.new(summary)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
data/lib/pact_broker/app.rb
CHANGED
@@ -3,6 +3,7 @@ require 'pact_broker/db'
|
|
3
3
|
require 'pact_broker/project_root'
|
4
4
|
require 'rack/hal_browser'
|
5
5
|
require 'rack/pact_broker/convert_file_extension_to_accept_header'
|
6
|
+
require 'sucker_punch'
|
6
7
|
|
7
8
|
module PactBroker
|
8
9
|
|
@@ -32,6 +33,7 @@ module PactBroker
|
|
32
33
|
PactBroker::DB.connection = configuration.database_connection
|
33
34
|
PactBroker::DB.connection.timezone = :utc
|
34
35
|
PactBroker::DB.validate_connection_config if configuration.validate_database_connection_config
|
36
|
+
SuckerPunch.logger = configuration.logger
|
35
37
|
|
36
38
|
if configuration.auto_migrate_db
|
37
39
|
logger.info "Migrating database"
|
@@ -8,7 +8,8 @@ module PactBroker
|
|
8
8
|
|
9
9
|
attr_accessor :log_dir, :database_connection, :auto_migrate_db, :use_hal_browser, :html_pact_renderer
|
10
10
|
attr_accessor :validate_database_connection_config, :enable_diagnostic_endpoints, :version_parser
|
11
|
-
attr_accessor :use_case_sensitive_resource_names
|
11
|
+
attr_accessor :use_case_sensitive_resource_names, :order_versions_by_date
|
12
|
+
attr_accessor :semver_formats
|
12
13
|
attr_writer :logger
|
13
14
|
|
14
15
|
def logger
|
@@ -26,6 +27,10 @@ module PactBroker
|
|
26
27
|
config.use_case_sensitive_resource_names = true
|
27
28
|
config.html_pact_renderer = default_html_pact_render
|
28
29
|
config.version_parser = PactBroker::Versions::ParseSemanticVersion
|
30
|
+
# Not recommended to set this to true unless there is no way to
|
31
|
+
# consistently extract an orderable object from the consumer application version number.
|
32
|
+
config.order_versions_by_date = false
|
33
|
+
config.semver_formats = ["%M.%m.%p%s%d","%M.%m", "%M"]
|
29
34
|
config
|
30
35
|
end
|
31
36
|
|
@@ -4,9 +4,17 @@ module PactBroker
|
|
4
4
|
module Domain
|
5
5
|
class OrderVersions
|
6
6
|
|
7
|
+
include PactBroker::Logging
|
8
|
+
# TODO select for update
|
7
9
|
def self.call pacticipant_id
|
8
|
-
|
9
|
-
orderable_versions.
|
10
|
+
|
11
|
+
orderable_versions = PactBroker::Domain::Version.for_update.where(:pacticipant_id => pacticipant_id).order(:created_at, :id).collect{| version | OrderableVersion.new(version) }
|
12
|
+
ordered_versions = if PactBroker.configuration.order_versions_by_date
|
13
|
+
orderable_versions # already ordered in SQL
|
14
|
+
else
|
15
|
+
orderable_versions.sort
|
16
|
+
end
|
17
|
+
ordered_versions.each_with_index{ | version, i | version.update_model(i) }
|
10
18
|
end
|
11
19
|
|
12
20
|
class OrderableVersion
|
@@ -23,9 +31,11 @@ module PactBroker
|
|
23
31
|
end
|
24
32
|
|
25
33
|
def update_model new_order
|
26
|
-
|
27
|
-
|
28
|
-
|
34
|
+
if version_model.order != new_order
|
35
|
+
# Avoid modifying the updated_at flag by doing a manual update
|
36
|
+
# In 99% of cases, this will only set the order of the most recent version
|
37
|
+
PactBroker::Domain::Version.where(id: version_model.id).update(order: new_order)
|
38
|
+
end
|
29
39
|
end
|
30
40
|
end
|
31
41
|
end
|
@@ -22,7 +22,7 @@ module PactBroker
|
|
22
22
|
include PactBroker::Logging
|
23
23
|
include PactBroker::Messages
|
24
24
|
|
25
|
-
attr_accessor :method, :url, :headers, :body, :username, :password
|
25
|
+
attr_accessor :method, :url, :headers, :body, :username, :password, :uuid
|
26
26
|
|
27
27
|
# Reform gets confused by the :method method, as :method is a standard
|
28
28
|
# Ruby method.
|
@@ -35,6 +35,7 @@ module PactBroker
|
|
35
35
|
@password = attributes[:password]
|
36
36
|
@headers = attributes[:headers] || {}
|
37
37
|
@body = attributes[:body]
|
38
|
+
@uuid = attributes[:uuid]
|
38
39
|
end
|
39
40
|
|
40
41
|
def description
|
@@ -64,17 +65,18 @@ module PactBroker
|
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
67
|
-
logger.info "Making webhook request #{to_s}"
|
68
|
+
logger.info "Making webhook #{uuid} request #{to_s}"
|
68
69
|
response = Net::HTTP.start(uri.hostname, uri.port,
|
69
70
|
:use_ssl => uri.scheme == 'https') do |http|
|
70
71
|
http.request req
|
71
72
|
end
|
72
73
|
|
73
|
-
logger.info "Received response
|
74
|
+
logger.info "Received response for webhook #{uuid} status=#{response.code}"
|
75
|
+
logger.debug "body=#{response.body}"
|
74
76
|
WebhookExecutionResult.new(response)
|
75
77
|
|
76
78
|
rescue StandardError => e
|
77
|
-
logger.error "Error executing webhook #{e.class.name} - #{e.message}"
|
79
|
+
logger.error "Error executing webhook #{uuid} #{e.class.name} - #{e.message}"
|
78
80
|
logger.error e.backtrace.join("\n")
|
79
81
|
WebhookExecutionResult.new(nil, e)
|
80
82
|
end
|
data/lib/pact_broker/logging.rb
CHANGED
@@ -20,11 +20,12 @@ module PactBroker
|
|
20
20
|
PactBroker::Domain::Pacticipant.order(:name).all
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
23
|
+
def find_all_pacticipant_versions_in_reverse_order name
|
24
24
|
PactBroker::Domain::Version
|
25
|
-
.select(:
|
25
|
+
.select(Sequel[:versions][:id], Sequel[:versions][:number], Sequel[:versions][:pacticipant_id], Sequel[:versions][:order], Sequel[:versions][:created_at], Sequel[:versions][:updated_at])
|
26
26
|
.join(:pacticipants, {id: :pacticipant_id})
|
27
27
|
.where(name_like(:name, name))
|
28
|
+
.reverse_order(:order)
|
28
29
|
end
|
29
30
|
|
30
31
|
def find_by_name_or_create name
|