pact_broker 1.7.0 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
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