pact_broker 2.112.0 → 2.113.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 +12 -0
- data/Gemfile +5 -4
- data/docs/developer/business_domain_models.md +9 -0
- data/lib/pact_broker/api/decorators/provider_states_decorator.rb +19 -0
- data/lib/pact_broker/api/resources/provider_states.rb +38 -0
- data/lib/pact_broker/api.rb +5 -0
- data/lib/pact_broker/db/data_migrations/set_interactions_counts.rb +2 -0
- data/lib/pact_broker/db/migrate_data.rb +28 -16
- data/lib/pact_broker/doc/views/pact/provider-states.markdown +28 -0
- data/lib/pact_broker/matrix/matrix_row_instance_methods.rb +7 -1
- data/lib/pact_broker/pacticipants/repository.rb +4 -1
- data/lib/pact_broker/pacts/content.rb +24 -7
- data/lib/pact_broker/pacts/provider_state_service.rb +22 -0
- data/lib/pact_broker/pacts/selector.rb +4 -0
- data/lib/pact_broker/pacts/selectors.rb +4 -0
- data/lib/pact_broker/services.rb +9 -0
- data/lib/pact_broker/version.rb +1 -1
- data/lib/sequel/extensions/pg_advisory_lock.rb +2 -2
- data/pact_broker.gemspec +1 -3
- metadata +12 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f58c954e3864629cd056224198acfe87df68d7a38ff2a098bf1c7e78541a8d1
|
4
|
+
data.tar.gz: 6f59e94416775c9beb054cd7ef0ca77e055505e99864a8cc0c0dd4c8a0bf3f9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d64bab2b42d053d80a63c797e2a3ee84f2731a8eee85368a31bb1d70a102ef38df362feb7ef9151b2890307944123e0a0ec04acb82e1c7d956f88c12d6935116
|
7
|
+
data.tar.gz: 8c46ee348ffad72bad86d132873e1d812c70585b570d8e63c7b71187dfd653afa1eea795f804b8fb2d2ed3fe1f7d372996ff4eb598fcc17a775cd214be5cb236
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
<a name="v2.113.0"></a>
|
2
|
+
### v2.113.0 (2025-02-13)
|
3
|
+
|
4
|
+
#### Features
|
5
|
+
|
6
|
+
* aggregated provider state endpoint (#734) ([108d11a7](/../../commit/108d11a7))
|
7
|
+
* add more logging to data migrations ([9482d44d](/../../commit/9482d44d))
|
8
|
+
|
9
|
+
#### Bug Fixes
|
10
|
+
|
11
|
+
* make sure last_action_date always returns a DateTime object ([d60c264e](/../../commit/d60c264e))
|
12
|
+
|
1
13
|
<a name="v2.112.0"></a>
|
2
14
|
### v2.112.0 (2024-09-09)
|
3
15
|
|
data/Gemfile
CHANGED
@@ -3,15 +3,17 @@ source "https://rubygems.org"
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
|
6
|
-
gem "rake", "~>
|
6
|
+
gem "rake", "~>13.0"
|
7
7
|
gem "sqlite3", ">=2.0.0"
|
8
8
|
gem "conventional-changelog", "~>1.3"
|
9
9
|
gem "bump", "~> 0.5"
|
10
|
+
gem "padrino-core", ">= 0.14.3", "~> 0.14", require: false
|
11
|
+
gem "sinatra", "~> 3.0", require: false
|
10
12
|
|
11
13
|
group :development do
|
12
14
|
gem "pry-byebug"
|
13
|
-
gem "rubocop", "~>1.
|
14
|
-
gem "rubocop-performance", "~> 1.
|
15
|
+
gem "rubocop", "~>1.7"
|
16
|
+
gem "rubocop-performance", "~> 1.23"
|
15
17
|
gem "sequel-annotate", "~>1.3"
|
16
18
|
gem "yard", "~> 0.9"
|
17
19
|
end
|
@@ -21,7 +23,6 @@ group :test do
|
|
21
23
|
gem "pact", "~>1.14"
|
22
24
|
gem "rspec-pact-matchers", "~>0.1"
|
23
25
|
gem "bundler-audit", "~>0.4"
|
24
|
-
gem "fakefs", "~>0.4"
|
25
26
|
gem "webmock", "~>3.9"
|
26
27
|
gem "rspec", "~>3.0"
|
27
28
|
gem "rspec-its", "~>1.2"
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# Business Domain Models
|
2
|
+
|
3
|
+
Sorry this is so scarce. I'm in a hurry, and this is better than nothing.
|
4
|
+
|
5
|
+

|
6
|
+
|
7
|
+

|
8
|
+
|
9
|
+

|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "pact_broker/api/decorators/base_decorator"
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Api
|
5
|
+
module Decorators
|
6
|
+
class ProviderStateDecorator < BaseDecorator
|
7
|
+
camelize_property_names
|
8
|
+
|
9
|
+
property :name
|
10
|
+
property :params
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
class ProviderStatesDecorator < BaseDecorator
|
15
|
+
collection :providerStates, getter: -> (context) { context[:represented].sort_by(&:name) }, :extend => PactBroker::Api::Decorators::ProviderStateDecorator
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "pact_broker/api/resources/base_resource"
|
2
|
+
require "pact_broker/api/decorators/provider_states_decorator"
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Api
|
6
|
+
module Resources
|
7
|
+
class ProviderStates < BaseResource
|
8
|
+
def content_types_provided
|
9
|
+
[["application/hal+json", :to_json]]
|
10
|
+
end
|
11
|
+
|
12
|
+
def allowed_methods
|
13
|
+
["GET", "OPTIONS"]
|
14
|
+
end
|
15
|
+
|
16
|
+
def resource_exists?
|
17
|
+
!!provider
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_json
|
21
|
+
decorator_class(:provider_states_decorator).new(provider_states).to_json(decorator_options)
|
22
|
+
end
|
23
|
+
|
24
|
+
def policy_name
|
25
|
+
:'pacts::pacts'
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
# attr_reader :provider_states
|
31
|
+
|
32
|
+
def provider_states
|
33
|
+
@provider_states ||= provider_state_service.list_provider_states(provider)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/pact_broker/api.rb
CHANGED
@@ -44,6 +44,11 @@ module PactBroker
|
|
44
44
|
add ["pacts", "provider", :provider_name, "consumer", :consumer_name, "version", :consumer_version_number, "diff", "version", :comparison_consumer_version], Api::Resources::PactContentDiff, {resource_name: "pact_version_diff_by_consumer_version"}
|
45
45
|
add ["pacts", "provider", :provider_name, "consumer", :consumer_name, "pact-version", :pact_version_sha, "diff", "pact-version", :comparison_pact_version_sha], Api::Resources::PactContentDiff, {resource_name: "pact_version_diff_by_pact_version_sha"}
|
46
46
|
|
47
|
+
# Provider states
|
48
|
+
|
49
|
+
add ["pacts", "provider", :provider_name, "provider-states"], Api::Resources::ProviderStates, { resource_name: "provider_states" }
|
50
|
+
|
51
|
+
|
47
52
|
# Verifications
|
48
53
|
add ["pacts", "provider", :provider_name, "consumer", :consumer_name, "pact-version", :pact_version_sha, "verification-results"], Api::Resources::Verifications, {resource_name: "verification_results"}
|
49
54
|
add ["pacts", "provider", :provider_name, "consumer", :consumer_name, "pact-version", :pact_version_sha, "metadata", :metadata, "verification-results"], Api::Resources::Verifications, {resource_name: "verification_results"}
|
@@ -4,6 +4,8 @@ module PactBroker
|
|
4
4
|
module DB
|
5
5
|
module DataMigrations
|
6
6
|
class SetInteractionsCounts
|
7
|
+
# This was never included in PactBroker::DB::MigrateData::MIGRATIONS
|
8
|
+
|
7
9
|
def self.call(connection)
|
8
10
|
self_join = {
|
9
11
|
Sequel[:pact_publications][:consumer_id] => Sequel[:pp2][:consumer_id],
|
@@ -13,23 +13,35 @@ end
|
|
13
13
|
module PactBroker
|
14
14
|
module DB
|
15
15
|
class MigrateData
|
16
|
+
include PactBroker::Logging
|
17
|
+
|
18
|
+
MIGRATIONS = [
|
19
|
+
DataMigrations::SetPacticipantIdsForVerifications,
|
20
|
+
DataMigrations::SetConsumerIdsForPactPublications,
|
21
|
+
DataMigrations::SetLatestVersionSequenceValue,
|
22
|
+
DataMigrations::SetWebhooksEnabled,
|
23
|
+
DataMigrations::DeleteDeprecatedWebhookExecutions,
|
24
|
+
DataMigrations::SetCreatedAtForLatestPactPublications,
|
25
|
+
DataMigrations::SetCreatedAtForLatestVerifications,
|
26
|
+
DataMigrations::SetExtraColumnsForTags,
|
27
|
+
DataMigrations::SetPacticipantDisplayName,
|
28
|
+
DataMigrations::SetWebhookUuid,
|
29
|
+
DataMigrations::SetConsumerVersionOrderForPactPublications,
|
30
|
+
DataMigrations::CreateBranches,
|
31
|
+
DataMigrations::MigrateIntegrations,
|
32
|
+
DataMigrations::MigratePactVersionProviderTagSuccessfulVerifications,
|
33
|
+
DataMigrations::SetContractDataUpdatedAtForIntegrations
|
34
|
+
].freeze
|
35
|
+
|
36
|
+
def self.registered_migrations
|
37
|
+
MIGRATIONS
|
38
|
+
end
|
39
|
+
|
16
40
|
def self.call database_connection, _options = {}
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
DataMigrations::DeleteDeprecatedWebhookExecutions.call(database_connection)
|
22
|
-
DataMigrations::SetCreatedAtForLatestPactPublications.call(database_connection)
|
23
|
-
DataMigrations::SetCreatedAtForLatestVerifications.call(database_connection)
|
24
|
-
DataMigrations::SetExtraColumnsForTags.call(database_connection)
|
25
|
-
DataMigrations::SetPacticipantDisplayName.call(database_connection)
|
26
|
-
DataMigrations::SetWebhookUuid.call(database_connection)
|
27
|
-
DataMigrations::SetConsumerVersionOrderForPactPublications.call(database_connection)
|
28
|
-
DataMigrations::SetExtraColumnsForTags.call(database_connection)
|
29
|
-
DataMigrations::CreateBranches.call(database_connection)
|
30
|
-
DataMigrations::MigrateIntegrations.call(database_connection)
|
31
|
-
DataMigrations::MigratePactVersionProviderTagSuccessfulVerifications.call(database_connection)
|
32
|
-
DataMigrations::SetContractDataUpdatedAtForIntegrations.call(database_connection)
|
41
|
+
registered_migrations.each do | migration |
|
42
|
+
logger.debug "Running data migration #{migration.to_s.split("::").last.gsub(/([a-z\d])([A-Z])/, '\1 \2').split.join("-")}"
|
43
|
+
migration.call(database_connection)
|
44
|
+
end
|
33
45
|
end
|
34
46
|
end
|
35
47
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Provider States - Aggregated view by provider
|
2
|
+
|
3
|
+
Allowed methods: `GET`
|
4
|
+
|
5
|
+
Path: `/pacts/provider/{provider}/provider-states`
|
6
|
+
|
7
|
+
This resource returns a aggregated de-duplicated list of all provider states for a given provider.
|
8
|
+
|
9
|
+
Provider states are collected from the latest pact on the main branch for any dependant consumers.
|
10
|
+
|
11
|
+
Example response
|
12
|
+
|
13
|
+
```json
|
14
|
+
{
|
15
|
+
"providerStates": [
|
16
|
+
{
|
17
|
+
"name": "an error occurs retrieving an alligator"
|
18
|
+
},
|
19
|
+
{
|
20
|
+
"name": "there is an alligator named Mary"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"name": "there is not an alligator named Mary"
|
24
|
+
}
|
25
|
+
]
|
26
|
+
}
|
27
|
+
```
|
28
|
+
|
@@ -129,7 +129,13 @@ module PactBroker
|
|
129
129
|
end
|
130
130
|
|
131
131
|
def last_action_date
|
132
|
-
return_or_raise_if_not_set(:last_action_date)
|
132
|
+
date = return_or_raise_if_not_set(:last_action_date)
|
133
|
+
|
134
|
+
if date.class == String
|
135
|
+
DateTime.parse(date)
|
136
|
+
else
|
137
|
+
date
|
138
|
+
end
|
133
139
|
end
|
134
140
|
|
135
141
|
def has_verification?
|
@@ -37,7 +37,10 @@ module PactBroker
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def find(options = {}, pagination_options = {}, eager_load_associations = [])
|
40
|
-
query = scope_for(PactBroker::Domain::Pacticipant)
|
40
|
+
query = scope_for(PactBroker::Domain::Pacticipant)
|
41
|
+
return [] if query.empty?
|
42
|
+
|
43
|
+
query = query.select_all_qualified
|
41
44
|
query = query.filter(:name, options[:query_string]) if options[:query_string]
|
42
45
|
query = query.label(options[:label_name]) if options[:label_name]
|
43
46
|
query.order_ignore_case(Sequel[:pacticipants][:name]).eager(*eager_load_associations).all_with_pagination_options(pagination_options)
|
@@ -5,7 +5,10 @@ require "pact_broker/hash_refinements"
|
|
5
5
|
|
6
6
|
module PactBroker
|
7
7
|
module Pacts
|
8
|
+
ProviderState = Struct.new(:name, :params)
|
8
9
|
class Content
|
10
|
+
|
11
|
+
|
9
12
|
include GenerateInteractionSha
|
10
13
|
using PactBroker::HashRefinements
|
11
14
|
|
@@ -33,9 +36,21 @@ module PactBroker
|
|
33
36
|
Content.from_hash(SortContent.call(pact_hash))
|
34
37
|
end
|
35
38
|
|
39
|
+
def provider_states
|
40
|
+
messages_and_or_interactions_or_empty_array.flat_map do | interaction |
|
41
|
+
if interaction["providerState"].is_a?(String)
|
42
|
+
[ProviderState.new(interaction["providerState"])]
|
43
|
+
elsif interaction["providerStates"].is_a?(Array)
|
44
|
+
interaction["providerStates"].collect do | provider_state |
|
45
|
+
ProviderState.new(provider_state["name"], provider_state["params"])
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end.compact
|
49
|
+
end
|
50
|
+
|
36
51
|
def interactions_missing_test_results
|
37
|
-
return [] unless
|
38
|
-
|
52
|
+
return [] unless messages_and_or_interactions
|
53
|
+
messages_and_or_interactions.reject do | interaction |
|
39
54
|
interaction["tests"]&.any?
|
40
55
|
end
|
41
56
|
end
|
@@ -90,7 +105,7 @@ module PactBroker
|
|
90
105
|
end
|
91
106
|
|
92
107
|
def interaction_ids
|
93
|
-
|
108
|
+
messages_and_or_interactions_or_empty_array.collect do | interaction |
|
94
109
|
interaction["_id"]
|
95
110
|
end.compact
|
96
111
|
end
|
@@ -116,12 +131,14 @@ module PactBroker
|
|
116
131
|
pact_hash.is_a?(Hash) && pact_hash["interactions"].is_a?(Array) ? pact_hash["interactions"] : nil
|
117
132
|
end
|
118
133
|
|
119
|
-
def
|
120
|
-
messages || interactions
|
134
|
+
def messages_and_or_interactions
|
135
|
+
if messages || interactions
|
136
|
+
(messages || []) + (interactions || [])
|
137
|
+
end
|
121
138
|
end
|
122
139
|
|
123
|
-
def
|
124
|
-
|
140
|
+
def messages_and_or_interactions_or_empty_array
|
141
|
+
messages_and_or_interactions || []
|
125
142
|
end
|
126
143
|
|
127
144
|
def pact_specification_version
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "pact_broker/services"
|
2
|
+
require "pact_broker/pacts/selectors"
|
3
|
+
require "pact_broker/pacts/pact_publication"
|
4
|
+
require "pact_broker/repositories"
|
5
|
+
|
6
|
+
|
7
|
+
module PactBroker
|
8
|
+
module Pacts
|
9
|
+
class ProviderStateService
|
10
|
+
# extend self
|
11
|
+
extend PactBroker::Services
|
12
|
+
extend PactBroker::Repositories::Scopes
|
13
|
+
|
14
|
+
def self.list_provider_states(provider)
|
15
|
+
query = scope_for(PactPublication).eager_for_domain_with_content.for_provider_and_consumer_version_selector(provider, PactBroker::Pacts::Selector.latest_for_main_branch)
|
16
|
+
query.all.flat_map do | pact_publication |
|
17
|
+
pact_publication.to_domain.content_object.provider_states
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -155,6 +155,10 @@ module PactBroker
|
|
155
155
|
new(latest: true, branch: branch)
|
156
156
|
end
|
157
157
|
|
158
|
+
def self.latest_for_main_branch
|
159
|
+
new(latest: true, main_branch: true)
|
160
|
+
end
|
161
|
+
|
158
162
|
def self.latest_for_tag_with_fallback(tag, fallback_tag)
|
159
163
|
new(latest: true, tag: tag, fallback_tag: fallback_tag)
|
160
164
|
end
|
@@ -27,6 +27,10 @@ module PactBroker
|
|
27
27
|
Selectors.new([Selector.latest_for_branch(branch)])
|
28
28
|
end
|
29
29
|
|
30
|
+
def self.create_for_latest_from_main_branch
|
31
|
+
Selectors.new([Selector.latest_for_main_branch])
|
32
|
+
end
|
33
|
+
|
30
34
|
def self.create_for_overall_latest
|
31
35
|
Selectors.new([Selector.overall_latest])
|
32
36
|
end
|
data/lib/pact_broker/services.rb
CHANGED
@@ -93,6 +93,10 @@ module PactBroker
|
|
93
93
|
get_service(:branch_service)
|
94
94
|
end
|
95
95
|
|
96
|
+
def provider_state_service
|
97
|
+
get_service(:provider_state_service)
|
98
|
+
end
|
99
|
+
|
96
100
|
# rubocop: disable Metrics/MethodLength
|
97
101
|
def register_default_services
|
98
102
|
register_service(:index_service) do
|
@@ -194,6 +198,11 @@ module PactBroker
|
|
194
198
|
require "pact_broker/versions/branch_service"
|
195
199
|
PactBroker::Versions::BranchService
|
196
200
|
end
|
201
|
+
|
202
|
+
register_service(:provider_state_service) do
|
203
|
+
require "pact_broker/pacts/provider_state_service"
|
204
|
+
PactBroker::Pacts::ProviderStateService
|
205
|
+
end
|
197
206
|
end
|
198
207
|
# rubocop: enable Metrics/MethodLength
|
199
208
|
end
|
data/lib/pact_broker/version.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
# locks to be registered because different threads running the same code
|
4
4
|
# should not cause a Sequel::Error to be raised.
|
5
5
|
# Also, I wanted it to use Concurrent::Hash for multi-threaded environments.
|
6
|
+
# Made minor change in begin ensure block in with_advisory_lock method.
|
6
7
|
|
7
8
|
require "sequel"
|
8
9
|
require "zlib"
|
@@ -57,10 +58,9 @@ module Sequel
|
|
57
58
|
synchronize do
|
58
59
|
if get(Sequel.function(lock_function, *function_params))
|
59
60
|
begin
|
60
|
-
|
61
|
+
yield
|
61
62
|
ensure
|
62
63
|
get(Sequel.function(UNLOCK_FUNCTION, *function_params))
|
63
|
-
result
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
data/pact_broker.gemspec
CHANGED
@@ -60,9 +60,7 @@ Gem::Specification.new do |gem|
|
|
60
60
|
gem.add_runtime_dependency "semver2", "~> 3.4.2"
|
61
61
|
gem.add_runtime_dependency "rack", ">= 2.2.3", "~> 2.2" # TODO update to 3
|
62
62
|
gem.add_runtime_dependency "redcarpet", ">= 3.5.1", "~>3.5"
|
63
|
-
gem.add_runtime_dependency "pact-support" , "
|
64
|
-
gem.add_runtime_dependency "padrino-core", ">= 0.14.3", "~> 0.14"
|
65
|
-
gem.add_runtime_dependency "sinatra", "~> 3.0"
|
63
|
+
gem.add_runtime_dependency "pact-support" , ">= 1.21.2", "~> 1.21"
|
66
64
|
gem.add_runtime_dependency "haml", "~>5.0"
|
67
65
|
gem.add_runtime_dependency "sucker_punch", "~>3.0"
|
68
66
|
gem.add_runtime_dependency "rack-protection", "~> 3.0"
|
metadata
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact_broker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.113.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bethany Skurrie
|
8
8
|
- Sergei Matheson
|
9
9
|
- Warner Godfrey
|
10
|
-
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2025-02-13 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: json
|
@@ -186,58 +185,24 @@ dependencies:
|
|
186
185
|
version: '3.5'
|
187
186
|
- !ruby/object:Gem::Dependency
|
188
187
|
name: pact-support
|
189
|
-
requirement: !ruby/object:Gem::Requirement
|
190
|
-
requirements:
|
191
|
-
- - "~>"
|
192
|
-
- !ruby/object:Gem::Version
|
193
|
-
version: '1.16'
|
194
|
-
- - ">="
|
195
|
-
- !ruby/object:Gem::Version
|
196
|
-
version: 1.16.4
|
197
|
-
type: :runtime
|
198
|
-
prerelease: false
|
199
|
-
version_requirements: !ruby/object:Gem::Requirement
|
200
|
-
requirements:
|
201
|
-
- - "~>"
|
202
|
-
- !ruby/object:Gem::Version
|
203
|
-
version: '1.16'
|
204
|
-
- - ">="
|
205
|
-
- !ruby/object:Gem::Version
|
206
|
-
version: 1.16.4
|
207
|
-
- !ruby/object:Gem::Dependency
|
208
|
-
name: padrino-core
|
209
188
|
requirement: !ruby/object:Gem::Requirement
|
210
189
|
requirements:
|
211
190
|
- - ">="
|
212
191
|
- !ruby/object:Gem::Version
|
213
|
-
version:
|
192
|
+
version: 1.21.2
|
214
193
|
- - "~>"
|
215
194
|
- !ruby/object:Gem::Version
|
216
|
-
version: '
|
195
|
+
version: '1.21'
|
217
196
|
type: :runtime
|
218
197
|
prerelease: false
|
219
198
|
version_requirements: !ruby/object:Gem::Requirement
|
220
199
|
requirements:
|
221
200
|
- - ">="
|
222
201
|
- !ruby/object:Gem::Version
|
223
|
-
version:
|
224
|
-
- - "~>"
|
225
|
-
- !ruby/object:Gem::Version
|
226
|
-
version: '0.14'
|
227
|
-
- !ruby/object:Gem::Dependency
|
228
|
-
name: sinatra
|
229
|
-
requirement: !ruby/object:Gem::Requirement
|
230
|
-
requirements:
|
231
|
-
- - "~>"
|
232
|
-
- !ruby/object:Gem::Version
|
233
|
-
version: '3.0'
|
234
|
-
type: :runtime
|
235
|
-
prerelease: false
|
236
|
-
version_requirements: !ruby/object:Gem::Requirement
|
237
|
-
requirements:
|
202
|
+
version: 1.21.2
|
238
203
|
- - "~>"
|
239
204
|
- !ruby/object:Gem::Version
|
240
|
-
version: '
|
205
|
+
version: '1.21'
|
241
206
|
- !ruby/object:Gem::Dependency
|
242
207
|
name: haml
|
243
208
|
requirement: !ruby/object:Gem::Requirement
|
@@ -582,6 +547,7 @@ files:
|
|
582
547
|
- docs/api/PACTICIPANTS.md
|
583
548
|
- docs/api/PAGINATION.md
|
584
549
|
- docs/api/WEBHOOKS.md
|
550
|
+
- docs/developer/business_domain_models.md
|
585
551
|
- docs/developer/design_pattern_for_eager_loading_collections.md
|
586
552
|
- docs/developer/matrix.md
|
587
553
|
- docs/developer/rack.md
|
@@ -672,6 +638,7 @@ files:
|
|
672
638
|
- lib/pact_broker/api/decorators/pacts_for_verification_query_decorator.rb
|
673
639
|
- lib/pact_broker/api/decorators/pagination_links.rb
|
674
640
|
- lib/pact_broker/api/decorators/provider_pacts_decorator.rb
|
641
|
+
- lib/pact_broker/api/decorators/provider_states_decorator.rb
|
675
642
|
- lib/pact_broker/api/decorators/publish_contract_decorator.rb
|
676
643
|
- lib/pact_broker/api/decorators/publish_contracts_decorator.rb
|
677
644
|
- lib/pact_broker/api/decorators/publish_contracts_results_decorator.rb
|
@@ -774,6 +741,7 @@ files:
|
|
774
741
|
- lib/pact_broker/api/resources/previous_distinct_pact_version.rb
|
775
742
|
- lib/pact_broker/api/resources/provider_pacts.rb
|
776
743
|
- lib/pact_broker/api/resources/provider_pacts_for_verification.rb
|
744
|
+
- lib/pact_broker/api/resources/provider_states.rb
|
777
745
|
- lib/pact_broker/api/resources/publish_contracts.rb
|
778
746
|
- lib/pact_broker/api/resources/relationships.rb
|
779
747
|
- lib/pact_broker/api/resources/released_version.rb
|
@@ -899,6 +867,7 @@ files:
|
|
899
867
|
- lib/pact_broker/doc/views/pact/latest-pact-version.markdown
|
900
868
|
- lib/pact_broker/doc/views/pact/matrix-for-consumer-version.markdown
|
901
869
|
- lib/pact_broker/doc/views/pact/pact-webhooks.markdown
|
870
|
+
- lib/pact_broker/doc/views/pact/provider-states.markdown
|
902
871
|
- lib/pact_broker/doc/views/pact/publish-verification-results.markdown
|
903
872
|
- lib/pact_broker/doc/views/pact/tag-prod-version.markdown
|
904
873
|
- lib/pact_broker/doc/views/pact/tag-version.markdown
|
@@ -1000,6 +969,7 @@ files:
|
|
1000
969
|
- lib/pact_broker/pacts/pacts_for_verification_repository.rb
|
1001
970
|
- lib/pact_broker/pacts/parse.rb
|
1002
971
|
- lib/pact_broker/pacts/placeholder_pact.rb
|
972
|
+
- lib/pact_broker/pacts/provider_state_service.rb
|
1003
973
|
- lib/pact_broker/pacts/repository.rb
|
1004
974
|
- lib/pact_broker/pacts/selected_pact.rb
|
1005
975
|
- lib/pact_broker/pacts/selector.rb
|
@@ -1254,7 +1224,6 @@ homepage: https://github.com/pact-foundation/pact_broker
|
|
1254
1224
|
licenses:
|
1255
1225
|
- MIT
|
1256
1226
|
metadata: {}
|
1257
|
-
post_install_message:
|
1258
1227
|
rdoc_options: []
|
1259
1228
|
require_paths:
|
1260
1229
|
- lib
|
@@ -1269,8 +1238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1269
1238
|
- !ruby/object:Gem::Version
|
1270
1239
|
version: '0'
|
1271
1240
|
requirements: []
|
1272
|
-
rubygems_version: 3.
|
1273
|
-
signing_key:
|
1241
|
+
rubygems_version: 3.6.3
|
1274
1242
|
specification_version: 4
|
1275
1243
|
summary: See description
|
1276
1244
|
test_files: []
|