pact_broker 1.7.0 → 1.8.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9d2bef5e5437959448b15a75ea7b521c759230ea
4
- data.tar.gz: b160d8c66c450e5fd20d0a9c629c819249967191
3
+ metadata.gz: f8743214a344901e8cc75cc159a44113ec371bcc
4
+ data.tar.gz: e4896ed8041a01d95c50c73366532c56beea87f0
5
5
  SHA512:
6
- metadata.gz: fe2da2b3ccd031e076334878f8e23fc543d17147e1a2ebf3bd209d20a55d2693826febadd760962514c20ee42bb5ed89f862128308fa541320a40479c900ef4a
7
- data.tar.gz: 31f2080bbed54f778972966987629973738ed2e4e9f0a6808f1a184b7bbb6d1bb7c525e38febc9bdc486702cc19c53f65d3b86b30e2e9eb008796473e5cd332c
6
+ metadata.gz: 1af8a1a03263bc9e06adb104945576f023edaff95063f9b0885323d12eff57ccc12aa548c4576a8e0925e02e91070f4380ec69d4e2624f2db1750cba31abe770
7
+ data.tar.gz: 594b39972c370fd2a8bbf60051f6ba825f3fef1e31f3dfbac096dfb6484e81ac4ece3c123f81b796f7849c623af28f402dd43f9321ceb825f1e2c976312d0e76
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@ 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
+ #### 1.8.0 (2015-05-28)
6
+
7
+ * 6c40e9c - Added ability to specify a tag when retrieving pacts for a given provider (Beth Skurrie, Thu May 28 09:03:46 2015 +1000)
8
+ * dda9f1d - Added endpoint to retrieve latest pacts by provider (Beth Skurrie, Sun May 10 21:28:33 2015 +1000)
9
+ * 21e676a - Pact broker example for heroku with basic auth (BrunoChauvet, Sat Apr 25 13:04:54 2015 +1000)
10
+
5
11
  #### 1.7.0 (2015-03-20)
6
12
 
7
13
  * a26402c - Allow configuration of version parsing. (Beth Skurrie, Tue Apr 14 09:39:05 2015 +1000)
data/README.md CHANGED
@@ -18,6 +18,7 @@ Features:
18
18
  * Dynamically generated network diagrams.
19
19
  * Enables a pact version to be tagged (ie. "prod") so a provider can verify itself against a fixed version of a pact to ensure backwards compatibility.
20
20
  * Webhooks to trigger a provider build when a consumer publishes a change to a pact.
21
+ * [Docker Pact Broker][docker]
21
22
 
22
23
  Travis CI Status: [![Build Status](https://travis-ci.org/bethesque/pact_broker.svg?branch=master)](https://travis-ci.org/bethesque/pact_broker)
23
24
 
@@ -88,6 +89,8 @@ Use the HAL browser to view documentation as you browse.
88
89
 
89
90
  ### For reals
90
91
 
92
+ You can use the [Pact Broker Docker container][docker] or...
93
+
91
94
  * 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 milage will vary on other databases.
92
95
  * __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 well supported database.
93
96
  * Install ruby 1.9.3 or later
@@ -101,3 +104,4 @@ Use the HAL browser to view documentation as you browse.
101
104
  [pact]: https://github.com/realestate-com-au/pact
102
105
  [nerf]: https://github.com/bethesque/pact_broker/wiki/pact-broker-ci-nerf-gun
103
106
  [different-teams]: https://github.com/realestate-com-au/pact/wiki/Using-pact-where-the-consumer-team-is-different-from-the-provider-team
107
+ [docker]: https://registry.hub.docker.com/u/dius/pact_broker/
@@ -0,0 +1,20 @@
1
+ Sequel.migration do
2
+ change do
3
+ create_or_replace_view(:latest_tagged_pact_consumer_version_orders,
4
+ "select provider_id, consumer_id, t.name as tag_name, max(consumer_version_order) as latest_consumer_version_order
5
+ from all_pacts ap
6
+ inner join tags t
7
+ on t.version_id = ap.consumer_version_id
8
+ group by provider_id, consumer_id, t.name"
9
+ )
10
+
11
+ create_or_replace_view(:latest_tagged_pacts,
12
+ "select ap.*, lp.tag_name
13
+ from all_pacts ap
14
+ inner join latest_tagged_pact_consumer_version_orders lp
15
+ on ap.consumer_id = lp.consumer_id
16
+ and ap.provider_id = lp.provider_id
17
+ and ap.consumer_version_order = latest_consumer_version_order"
18
+ )
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem "pact_broker"
4
+ gem "pg"
5
+ gem "thin"
@@ -0,0 +1 @@
1
+ web: bundle exec thin start -p $PORT
@@ -0,0 +1,43 @@
1
+ # Example of Pact Broker configuration on heroku with basic authentication
2
+
3
+ ## Create your Pact Broker project
4
+
5
+ ```
6
+ $ mkdir my-pact-broker
7
+ $ cd my-pact-broker
8
+ $ git init
9
+ ```
10
+
11
+ Then copy the files `Gemfile`, `Procfile` and `config.ru` into your project and run bundle
12
+ ```
13
+ $ bundle
14
+ $ gid add .
15
+ $ git commit -m "Initial commit"
16
+ ```
17
+
18
+ It's now time to deploy to heroku! Assuming you already have an account, you need to create a new application with a postgres add-on:
19
+ ```
20
+ $ gem install heroku
21
+ $ heroku create
22
+ $ heroku addons:add heroku-postgresql
23
+ $ heroku config:set PACT_BROKER_USERNAME=admin
24
+ $ heroku config:set PACT_BROKER_PASSWORD=changeme
25
+ $ git push heroku master
26
+ ```
27
+ Your Pact Broker instance is now available!
28
+
29
+ ## Publish consumer pacts - consumer side
30
+ You will need to set these environment variables with your basic auth credentials
31
+ ```
32
+ export PACT_BROKER_USERNAME=admin
33
+ export PACT_BROKER_PASSWORD=changeme
34
+ rake pact:publish
35
+ ```
36
+
37
+ ## Verify pacts - provider side
38
+ In your pact_helper.rb file, you need to specify the basic auth credentials in the pact uris
39
+ ```ruby
40
+ pact_uri URI.encode("http://#{ENV['PACT_BROKER_USERNAME']}:#{ENV['PACT_BROKER_PASSWORD']}@my-pact-broker.herokuapp.com/pacts/provider_pact_endpoint")
41
+ ```
42
+
43
+ Enjoy!
@@ -0,0 +1,19 @@
1
+ require 'fileutils'
2
+ require 'logger'
3
+ require 'sequel'
4
+ require 'pact_broker'
5
+ require 'pg'
6
+
7
+ use Rack::Auth::Basic, "Restricted Area" do |username, password|
8
+ username == ENV['PACT_BROKER_USERNAME'] and password == ENV['PACT_BROKER_PASSWORD']
9
+ end
10
+
11
+ app = PactBroker::App.new do | config |
12
+ # change these from their default values if desired
13
+ # config.log_dir = "./log"
14
+ # config.auto_migrate_db = true
15
+ # config.use_hal_browser = true
16
+ config.database_connection = Sequel.connect(ENV['DATABASE_URL'], adapter: "postgres", encoding: 'utf8')
17
+ end
18
+
19
+ run app
@@ -15,6 +15,7 @@ require 'pact_broker/api/resources/webhook_execution'
15
15
  require 'pact_broker/api/resources/version'
16
16
  require 'pact_broker/api/resources/pact_content_diff'
17
17
  require 'pact_broker/api/resources/previous_distinct_pact_version'
18
+ require 'pact_broker/api/resources/latest_provider_pacts'
18
19
 
19
20
 
20
21
  require 'webmachine/adapters/rack'
@@ -34,6 +35,8 @@ module PactBroker
34
35
  add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'versions', :consumer_version_number], Api::Resources::Pact
35
36
  add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'version', :consumer_version_number, 'previous-distinct'], Api::Resources::PreviousDistinctPactVersion
36
37
  add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'version', :consumer_version_number, 'diff', 'previous-distinct'], Api::Resources::PactContentDiff
38
+ add ['pacts', 'provider', :provider_name, 'latest'], Api::Resources::LatestProviderPacts
39
+ add ['pacts', 'provider', :provider_name, 'latest', :tag], Api::Resources::LatestProviderPacts
37
40
 
38
41
  add ['pact', 'provider', :provider_name, 'consumer', :consumer_name, 'version', :consumer_version_number], Api::Resources::Pact
39
42
  add ['pact', 'provider', :provider_name, 'consumer', :consumer_name, 'latest'], Api::Resources::LatestPact
@@ -0,0 +1,41 @@
1
+ require_relative 'base_decorator'
2
+ require_relative 'pact_version_decorator'
3
+
4
+ module PactBroker
5
+
6
+ module Api
7
+
8
+ module Decorators
9
+
10
+
11
+ class ProviderPactsDecorator < BaseDecorator
12
+
13
+ link :self do | context |
14
+ suffix = context[:tag] ? " with tag '#{context[:tag]}'" : ""
15
+ {
16
+ href: context[:resource_url],
17
+ title: "Latest pact versions for the provider #{context[:provider_name]}#{suffix}"
18
+ }
19
+ end
20
+
21
+ link :provider do | context |
22
+ {
23
+ href: pacticipant_url(context[:base_url], OpenStruct.new(name: context[:provider_name])),
24
+ title: context[:provider_name]
25
+ }
26
+ end
27
+
28
+ links :'pacts' do | context |
29
+ represented.collect do | pact |
30
+ {
31
+ :href => pact_url(context[:base_url], pact),
32
+ :title => pact.name,
33
+ :name => pact.consumer.name
34
+ }
35
+ end
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
@@ -36,6 +36,12 @@ module PactBroker
36
36
  title: 'Pacticipants',
37
37
  templated: false
38
38
  },
39
+ 'pb:latest-provider-pacts' =>
40
+ {
41
+ href: base_url + '/pacts/provider/{provider}/latest',
42
+ title: 'Latest pacts by provider',
43
+ templated: true
44
+ },
39
45
  'pb:webhooks' =>
40
46
  {
41
47
  href: base_url + '/webhooks',
@@ -0,0 +1,34 @@
1
+ require 'pact_broker/api/resources/base_resource'
2
+ require 'pact_broker/configuration'
3
+ require 'pact_broker/api/decorators/provider_pacts_decorator'
4
+
5
+ module PactBroker
6
+ module Api
7
+ module Resources
8
+
9
+ class LatestProviderPacts < BaseResource
10
+
11
+ def content_types_provided
12
+ [["application/hal+json", :to_json]]
13
+ end
14
+
15
+ def allowed_methods
16
+ ["GET"]
17
+ end
18
+
19
+ def resource_exists?
20
+ pacticipant_service.find_pacticipant_by_name(provider_name)
21
+ end
22
+
23
+ def to_json
24
+ PactBroker::Api::Decorators::ProviderPactsDecorator.new(pacts).to_json(decorator_context(identifier_from_path))
25
+ end
26
+
27
+ def pacts
28
+ pact_service.find_latest_pact_versions_for_provider provider_name, tag: identifier_from_path[:tag]
29
+ end
30
+
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,11 @@
1
+ require 'pact_broker/pacts/all_pacts'
2
+
3
+ module PactBroker
4
+ module Pacts
5
+
6
+ class LatestTaggedPacts < AllPacts
7
+ set_dataset(:latest_tagged_pacts)
8
+ end
9
+
10
+ end
11
+ end
@@ -5,6 +5,7 @@ require 'pact_broker/logging'
5
5
  require 'pact_broker/pacts/database_model'
6
6
  require 'pact_broker/pacts/all_pacts'
7
7
  require 'pact_broker/pacts/latest_pacts'
8
+ require 'pact_broker/pacts/latest_tagged_pacts'
8
9
  require 'pact/shared/json_differ'
9
10
 
10
11
  module PactBroker
@@ -37,7 +38,7 @@ module PactBroker
37
38
  DatabaseModel.where(id: id).delete
38
39
  end
39
40
 
40
- def find_all_pacts_between consumer_name, options
41
+ def find_all_pact_versions_between consumer_name, options
41
42
  AllPacts
42
43
  .eager(:tags)
43
44
  .consumer(consumer_name)
@@ -46,6 +47,14 @@ module PactBroker
46
47
  .collect(&:to_domain)
47
48
  end
48
49
 
50
+ def find_latest_pact_versions_for_provider provider_name, tag = nil
51
+ if tag
52
+ LatestTaggedPacts.provider(provider_name).where(tag_name: tag).collect(&:to_domain)
53
+ else
54
+ LatestPacts.provider(provider_name).collect(&:to_domain)
55
+ end
56
+ end
57
+
49
58
  def find_by_version_and_provider version_id, provider_id
50
59
  AllPacts
51
60
  .eager(:tags)
@@ -39,8 +39,12 @@ module PactBroker
39
39
  end
40
40
  end
41
41
 
42
- def find_all_pacts_between consumer, options
43
- pact_repository.find_all_pacts_between consumer, options
42
+ def find_all_pact_versions_between consumer, options
43
+ pact_repository.find_all_pact_versions_between consumer, options
44
+ end
45
+
46
+ def find_latest_pact_versions_for_provider provider_name, options = {}
47
+ pact_repository.find_latest_pact_versions_for_provider provider_name, options[:tag]
44
48
  end
45
49
 
46
50
  def find_previous_distinct_pact_version params
@@ -51,7 +55,7 @@ module PactBroker
51
55
 
52
56
  def find_distinct_pacts_between consumer, options
53
57
  # Assumes pacts are sorted from newest to oldest
54
- all = pact_repository.find_all_pacts_between consumer, options
58
+ all = pact_repository.find_all_pact_versions_between consumer, options
55
59
  distinct = []
56
60
  (0...all.size).each do | i |
57
61
  if i == all.size - 1
@@ -1,3 +1,3 @@
1
1
  module PactBroker
2
- VERSION = '1.7.0'
2
+ VERSION = '1.8.0'
3
3
  end
data/pact_broker.gemspec CHANGED
@@ -30,7 +30,7 @@ Gem::Specification.new do |gem|
30
30
  gem.add_runtime_dependency 'rack'
31
31
  gem.add_runtime_dependency 'redcarpet', '~>3.1'
32
32
  gem.add_runtime_dependency 'pact', '~>1.4'
33
- gem.add_runtime_dependency 'pact-support', '~>0.1', '>=0.1.4'
33
+ gem.add_runtime_dependency 'pact-support', '~>0.4', '>=0.4.2'
34
34
  gem.add_runtime_dependency 'padrino-core', '~>0.12.4'
35
35
  gem.add_runtime_dependency 'haml'
36
36
  gem.add_runtime_dependency 'trailblazer', '~>0.1.0'
@@ -0,0 +1,72 @@
1
+ require 'spec/support/provider_state_builder'
2
+
3
+ describe "Get provider pacts" do
4
+
5
+ let(:path) { "/pacts/provider/Provider/latest" }
6
+ let(:last_response_body) { JSON.parse(subject.body, symbolize_names: true) }
7
+
8
+ subject { get path; last_response }
9
+
10
+ context "when the provider exists" do
11
+
12
+ before do
13
+ ProviderStateBuilder.new
14
+ .create_provider("Provider")
15
+ .create_consumer("Consumer")
16
+ .create_consumer_version("1.0.0")
17
+ .create_consumer_version_tag("prod")
18
+ .create_pact
19
+ .create_consumer_version("1.2.3")
20
+ .create_pact
21
+ .create_consumer("Consumer 2")
22
+ .create_consumer_version("4.5.6")
23
+ .create_pact
24
+ end
25
+
26
+ context "with no tag specified" do
27
+
28
+ it "returns a 200 HAL JSON response" do
29
+ expect(subject).to be_a_hal_json_success_response
30
+ end
31
+
32
+ it "returns a list of links to the pacts" do
33
+ expect(last_response_body[:_links][:pacts].size).to eq 2
34
+ end
35
+ end
36
+
37
+ context "with a tag specified" do
38
+
39
+ let(:path) { "/pacts/provider/Provider/latest/prod" }
40
+
41
+ it "returns a 200 HAL JSON response" do
42
+ expect(subject).to be_a_hal_json_success_response
43
+ end
44
+
45
+ it "returns a list of links to the pacts" do
46
+ expect(last_response_body[:_links][:pacts].size).to eq 1
47
+ end
48
+ end
49
+
50
+ context "with a tag with no pacts" do
51
+
52
+ let(:path) { "/pacts/provider/Provider/latest/foo" }
53
+
54
+ it "returns a 200 HAL JSON response" do
55
+ expect(subject).to be_a_hal_json_success_response
56
+ end
57
+
58
+ it "returns a list of links to the pacts" do
59
+ expect(last_response_body[:_links][:pacts].size).to eq 0
60
+ end
61
+ end
62
+
63
+ end
64
+
65
+ context "when the provider does not exist" do
66
+
67
+ it "returns a 404 response" do
68
+ expect(subject).to be_a_404_response
69
+ end
70
+
71
+ end
72
+ end
@@ -158,7 +158,7 @@ module PactBroker
158
158
 
159
159
  end
160
160
 
161
- describe "#find_all_pacts_between" do
161
+ describe "#find_all_pact_versions_between" do
162
162
 
163
163
  before do
164
164
  ProviderStateBuilder.new
@@ -174,7 +174,7 @@ module PactBroker
174
174
  .create_pact
175
175
  end
176
176
 
177
- subject { Repository.new.find_all_pacts_between consumer_name, :and => provider_name }
177
+ subject { Repository.new.find_all_pact_versions_between consumer_name, :and => provider_name }
178
178
 
179
179
  it "returns the pacts between the specified consumer and provider" do
180
180
  expect(subject.size).to eq 2
@@ -187,6 +187,74 @@ module PactBroker
187
187
 
188
188
  end
189
189
 
190
+ describe "#find_latest_pact_versions_for_provider" do
191
+
192
+ context "with no tag specified" do
193
+ before do
194
+ ProviderStateBuilder.new
195
+ .create_consumer(consumer_name)
196
+ .create_consumer_version("1.0.0")
197
+ .create_provider(provider_name)
198
+ .create_pact
199
+ .create_consumer_version("1.2.3")
200
+ .create_pact
201
+ .create_consumer("another consumer")
202
+ .create_consumer_version("4.0.0")
203
+ .create_pact
204
+ .create_consumer_version("4.5.6")
205
+ .create_pact
206
+ .create_provider("not the provider")
207
+ .create_pact
208
+ end
209
+
210
+ subject { Repository.new.find_latest_pact_versions_for_provider provider_name }
211
+
212
+ it "returns the pacts between the specified consumer and provider" do
213
+ expect(subject.size).to eq 2
214
+ expect(subject.first.consumer.name).to eq consumer_name
215
+ expect(subject.first.provider.name).to eq provider_name
216
+ expect(subject.first.consumer_version.number).to eq "1.2.3"
217
+ expect(subject.first.json_content).to be nil
218
+ expect(subject.last.consumer.name).to eq "another consumer"
219
+ end
220
+ end
221
+
222
+ context "with a tag specified" do
223
+ before do
224
+ ProviderStateBuilder.new
225
+ .create_consumer(consumer_name)
226
+ .create_consumer_version("1.2.3")
227
+ .create_consumer_version_tag("prod")
228
+ .create_provider(provider_name)
229
+ .create_pact
230
+ .create_consumer_version("2.0.0")
231
+ .create_pact
232
+ .create_consumer("another consumer")
233
+ .create_consumer_version("4.5.6")
234
+ .create_pact
235
+ .create_consumer_version("5.0.0")
236
+ .create_consumer_version_tag("prod")
237
+ .create_consumer_version_tag("test")
238
+ .create_pact
239
+ .create_provider("not the provider")
240
+ .create_pact
241
+ end
242
+
243
+ subject { Repository.new.find_latest_pact_versions_for_provider provider_name, "prod" }
244
+
245
+ it "returns the pacts between the specified consumer and provider with the given tag" do
246
+ expect(subject.size).to eq 2
247
+ expect(subject.first.provider.name).to eq provider_name
248
+ expect(subject.first.consumer.name).to eq consumer_name
249
+ expect(subject.first.consumer_version.number).to eq "1.2.3"
250
+ expect(subject.first.json_content).to be nil
251
+ expect(subject.last.consumer.name).to eq "another consumer"
252
+ expect(subject.last.consumer_version.number).to eq "5.0.0"
253
+ end
254
+ end
255
+
256
+ end
257
+
190
258
  describe "find_pact" do
191
259
  before do
192
260
  ProviderStateBuilder.new
@@ -15,7 +15,7 @@ module PactBroker
15
15
  let(:all_pacts) { [pact_4, pact_3, pact_2, pact_1]}
16
16
 
17
17
  before do
18
- allow_any_instance_of(Pacts::Repository).to receive(:find_all_pacts_between).and_return(all_pacts)
18
+ allow_any_instance_of(Pacts::Repository).to receive(:find_all_pact_versions_between).and_return(all_pacts)
19
19
  end
20
20
 
21
21
  subject { Service.find_distinct_pacts_between 'consumer', :and => 'provider' }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact_broker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bethany Skurrie
@@ -10,76 +10,76 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-04-13 00:00:00.000000000 Z
13
+ date: 2015-05-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: httparty
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ">="
19
+ - - '>='
20
20
  - !ruby/object:Gem::Version
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - ">="
26
+ - - '>='
27
27
  - !ruby/object:Gem::Version
28
28
  version: '0'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: json
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - ">="
33
+ - - '>='
34
34
  - !ruby/object:Gem::Version
35
35
  version: '0'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - ">="
40
+ - - '>='
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: roar
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
47
+ - - ~>
48
48
  - !ruby/object:Gem::Version
49
49
  version: 1.0.0.beta2
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - "~>"
54
+ - - ~>
55
55
  - !ruby/object:Gem::Version
56
56
  version: 1.0.0.beta2
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: reform
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - "~>"
61
+ - - ~>
62
62
  - !ruby/object:Gem::Version
63
63
  version: '1.0'
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - "~>"
68
+ - - ~>
69
69
  - !ruby/object:Gem::Version
70
70
  version: '1.0'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: sequel
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - "~>"
75
+ - - ~>
76
76
  - !ruby/object:Gem::Version
77
77
  version: '4.12'
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - "~>"
82
+ - - ~>
83
83
  - !ruby/object:Gem::Version
84
84
  version: '4.12'
85
85
  - !ruby/object:Gem::Dependency
@@ -100,244 +100,244 @@ dependencies:
100
100
  name: versionomy
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
- - - "~>"
103
+ - - ~>
104
104
  - !ruby/object:Gem::Version
105
105
  version: '0.4'
106
106
  type: :runtime
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - "~>"
110
+ - - ~>
111
111
  - !ruby/object:Gem::Version
112
112
  version: '0.4'
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rack
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
- - - ">="
117
+ - - '>='
118
118
  - !ruby/object:Gem::Version
119
119
  version: '0'
120
120
  type: :runtime
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
- - - ">="
124
+ - - '>='
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: redcarpet
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
- - - "~>"
131
+ - - ~>
132
132
  - !ruby/object:Gem::Version
133
133
  version: '3.1'
134
134
  type: :runtime
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  requirements:
138
- - - "~>"
138
+ - - ~>
139
139
  - !ruby/object:Gem::Version
140
140
  version: '3.1'
141
141
  - !ruby/object:Gem::Dependency
142
142
  name: pact
143
143
  requirement: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - "~>"
145
+ - - ~>
146
146
  - !ruby/object:Gem::Version
147
147
  version: '1.4'
148
148
  type: :runtime
149
149
  prerelease: false
150
150
  version_requirements: !ruby/object:Gem::Requirement
151
151
  requirements:
152
- - - "~>"
152
+ - - ~>
153
153
  - !ruby/object:Gem::Version
154
154
  version: '1.4'
155
155
  - !ruby/object:Gem::Dependency
156
156
  name: pact-support
157
157
  requirement: !ruby/object:Gem::Requirement
158
158
  requirements:
159
- - - "~>"
159
+ - - ~>
160
160
  - !ruby/object:Gem::Version
161
- version: '0.1'
162
- - - ">="
161
+ version: '0.4'
162
+ - - '>='
163
163
  - !ruby/object:Gem::Version
164
- version: 0.1.4
164
+ version: 0.4.2
165
165
  type: :runtime
166
166
  prerelease: false
167
167
  version_requirements: !ruby/object:Gem::Requirement
168
168
  requirements:
169
- - - "~>"
169
+ - - ~>
170
170
  - !ruby/object:Gem::Version
171
- version: '0.1'
172
- - - ">="
171
+ version: '0.4'
172
+ - - '>='
173
173
  - !ruby/object:Gem::Version
174
- version: 0.1.4
174
+ version: 0.4.2
175
175
  - !ruby/object:Gem::Dependency
176
176
  name: padrino-core
177
177
  requirement: !ruby/object:Gem::Requirement
178
178
  requirements:
179
- - - "~>"
179
+ - - ~>
180
180
  - !ruby/object:Gem::Version
181
181
  version: 0.12.4
182
182
  type: :runtime
183
183
  prerelease: false
184
184
  version_requirements: !ruby/object:Gem::Requirement
185
185
  requirements:
186
- - - "~>"
186
+ - - ~>
187
187
  - !ruby/object:Gem::Version
188
188
  version: 0.12.4
189
189
  - !ruby/object:Gem::Dependency
190
190
  name: haml
191
191
  requirement: !ruby/object:Gem::Requirement
192
192
  requirements:
193
- - - ">="
193
+ - - '>='
194
194
  - !ruby/object:Gem::Version
195
195
  version: '0'
196
196
  type: :runtime
197
197
  prerelease: false
198
198
  version_requirements: !ruby/object:Gem::Requirement
199
199
  requirements:
200
- - - ">="
200
+ - - '>='
201
201
  - !ruby/object:Gem::Version
202
202
  version: '0'
203
203
  - !ruby/object:Gem::Dependency
204
204
  name: trailblazer
205
205
  requirement: !ruby/object:Gem::Requirement
206
206
  requirements:
207
- - - "~>"
207
+ - - ~>
208
208
  - !ruby/object:Gem::Version
209
209
  version: 0.1.0
210
210
  type: :runtime
211
211
  prerelease: false
212
212
  version_requirements: !ruby/object:Gem::Requirement
213
213
  requirements:
214
- - - "~>"
214
+ - - ~>
215
215
  - !ruby/object:Gem::Version
216
216
  version: 0.1.0
217
217
  - !ruby/object:Gem::Dependency
218
218
  name: sqlite3
219
219
  requirement: !ruby/object:Gem::Requirement
220
220
  requirements:
221
- - - ">="
221
+ - - '>='
222
222
  - !ruby/object:Gem::Version
223
223
  version: '0'
224
224
  type: :development
225
225
  prerelease: false
226
226
  version_requirements: !ruby/object:Gem::Requirement
227
227
  requirements:
228
- - - ">="
228
+ - - '>='
229
229
  - !ruby/object:Gem::Version
230
230
  version: '0'
231
231
  - !ruby/object:Gem::Dependency
232
232
  name: pry
233
233
  requirement: !ruby/object:Gem::Requirement
234
234
  requirements:
235
- - - ">="
235
+ - - '>='
236
236
  - !ruby/object:Gem::Version
237
237
  version: '0'
238
238
  type: :development
239
239
  prerelease: false
240
240
  version_requirements: !ruby/object:Gem::Requirement
241
241
  requirements:
242
- - - ">="
242
+ - - '>='
243
243
  - !ruby/object:Gem::Version
244
244
  version: '0'
245
245
  - !ruby/object:Gem::Dependency
246
246
  name: rake
247
247
  requirement: !ruby/object:Gem::Requirement
248
248
  requirements:
249
- - - "~>"
249
+ - - ~>
250
250
  - !ruby/object:Gem::Version
251
251
  version: '10.0'
252
252
  type: :development
253
253
  prerelease: false
254
254
  version_requirements: !ruby/object:Gem::Requirement
255
255
  requirements:
256
- - - "~>"
256
+ - - ~>
257
257
  - !ruby/object:Gem::Version
258
258
  version: '10.0'
259
259
  - !ruby/object:Gem::Dependency
260
260
  name: fakefs
261
261
  requirement: !ruby/object:Gem::Requirement
262
262
  requirements:
263
- - - "~>"
263
+ - - ~>
264
264
  - !ruby/object:Gem::Version
265
265
  version: '0.4'
266
266
  type: :development
267
267
  prerelease: false
268
268
  version_requirements: !ruby/object:Gem::Requirement
269
269
  requirements:
270
- - - "~>"
270
+ - - ~>
271
271
  - !ruby/object:Gem::Version
272
272
  version: '0.4'
273
273
  - !ruby/object:Gem::Dependency
274
274
  name: mysql2
275
275
  requirement: !ruby/object:Gem::Requirement
276
276
  requirements:
277
- - - "~>"
277
+ - - ~>
278
278
  - !ruby/object:Gem::Version
279
279
  version: 0.3.15
280
280
  type: :development
281
281
  prerelease: false
282
282
  version_requirements: !ruby/object:Gem::Requirement
283
283
  requirements:
284
- - - "~>"
284
+ - - ~>
285
285
  - !ruby/object:Gem::Version
286
286
  version: 0.3.15
287
287
  - !ruby/object:Gem::Dependency
288
288
  name: webmock
289
289
  requirement: !ruby/object:Gem::Requirement
290
290
  requirements:
291
- - - ">="
291
+ - - '>='
292
292
  - !ruby/object:Gem::Version
293
293
  version: '0'
294
294
  type: :development
295
295
  prerelease: false
296
296
  version_requirements: !ruby/object:Gem::Requirement
297
297
  requirements:
298
- - - ">="
298
+ - - '>='
299
299
  - !ruby/object:Gem::Version
300
300
  version: '0'
301
301
  - !ruby/object:Gem::Dependency
302
302
  name: rspec
303
303
  requirement: !ruby/object:Gem::Requirement
304
304
  requirements:
305
- - - "~>"
305
+ - - ~>
306
306
  - !ruby/object:Gem::Version
307
307
  version: '3.0'
308
308
  type: :development
309
309
  prerelease: false
310
310
  version_requirements: !ruby/object:Gem::Requirement
311
311
  requirements:
312
- - - "~>"
312
+ - - ~>
313
313
  - !ruby/object:Gem::Version
314
314
  version: '3.0'
315
315
  - !ruby/object:Gem::Dependency
316
316
  name: rspec-its
317
317
  requirement: !ruby/object:Gem::Requirement
318
318
  requirements:
319
- - - ">="
319
+ - - '>='
320
320
  - !ruby/object:Gem::Version
321
321
  version: '0'
322
322
  type: :development
323
323
  prerelease: false
324
324
  version_requirements: !ruby/object:Gem::Requirement
325
325
  requirements:
326
- - - ">="
326
+ - - '>='
327
327
  - !ruby/object:Gem::Version
328
328
  version: '0'
329
329
  - !ruby/object:Gem::Dependency
330
330
  name: database_cleaner
331
331
  requirement: !ruby/object:Gem::Requirement
332
332
  requirements:
333
- - - ">="
333
+ - - '>='
334
334
  - !ruby/object:Gem::Version
335
335
  version: '0'
336
336
  type: :development
337
337
  prerelease: false
338
338
  version_requirements: !ruby/object:Gem::Requirement
339
339
  requirements:
340
- - - ">="
340
+ - - '>='
341
341
  - !ruby/object:Gem::Version
342
342
  version: '0'
343
343
  description: A server that stores and returns pact files generated by the pact gem.
@@ -350,9 +350,9 @@ executables: []
350
350
  extensions: []
351
351
  extra_rdoc_files: []
352
352
  files:
353
- - ".gitignore"
354
- - ".rspec"
355
- - ".travis.yml"
353
+ - .gitignore
354
+ - .rspec
355
+ - .travis.yml
356
356
  - CHANGELOG.md
357
357
  - Gemfile
358
358
  - README.md
@@ -382,9 +382,14 @@ files:
382
382
  - db/migrations/19_make_pact_version_content_sha_not_nullable.rb
383
383
  - db/migrations/20_add_pact_version_content_sha_to_all_pacts_view.rb
384
384
  - db/migrations/21_recreate_latest_pacts_view.rb
385
+ - db/migrations/22_create_latest_tagged_pacts_view.rb
385
386
  - db/migrations/migration_helper.rb
386
387
  - db/pact_broker_database.sqlite3
387
388
  - example/Gemfile
389
+ - example/basic_auth/Gemfile
390
+ - example/basic_auth/Procfile
391
+ - example/basic_auth/README.md
392
+ - example/basic_auth/config.ru
388
393
  - example/config.ru
389
394
  - example/pact_broker_database.sqlite3
390
395
  - lib/db.rb
@@ -411,6 +416,7 @@ files:
411
416
  - lib/pact_broker/api/decorators/pact_versions_decorator.rb
412
417
  - lib/pact_broker/api/decorators/pacticipant_collection_decorator.rb
413
418
  - lib/pact_broker/api/decorators/pacticipant_decorator.rb
419
+ - lib/pact_broker/api/decorators/provider_pacts_decorator.rb
414
420
  - lib/pact_broker/api/decorators/relationships_csv_decorator.rb
415
421
  - lib/pact_broker/api/decorators/representable_pact.rb
416
422
  - lib/pact_broker/api/decorators/tag_decorator.rb
@@ -427,6 +433,7 @@ files:
427
433
  - lib/pact_broker/api/resources/index.rb
428
434
  - lib/pact_broker/api/resources/latest_pact.rb
429
435
  - lib/pact_broker/api/resources/latest_pacts.rb
436
+ - lib/pact_broker/api/resources/latest_provider_pacts.rb
430
437
  - lib/pact_broker/api/resources/pact.rb
431
438
  - lib/pact_broker/api/resources/pact_content_diff.rb
432
439
  - lib/pact_broker/api/resources/pact_versions.rb
@@ -487,6 +494,7 @@ files:
487
494
  - lib/pact_broker/pacts/database_model.rb
488
495
  - lib/pact_broker/pacts/diff.rb
489
496
  - lib/pact_broker/pacts/latest_pacts.rb
497
+ - lib/pact_broker/pacts/latest_tagged_pacts.rb
490
498
  - lib/pact_broker/pacts/pact_params.rb
491
499
  - lib/pact_broker/pacts/pact_version_content.rb
492
500
  - lib/pact_broker/pacts/repository.rb
@@ -560,6 +568,7 @@ files:
560
568
  - spec/features/delete_pact_spec.rb
561
569
  - spec/features/get_diff.rb
562
570
  - spec/features/get_previous_distinct_version.rb
571
+ - spec/features/get_provider_pacts.rb
563
572
  - spec/features/get_version.rb
564
573
  - spec/features/publish_not_a_pact_spec.rb
565
574
  - spec/features/publish_pact_spec.rb
@@ -692,17 +701,17 @@ require_paths:
692
701
  - lib
693
702
  required_ruby_version: !ruby/object:Gem::Requirement
694
703
  requirements:
695
- - - ">="
704
+ - - '>='
696
705
  - !ruby/object:Gem::Version
697
706
  version: '0'
698
707
  required_rubygems_version: !ruby/object:Gem::Requirement
699
708
  requirements:
700
- - - ">="
709
+ - - '>='
701
710
  - !ruby/object:Gem::Version
702
711
  version: '0'
703
712
  requirements: []
704
713
  rubyforge_project:
705
- rubygems_version: 2.2.2
714
+ rubygems_version: 2.0.14
706
715
  signing_key:
707
716
  specification_version: 4
708
717
  summary: See description
@@ -711,6 +720,7 @@ test_files:
711
720
  - spec/features/delete_pact_spec.rb
712
721
  - spec/features/get_diff.rb
713
722
  - spec/features/get_previous_distinct_version.rb
723
+ - spec/features/get_provider_pacts.rb
714
724
  - spec/features/get_version.rb
715
725
  - spec/features/publish_not_a_pact_spec.rb
716
726
  - spec/features/publish_pact_spec.rb