pact_broker 0.0.4 → 0.0.5
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.
- data/CHANGELOG.md +16 -2
- data/Gemfile.lock +12 -21
- data/config.ru +2 -1
- data/db/migrations/05_add_order_column_to_version.rb +7 -0
- data/db/pact_broker_database.sqlite3 +0 -0
- data/lib/pact_broker/api.rb +23 -11
- data/lib/pact_broker/api/representors.rb +4 -1
- data/lib/pact_broker/api/representors/pact_broker_urls.rb +8 -0
- data/lib/pact_broker/api/representors/pact_collection_representor.rb +34 -0
- data/lib/pact_broker/api/representors/pact_pacticipant_representor.rb +27 -0
- data/lib/pact_broker/api/representors/pact_representor.rb +27 -0
- data/lib/pact_broker/api/representors/pacticipant_collection_representor.rb +20 -0
- data/lib/pact_broker/api/representors/pacticipant_empty_collection_representor.rb +33 -0
- data/lib/pact_broker/api/representors/representable_pact.rb +19 -0
- data/lib/pact_broker/api/representors/version_representor.rb +1 -0
- data/lib/pact_broker/models/order_versions.rb +33 -0
- data/lib/pact_broker/models/pact.rb +7 -2
- data/lib/pact_broker/models/pacticipant.rb +3 -1
- data/lib/pact_broker/models/version.rb +7 -1
- data/lib/pact_broker/repositories/pact_repository.rb +26 -5
- data/lib/pact_broker/resources/json_resource.rb +37 -0
- data/lib/pact_broker/resources/latest_pact.rb +41 -0
- data/lib/pact_broker/resources/latest_pacts.rb +49 -0
- data/lib/pact_broker/resources/pact.rb +49 -0
- data/lib/pact_broker/resources/pacticipant.rb +80 -0
- data/lib/pact_broker/resources/pacticipants.rb +41 -0
- data/lib/pact_broker/services/pact_service.rb +11 -9
- data/lib/pact_broker/version.rb +1 -1
- data/pact_broker.gemspec +2 -3
- data/spec/lib/pact_broker/api/representors/pact_collection_representor_spec.rb +23 -0
- data/spec/lib/pact_broker/api/representors/representable_pact_spec.rb +29 -0
- data/spec/lib/pact_broker/models/order_versions_spec.rb +23 -0
- data/spec/lib/pact_broker/repositories/pact_repository_spec.rb +39 -0
- data/spec/service_consumers/pact_helper.rb +2 -19
- data/spec/service_consumers/provider_states_for_pact_broker_client.rb +1 -48
- data/spec/spec_helper.rb +19 -0
- data/spec/support/provider_state_builder.rb +91 -0
- metadata +32 -29
- data/lib/pact_broker/api/base_api.rb +0 -40
- data/lib/pact_broker/api/index_api.rb +0 -23
- data/lib/pact_broker/api/pact_api.rb +0 -33
- data/lib/pact_broker/api/pacticipant_api.rb +0 -54
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,20 @@ Do this to generate your change history
|
|
2
2
|
|
3
3
|
$ git log --date=relative --pretty=format:' * %h - %s (%an, %ad)' 'package/pact-broker-0.0.PRODVERSION'..'package/pact-broker-0.0.NEWVERSION'
|
4
4
|
|
5
|
-
#### 0.0.
|
5
|
+
#### 0.0.5 (2013-11-13)
|
6
6
|
|
7
|
-
*
|
7
|
+
* 2cf987c - Added data migration to script which adds order column (Beth, 56 minutes ago)
|
8
|
+
* 9c709a9 - Changing queries to use new order column. (Beth, 61 minutes ago)
|
9
|
+
* 173f231 - Renaming var (Beth, 65 minutes ago)
|
10
|
+
* f9be93d - Renamed SortVersions to OrderVersions (Beth, 66 minutes ago)
|
11
|
+
* ca6e479 - Added SortVersions as an after version save hook (Beth, 69 minutes ago)
|
12
|
+
* 23cd1a3 - Adding order column to version table (Beth, 11 hours ago)
|
13
|
+
* c504e5f - Fixing application/json+hal to application/hal+json (Beth, 2 days ago)
|
14
|
+
* 1d24b9b - Removing old sinatra API (Beth, 2 days ago)
|
15
|
+
* fd1832c - WIP. Converting to use Webmachine (Beth, 2 days ago)
|
16
|
+
* 0b096a4 - Redoing the the URLs yet again (Beth, 3 days ago)
|
17
|
+
* 0934d89 - Implementing list latest pacts (Beth, 3 days ago)
|
18
|
+
* ed2d354 - Changed one_to_one associations to many_to_one (Beth, 4 days ago)
|
19
|
+
* 28de0ea - WIP implementing pacts/latest. (Beth, 6 days ago)
|
20
|
+
* 1cd36e6 - Changing to new /pacts/latest URL format (Beth, 6 days ago)
|
21
|
+
* 54f8fc3 - Writing underlying code to find the latest pact for each consumer/provider pair. (Beth, 6 days ago)
|
data/Gemfile.lock
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
pact_broker (0.0.
|
4
|
+
pact_broker (0.0.5)
|
5
5
|
httparty
|
6
6
|
json
|
7
7
|
roar
|
8
8
|
sequel
|
9
|
-
sinatra
|
10
|
-
sinatra-contrib
|
11
|
-
sinatra-param
|
12
9
|
sqlite3
|
10
|
+
versionomy
|
11
|
+
webmachine
|
13
12
|
|
14
13
|
GEM
|
15
14
|
remote: https://rubygems.org/
|
16
15
|
specs:
|
16
|
+
as-notifications (1.0.1)
|
17
17
|
awesome_print (1.1.0)
|
18
|
-
|
18
|
+
blockenspiel (0.4.5)
|
19
19
|
builder (3.2.2)
|
20
20
|
ci_reporter (1.9.0)
|
21
21
|
builder (>= 2.1.2)
|
@@ -35,6 +35,7 @@ GEM
|
|
35
35
|
httparty (0.12.0)
|
36
36
|
json (~> 1.8)
|
37
37
|
multi_xml (>= 0.5.2)
|
38
|
+
i18n (0.6.5)
|
38
39
|
json (1.8.1)
|
39
40
|
method_source (0.8.2)
|
40
41
|
mini_portile (0.5.2)
|
@@ -56,8 +57,6 @@ GEM
|
|
56
57
|
method_source (~> 0.8)
|
57
58
|
slop (~> 3.4)
|
58
59
|
rack (1.5.2)
|
59
|
-
rack-protection (1.5.1)
|
60
|
-
rack
|
61
60
|
rack-test (0.6.2)
|
62
61
|
rack (>= 1.0)
|
63
62
|
rake (10.0.4)
|
@@ -84,19 +83,6 @@ GEM
|
|
84
83
|
multi_json (~> 1.0)
|
85
84
|
simplecov-html (~> 0.7.1)
|
86
85
|
simplecov-html (0.7.1)
|
87
|
-
sinatra (1.4.4)
|
88
|
-
rack (~> 1.4)
|
89
|
-
rack-protection (~> 1.4)
|
90
|
-
tilt (~> 1.3, >= 1.3.4)
|
91
|
-
sinatra-contrib (1.4.1)
|
92
|
-
backports (>= 2.0)
|
93
|
-
multi_json
|
94
|
-
rack-protection
|
95
|
-
rack-test
|
96
|
-
sinatra (~> 1.4.0)
|
97
|
-
tilt (~> 1.3)
|
98
|
-
sinatra-param (1.0.0)
|
99
|
-
sinatra (~> 1.3)
|
100
86
|
slop (3.4.6)
|
101
87
|
sqlite3 (1.3.8)
|
102
88
|
thin (1.6.1)
|
@@ -104,7 +90,12 @@ GEM
|
|
104
90
|
eventmachine (>= 1.0.0)
|
105
91
|
rack (>= 1.0.0)
|
106
92
|
thor (0.18.1)
|
107
|
-
|
93
|
+
versionomy (0.4.4)
|
94
|
+
blockenspiel (>= 0.4.5)
|
95
|
+
webmachine (1.2.1)
|
96
|
+
as-notifications (~> 1.0)
|
97
|
+
i18n (>= 0.4.0)
|
98
|
+
multi_json
|
108
99
|
|
109
100
|
PLATFORMS
|
110
101
|
ruby
|
data/config.ru
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/config/boot'
|
2
2
|
require 'pact_broker/db'
|
3
3
|
require 'pact_broker/api'
|
4
|
+
require 'pact_broker/resources/pact'
|
4
5
|
|
5
6
|
|
6
7
|
use Rack::Static, root: 'public', urls: ['/favicon.ico']
|
7
8
|
|
8
9
|
run Rack::URLMap.new(
|
9
|
-
'/' => PactBroker::API
|
10
|
+
'/' => PactBroker::API
|
10
11
|
)
|
Binary file
|
data/lib/pact_broker/api.rb
CHANGED
@@ -1,18 +1,30 @@
|
|
1
|
-
require '
|
1
|
+
require 'pact_broker/resources/pact'
|
2
|
+
require 'pact_broker/resources/latest_pact'
|
3
|
+
require 'pact_broker/resources/latest_pacts'
|
4
|
+
require 'pact_broker/resources/pacticipant'
|
5
|
+
require 'pact_broker/resources/pacticipants'
|
2
6
|
|
3
|
-
|
4
|
-
require_relative 'api/pacticipant_api'
|
5
|
-
require_relative 'api/pact_api'
|
7
|
+
require 'webmachine/adapters/rack'
|
6
8
|
|
7
9
|
module PactBroker
|
8
|
-
class API < Sinatra::Base
|
9
|
-
# content_type :json, 'application/json'
|
10
|
-
# content_type :xml, 'text/xml'
|
11
|
-
# default_format :json
|
12
10
|
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
API ||= begin
|
12
|
+
pact_api = Webmachine::Application.new do |app|
|
13
|
+
app.routes do
|
14
|
+
add(['trace', '*'], Webmachine::Trace::TraceResource) unless ENV['RACK_ENV'] == 'production'
|
15
|
+
add ['pact', 'provider', :provider_name, 'consumer', :consumer_name, 'version', :consumer_version_number], Resources::Pact
|
16
|
+
add ['pact', 'provider', :provider_name, 'consumer', :consumer_name, 'latest'], Resources::LatestPact
|
17
|
+
add ['pacts', 'latest'], Resources::LatestPacts
|
18
|
+
add ['pacticipants'], Resources::Pacticipants
|
19
|
+
add ['pacticipants', :name], Resources::Pacticipant
|
20
|
+
end
|
21
|
+
end
|
16
22
|
|
23
|
+
pact_api.configure do |config|
|
24
|
+
config.adapter = :Rack
|
25
|
+
end
|
26
|
+
|
27
|
+
pact_api.adapter
|
17
28
|
end
|
29
|
+
|
18
30
|
end
|
@@ -1,3 +1,6 @@
|
|
1
1
|
require 'pact_broker/api/representors/pacticipant_representor'
|
2
2
|
require 'pact_broker/api/representors/pacticipant_collection_representor'
|
3
|
-
require 'pact_broker/api/representors/version_representor'
|
3
|
+
require 'pact_broker/api/representors/version_representor'
|
4
|
+
require 'pact_broker/api/representors/pact_collection_representor'
|
5
|
+
require 'pact_broker/api/representors/pact_pacticipant_representor'
|
6
|
+
require 'pact_broker/api/representors/pact_representor'
|
@@ -26,6 +26,14 @@ module PactBroker
|
|
26
26
|
"#{pacticipant_url(version.pacticipant)}/versions/#{version.number}"
|
27
27
|
end
|
28
28
|
|
29
|
+
def pact_url pact
|
30
|
+
"#{version_url(pact.consumer_version)}/pacts/#{url_encode(pact.provider.name)}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def latest_pacts_url
|
34
|
+
"#{base_url}/pacts/latest"
|
35
|
+
end
|
36
|
+
|
29
37
|
def url_encode param
|
30
38
|
ERB::Util.url_encode param
|
31
39
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'roar/representer/json/hal'
|
2
|
+
require_relative 'pact_broker_urls'
|
3
|
+
require_relative 'version_representor'
|
4
|
+
require_relative 'pact_representor'
|
5
|
+
|
6
|
+
module PactBroker
|
7
|
+
|
8
|
+
module Api
|
9
|
+
|
10
|
+
module Representors
|
11
|
+
|
12
|
+
module PactCollectionRepresenter
|
13
|
+
include Roar::Representer::JSON::HAL
|
14
|
+
include PactBroker::Api::PactBrokerUrls
|
15
|
+
|
16
|
+
|
17
|
+
collection :pacts, :class => PactBroker::Models::Pact, :extend => PactBroker::Api::Representors::PactRepresenter
|
18
|
+
|
19
|
+
def pacts
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
link :self do
|
24
|
+
latest_pacts_url
|
25
|
+
end
|
26
|
+
|
27
|
+
links :pacts do
|
28
|
+
collect{ | pact | {:href => pact_url(pact) } }
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'roar/representer/json/hal'
|
2
|
+
require_relative 'pact_broker_urls'
|
3
|
+
require_relative 'version_representor'
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
|
7
|
+
module Api
|
8
|
+
|
9
|
+
module Representors
|
10
|
+
|
11
|
+
module PactPacticipantRepresenter
|
12
|
+
include Roar::Representer::JSON::HAL
|
13
|
+
include Roar::Representer::JSON::HAL::Links
|
14
|
+
include PactBroker::Api::PactBrokerUrls
|
15
|
+
|
16
|
+
property :name
|
17
|
+
property :repository_url
|
18
|
+
property :version, :class => "PactBroker::Models::Version", :extend => PactBroker::Api::Representors::VersionRepresenter, :embedded => true
|
19
|
+
|
20
|
+
link :self do
|
21
|
+
pacticipant_url(self)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'roar/representer/json/hal'
|
2
|
+
require_relative 'pact_broker_urls'
|
3
|
+
require_relative 'pact_pacticipant_representor'
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
|
7
|
+
module Api
|
8
|
+
|
9
|
+
module Representors
|
10
|
+
|
11
|
+
module PactRepresenter
|
12
|
+
include Roar::Representer::JSON::HAL
|
13
|
+
include Roar::Representer::JSON::HAL::Links
|
14
|
+
include PactBroker::Api::PactBrokerUrls
|
15
|
+
|
16
|
+
|
17
|
+
property :consumer, :extend => PactBroker::Api::Representors::PactPacticipantRepresenter, :embedded => true
|
18
|
+
property :provider, :extend => PactBroker::Api::Representors::PactPacticipantRepresenter, :embedded => true
|
19
|
+
|
20
|
+
link :self do
|
21
|
+
pact_url(self)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -2,6 +2,26 @@ require 'roar/representer/json/hal'
|
|
2
2
|
require_relative 'pact_broker_urls'
|
3
3
|
require_relative 'version_representor'
|
4
4
|
|
5
|
+
module Roar
|
6
|
+
module Representer
|
7
|
+
module Feature
|
8
|
+
|
9
|
+
module Hypermedia
|
10
|
+
|
11
|
+
#Monkey patch alert! Get "no method rel for Nil" when there is an empty array
|
12
|
+
#in links. Cannot reproduce this in the roar tests :(
|
13
|
+
alias_method :original_compile_links_for, :compile_links_for
|
14
|
+
|
15
|
+
def compile_links_for configs, *args
|
16
|
+
original_compile_links_for(configs, *args).select(&:any?)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
5
25
|
module PactBroker
|
6
26
|
|
7
27
|
module Api
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'roar/representer/json/hal'
|
2
|
+
require_relative 'pact_broker_urls'
|
3
|
+
require_relative 'version_representor'
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
|
7
|
+
module Api
|
8
|
+
|
9
|
+
module Representors
|
10
|
+
|
11
|
+
module PacticipantCollectionRepresenter
|
12
|
+
include Roar::Representer::JSON::HAL
|
13
|
+
include PactBroker::Api::PactBrokerUrls
|
14
|
+
|
15
|
+
|
16
|
+
collection :pacticipants, :class => PactBroker::Models::Pacticipant, :extend => PactBroker::Api::Representors::PacticipantRepresenter
|
17
|
+
|
18
|
+
def pacticipants
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
link :self do
|
23
|
+
pacticipants_url
|
24
|
+
end
|
25
|
+
|
26
|
+
links :pacticipants do
|
27
|
+
collect{ | pacticipant | {:href => pacticipant_url(pacticipant), :name => pacticipant.name } }
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Api
|
5
|
+
module Representors
|
6
|
+
class RepresentablePact
|
7
|
+
|
8
|
+
attr_reader :consumer, :provider, :consumer_version
|
9
|
+
|
10
|
+
def initialize pact
|
11
|
+
@consumer_version = pact.consumer_version
|
12
|
+
@consumer = OpenStruct.new(:version => @consumer_version, :name => pact.consumer.name)
|
13
|
+
@provider = OpenStruct.new(:version => nil, :name => pact.provider.name)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'versionomy'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Models
|
5
|
+
class OrderVersions
|
6
|
+
|
7
|
+
def self.call pacticipant_id
|
8
|
+
orderable_versions = PactBroker::Models::Version.where(:pacticipant_id => pacticipant_id).all.collect{| version | OrderableVersion.new(version) }
|
9
|
+
orderable_versions.sort.each_with_index{ | version, i | version.update_model(i) }
|
10
|
+
end
|
11
|
+
|
12
|
+
class OrderableVersion
|
13
|
+
|
14
|
+
attr_accessor :version_model, :sortable_number
|
15
|
+
|
16
|
+
def initialize version_model
|
17
|
+
@version_model = version_model
|
18
|
+
@sortable_number = Versionomy.parse(version_model.number)
|
19
|
+
end
|
20
|
+
|
21
|
+
def <=> other
|
22
|
+
self.sortable_number <=> other.sortable_number
|
23
|
+
end
|
24
|
+
|
25
|
+
def update_model new_order
|
26
|
+
# Sequel will only run the update if the column value has changed, so in 99% of
|
27
|
+
# cases, only one update will occur.
|
28
|
+
version_model.update(:order => new_order)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -5,14 +5,19 @@ module PactBroker
|
|
5
5
|
module Models
|
6
6
|
class Pact < Sequel::Model
|
7
7
|
|
8
|
-
|
9
|
-
associate(:
|
8
|
+
set_primary_key :id
|
9
|
+
associate(:many_to_one, :provider, :class => "PactBroker::Models::Pacticipant", :key => :provider_id, :primary_key => :id)
|
10
|
+
associate(:many_to_one, :consumer_version, :class => "PactBroker::Models::Version", :key => :version_id, :primary_key => :id)
|
10
11
|
|
11
12
|
#Need to work out how to do this properly!
|
12
13
|
def consumer_version_number
|
13
14
|
values[:consumer_version_number]
|
14
15
|
end
|
15
16
|
|
17
|
+
def consumer
|
18
|
+
consumer_version.pacticipant
|
19
|
+
end
|
20
|
+
|
16
21
|
def to_s
|
17
22
|
"Pact: provider_id=#{provider_id}"
|
18
23
|
end
|
@@ -6,7 +6,9 @@ module PactBroker
|
|
6
6
|
|
7
7
|
class Pacticipant < Sequel::Model
|
8
8
|
|
9
|
-
|
9
|
+
set_primary_key :id
|
10
|
+
|
11
|
+
one_to_many :versions, :order => :order, :reciprocal => :pacticipant
|
10
12
|
one_to_many :pacts
|
11
13
|
|
12
14
|
def last_version
|