pact_broker-client 0.0.1
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/.gitignore +25 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +76 -0
- data/README.md +94 -0
- data/Rakefile +33 -0
- data/ci.sh +10 -0
- data/lib/pact_broker/client/base_client.rb +76 -0
- data/lib/pact_broker/client/pact_broker_client.rb +31 -0
- data/lib/pact_broker/client/pacticipants.rb +34 -0
- data/lib/pact_broker/client/pacts.rb +45 -0
- data/lib/pact_broker/client/publish_pacts.rb +44 -0
- data/lib/pact_broker/client/tasks/publication_task.rb +46 -0
- data/lib/pact_broker/client/tasks.rb +1 -0
- data/lib/pact_broker/client/version.rb +5 -0
- data/lib/pact_broker/client/versions.rb +38 -0
- data/lib/pact_broker/client.rb +2 -0
- data/lib/pact_broker_client.rb +2 -0
- data/pact-broker-client.gemspec +32 -0
- data/spec/lib/pact_broker/client/pact_broker_client_spec.rb +20 -0
- data/spec/lib/pact_broker/client/publish_pacts_spec.rb +92 -0
- data/spec/lib/pact_broker/client/tasks/publication_task_spec.rb +72 -0
- data/spec/pacts/pact_broker_client-pact_broker.json +365 -0
- data/spec/service_providers/pact_broker_client_spec.rb +363 -0
- data/spec/service_providers/pact_helper.rb +14 -0
- data/spec/spec_helper.rb +5 -0
- metadata +213 -0
data/.gitignore
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
coverage
|
6
|
+
InstalledFiles
|
7
|
+
lib/bundler/man
|
8
|
+
pkg
|
9
|
+
rdoc
|
10
|
+
spec/reports
|
11
|
+
test/tmp
|
12
|
+
test/version_tmp
|
13
|
+
tmp
|
14
|
+
reports
|
15
|
+
/.idea
|
16
|
+
|
17
|
+
# YARD artifacts
|
18
|
+
.yardoc
|
19
|
+
_yardoc
|
20
|
+
doc/
|
21
|
+
.bin
|
22
|
+
|
23
|
+
# Editor files
|
24
|
+
*.sublime*
|
25
|
+
log
|
data/.rspec
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
pact_broker-client (0.0.1)
|
5
|
+
httparty
|
6
|
+
json
|
7
|
+
pact
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
awesome_print (1.1.0)
|
13
|
+
coderay (1.0.9)
|
14
|
+
columnize (0.3.6)
|
15
|
+
daemons (1.1.9)
|
16
|
+
debugger (1.6.2)
|
17
|
+
columnize (>= 0.3.1)
|
18
|
+
debugger-linecache (~> 1.2.0)
|
19
|
+
debugger-ruby_core_source (~> 1.2.3)
|
20
|
+
debugger-linecache (1.2.0)
|
21
|
+
debugger-ruby_core_source (1.2.3)
|
22
|
+
diff-lcs (1.2.4)
|
23
|
+
eventmachine (1.0.3)
|
24
|
+
fakefs (0.4.2)
|
25
|
+
find_a_port (1.0.1)
|
26
|
+
httparty (0.12.0)
|
27
|
+
json (~> 1.8)
|
28
|
+
multi_xml (>= 0.5.2)
|
29
|
+
json (1.8.1)
|
30
|
+
method_source (0.8.2)
|
31
|
+
multi_xml (0.5.5)
|
32
|
+
pact (1.0.15)
|
33
|
+
awesome_print (~> 1.1.0)
|
34
|
+
find_a_port (~> 1.0.1)
|
35
|
+
json
|
36
|
+
rack-test (~> 0.6.2)
|
37
|
+
randexp (~> 0.1.7)
|
38
|
+
rspec (~> 2.12)
|
39
|
+
thin
|
40
|
+
thor
|
41
|
+
pry (0.9.12.2)
|
42
|
+
coderay (~> 1.0.5)
|
43
|
+
method_source (~> 0.8)
|
44
|
+
slop (~> 3.4)
|
45
|
+
rack (1.5.2)
|
46
|
+
rack-test (0.6.2)
|
47
|
+
rack (>= 1.0)
|
48
|
+
rake (10.0.4)
|
49
|
+
randexp (0.1.7)
|
50
|
+
rspec (2.14.1)
|
51
|
+
rspec-core (~> 2.14.0)
|
52
|
+
rspec-expectations (~> 2.14.0)
|
53
|
+
rspec-mocks (~> 2.14.0)
|
54
|
+
rspec-core (2.14.6)
|
55
|
+
rspec-expectations (2.14.3)
|
56
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
57
|
+
rspec-fire (1.2.0)
|
58
|
+
rspec (~> 2.11)
|
59
|
+
rspec-mocks (2.14.4)
|
60
|
+
slop (3.4.6)
|
61
|
+
thin (1.6.0)
|
62
|
+
daemons (>= 1.0.9)
|
63
|
+
eventmachine (>= 1.0.0)
|
64
|
+
rack (>= 1.5.0)
|
65
|
+
thor (0.18.1)
|
66
|
+
|
67
|
+
PLATFORMS
|
68
|
+
ruby
|
69
|
+
|
70
|
+
DEPENDENCIES
|
71
|
+
debugger
|
72
|
+
fakefs (~> 0.4)
|
73
|
+
pact_broker-client!
|
74
|
+
pry
|
75
|
+
rake (~> 10.0.3)
|
76
|
+
rspec-fire
|
data/README.md
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
# PactBrokerClient
|
2
|
+
|
3
|
+
Add a detailed description of the new service here before your first commit.
|
4
|
+
|
5
|
+
Information here will be consumed by the Treasure Map (via the Rumour Mill). Therefore, please retain the existing formatting on this page, importantly:
|
6
|
+
|
7
|
+
* The service name at the top of the page
|
8
|
+
* The location of this description text (between service name and Custodian(s)
|
9
|
+
* Component Custodian(s)
|
10
|
+
|
11
|
+
Other headings can be deleted if they are not relevant.
|
12
|
+
|
13
|
+
**NOTE: The following is provided for convenience. Please check it carefully before your first commit.**
|
14
|
+
|
15
|
+
## Component Custodian(s)
|
16
|
+
|
17
|
+
Enter Custodian(s) here
|
18
|
+
|
19
|
+
## Development
|
20
|
+
|
21
|
+
Enter any developer instructions here.
|
22
|
+
|
23
|
+
### Database setup
|
24
|
+
|
25
|
+
Instructions to set up the database for local testing.
|
26
|
+
|
27
|
+
Then run migrations:
|
28
|
+
|
29
|
+
$ bundle exec rake db:migrate
|
30
|
+
|
31
|
+
### Testing
|
32
|
+
|
33
|
+
$ bundle exec rake
|
34
|
+
|
35
|
+
### Running
|
36
|
+
|
37
|
+
Instructions to run the service locally.
|
38
|
+
|
39
|
+
### Debugging
|
40
|
+
|
41
|
+
Any specific debugging tools built in to the service (health check is assumed so don't include that).
|
42
|
+
|
43
|
+
### Build
|
44
|
+
|
45
|
+
**edit the below and add the correct endpoint**
|
46
|
+
|
47
|
+
[Standalone (Bamboo)](http://master.cd.vpc.realestate.com.au/browse/YOUR_NEW_SERVICE_BUILD)
|
48
|
+
|
49
|
+
## Deployment
|
50
|
+
|
51
|
+
Deployment scripts have been generated using [biq-deploy](https://git.realestate.com.au/business-systems/biq-deploy).
|
52
|
+
|
53
|
+
#### EC2 environments
|
54
|
+
|
55
|
+
Before deploying to EC2 environments, you may wish to check that the build you wish to deploy has been indexed.
|
56
|
+
|
57
|
+
1. Log in into the agent unix box:
|
58
|
+
|
59
|
+
$ rea-ec2-ssh agent-01.biq
|
60
|
+
|
61
|
+
2. See the list of versions indexed and verify the expected version in the list:
|
62
|
+
|
63
|
+
$ yum list --showduplicates --enablerepo=rea-el6-dev pact_broker_client
|
64
|
+
|
65
|
+
You can get up an running with these scripts like so (from within the pact_broker_client project on your local machine):
|
66
|
+
|
67
|
+
$ cd deploy
|
68
|
+
$ bundle
|
69
|
+
$ bundle exec bin/pact-broker-client-deploy-ec2 --help
|
70
|
+
|
71
|
+
When deploying to an EC2 environment for the first time, you must create a node for the app:
|
72
|
+
|
73
|
+
$ bundle exec bin/pact-broker-client-deploy-ec2 -t create -s $YOUR_SUBDOMAIN -p dev
|
74
|
+
|
75
|
+
The first time the service is deployed, a database must be created. After adding the [required config values](https://git.realestate.com.au/business-systems/pact_broker_client/blob/master/lib/environment_variables.rb) to the
|
76
|
+
environment's config-svc, you can run the db provision task:
|
77
|
+
|
78
|
+
$ bundle exec bin/pact-broker-client-deploy-ec2 -t db_provision -s $YOUR_SUBDOMAIN
|
79
|
+
|
80
|
+
Then you are free to migrate the db from then on:
|
81
|
+
|
82
|
+
$ bundle exec bin/pact-broker-client-deploy-ec2 -t db_migrate -s $YOUR_SUBDOMAIN
|
83
|
+
|
84
|
+
To deploy to a test environment (eg biq-qa1):
|
85
|
+
|
86
|
+
$ bundle exec bin/pact-broker-client-deploy-ec2 -t deploy -s biq-qa1 -p dev -y
|
87
|
+
|
88
|
+
#### Production
|
89
|
+
|
90
|
+
Refer to the [production deployment readme](https://git.realestate.com.au/business-systems/pact_broker_client/blob/master/README-ProdDeploy.md).
|
91
|
+
|
92
|
+
### Architecture
|
93
|
+
|
94
|
+
Any important architectural information.
|
data/Rakefile
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'bundler/gem_helper'
|
2
|
+
module Bundler
|
3
|
+
class GemHelper
|
4
|
+
def install
|
5
|
+
desc "Build #{name}-#{version}.gem into the pkg directory"
|
6
|
+
task 'build' do
|
7
|
+
build_gem
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Build and install #{name}-#{version}.gem into system gems"
|
11
|
+
task 'install' do
|
12
|
+
install_gem
|
13
|
+
end
|
14
|
+
|
15
|
+
GemHelper.instance = self
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
Bundler::GemHelper.install_tasks
|
20
|
+
require 'rspec/core/rake_task'
|
21
|
+
#require 'geminabox-client'
|
22
|
+
|
23
|
+
Dir.glob('lib/tasks/**/*.rake').each { |task| load task }
|
24
|
+
Dir.glob('tasks/**/*.rake').each { |task| load task }
|
25
|
+
RSpec::Core::RakeTask.new(:spec)
|
26
|
+
|
27
|
+
task :default => [:spec]
|
28
|
+
|
29
|
+
# desc "Release to REA gems host"
|
30
|
+
# task :publish => :build do
|
31
|
+
# gem_file = "pkg/pact-broker-client#{PactBroker::Client::VERSION}.gem"
|
32
|
+
# Geminabox::Client.new('http://rea-rubygems').upload(gem_file)
|
33
|
+
# end
|
data/ci.sh
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
set -e
|
3
|
+
|
4
|
+
RUBY_VERSION=1.9.3-p194
|
5
|
+
|
6
|
+
eval $( curl http://dist/rea/toolchain/ruby-env-rbenv-polite | bash -s $RUBY_VERSION )
|
7
|
+
rbenv local $RUBY_VERSION
|
8
|
+
bundle config --delete path
|
9
|
+
bundle config --delete without
|
10
|
+
bundle install && bundle exec rake "$@"
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'httparty'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Client
|
6
|
+
|
7
|
+
module UrlHelpers
|
8
|
+
def encode_param param
|
9
|
+
ERB::Util.url_encode param
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module StringToSymbol
|
14
|
+
|
15
|
+
#Only works for one level, not recursive!
|
16
|
+
def string_keys_to_symbols hash
|
17
|
+
hash.keys.each_with_object({}) do | key, new_hash |
|
18
|
+
new_hash[key.to_sym] = hash[key]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
class BaseClient
|
25
|
+
include UrlHelpers
|
26
|
+
include HTTParty
|
27
|
+
include StringToSymbol
|
28
|
+
|
29
|
+
attr_reader :base_url
|
30
|
+
|
31
|
+
def initialize options
|
32
|
+
@base_url = options[:base_url]
|
33
|
+
self.class.base_uri base_url
|
34
|
+
end
|
35
|
+
|
36
|
+
def default_request_headers
|
37
|
+
{'Accept' => 'application/json'}
|
38
|
+
end
|
39
|
+
|
40
|
+
def default_get_headers
|
41
|
+
default_request_headers
|
42
|
+
end
|
43
|
+
|
44
|
+
def default_patch_headers
|
45
|
+
default_request_headers.merge('Content-Type' => 'application/json+patch')
|
46
|
+
end
|
47
|
+
|
48
|
+
def default_put_headers
|
49
|
+
default_request_headers.merge('Content-Type' => 'application/json')
|
50
|
+
end
|
51
|
+
|
52
|
+
def handle_response response
|
53
|
+
if response.success?
|
54
|
+
yield
|
55
|
+
elsif response.code == 404
|
56
|
+
nil
|
57
|
+
else
|
58
|
+
raise response.body
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def patch url, options
|
63
|
+
self.class.patch(url, options.merge(body: options[:body].to_json))
|
64
|
+
end
|
65
|
+
|
66
|
+
def put url, *args
|
67
|
+
self.class.put(url, *args)
|
68
|
+
end
|
69
|
+
|
70
|
+
def get url, *args
|
71
|
+
self.class.get(url, *args)
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'pact_broker/client/pacticipants'
|
2
|
+
require 'pact_broker/client/versions'
|
3
|
+
require 'pact_broker/client/pacts'
|
4
|
+
|
5
|
+
|
6
|
+
module PactBroker
|
7
|
+
|
8
|
+
|
9
|
+
module Client
|
10
|
+
|
11
|
+
DEFAULT_PACT_BROKER_BASE_URL = 'http://pact-broker'
|
12
|
+
|
13
|
+
class PactBrokerClient
|
14
|
+
|
15
|
+
DEFAULT_OPTIONS = {base_url: DEFAULT_PACT_BROKER_BASE_URL}
|
16
|
+
|
17
|
+
attr_reader :base_url
|
18
|
+
|
19
|
+
def initialize options = {}
|
20
|
+
merged_options = DEFAULT_OPTIONS.merge(options)
|
21
|
+
@base_url = merged_options[:base_url]
|
22
|
+
end
|
23
|
+
|
24
|
+
def pacticipants
|
25
|
+
PactBroker::Client::Pacticipants.new base_url: base_url
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'pact_broker/client/base_client'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Client
|
5
|
+
class Pacticipants < BaseClient
|
6
|
+
|
7
|
+
def versions
|
8
|
+
Versions.new base_url: base_url
|
9
|
+
end
|
10
|
+
|
11
|
+
def update options
|
12
|
+
body = options.select{ | key, v | [:repository_url].include?(key)}
|
13
|
+
response = patch(pacticipant_base_url(options), body: body, headers: default_patch_headers)
|
14
|
+
handle_response(response) do
|
15
|
+
true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def repository_url options
|
20
|
+
response = get("#{pacticipant_base_url(options)}/repository_url", headers: default_get_headers.merge('Accept' => 'text/plain'))
|
21
|
+
handle_response(response) do
|
22
|
+
response.body
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def pacticipant_base_url options
|
29
|
+
"/pacticipant/#{encode_param(options[:pacticipant])}"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'pact/consumer_contract'
|
2
|
+
require_relative 'base_client'
|
3
|
+
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
module Client
|
7
|
+
class Pacts < BaseClient
|
8
|
+
|
9
|
+
def publish options
|
10
|
+
consumer_version = options[:consumer_version]
|
11
|
+
pact_string = options[:pact]
|
12
|
+
consumer_contract = ::Pact::ConsumerContract.from_json pact_string
|
13
|
+
url = save_consumer_contract_url consumer_contract, consumer_version
|
14
|
+
response = self.class.put(url, body: pact_string, headers: default_put_headers)
|
15
|
+
handle_response(response) do
|
16
|
+
true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def last options
|
21
|
+
url = find_last_consumer_contract_url options
|
22
|
+
query = options[:tag] ? {tag: options[:tag]} : {}
|
23
|
+
response = self.class.get(url, headers: default_get_headers, query: query)
|
24
|
+
handle_response(response) do
|
25
|
+
response.body
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def find_last_consumer_contract_url options
|
32
|
+
consumer_name = encode_param(options[:consumer])
|
33
|
+
provider_name = encode_param(options[:provider])
|
34
|
+
"/pacticipant/#{consumer_name}/versions/last/pacts/#{provider_name}"
|
35
|
+
end
|
36
|
+
|
37
|
+
def save_consumer_contract_url consumer_contract, consumer_version
|
38
|
+
consumer_name = encode_param(consumer_contract.consumer.name)
|
39
|
+
provider_name = encode_param(consumer_contract.provider.name)
|
40
|
+
version = encode_param(consumer_version)
|
41
|
+
"/pacticipant/#{consumer_name}/versions/#{version}/pacts/#{provider_name}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'pact_broker/client'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Client
|
5
|
+
class PublishPacts
|
6
|
+
|
7
|
+
def initialize pact_broker_base_url, pact_files, consumer_version
|
8
|
+
@pact_broker_base_url = pact_broker_base_url
|
9
|
+
@pact_files = pact_files
|
10
|
+
@consumer_version = consumer_version
|
11
|
+
end
|
12
|
+
|
13
|
+
def call
|
14
|
+
validate
|
15
|
+
pact_files.collect{ | pact_file | publish_pact pact_file }.all?
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
attr_reader :pact_broker_base_url, :pact_files, :consumer_version
|
21
|
+
|
22
|
+
def pact_broker_client
|
23
|
+
@pact_broker_client ||= PactBroker::Client::PactBrokerClient.new(base_url: pact_broker_base_url)
|
24
|
+
end
|
25
|
+
|
26
|
+
def publish_pact pact_file
|
27
|
+
begin
|
28
|
+
pact_broker_client.pacticipants.versions.pacts.publish(pact_json: File.read(pact_file), consumer_version: consumer_version)
|
29
|
+
true
|
30
|
+
rescue => e
|
31
|
+
$stderr.puts "Failed to publish pact: #{pact_file} due to error: #{e.to_s}\n#{e.backtrace.join("\n")}"
|
32
|
+
false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate
|
37
|
+
raise "Please specify the consumer_version" unless (consumer_version && consumer_version.to_s.strip.size > 0)
|
38
|
+
raise "Please specify the pact_broker_base_url" unless (pact_broker_base_url && pact_broker_base_url.to_s.strip.size > 0)
|
39
|
+
raise "No pact files found" unless (pact_files && pact_files.any?)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'rake/tasklib'
|
2
|
+
|
3
|
+
=begin
|
4
|
+
require pact_broker/client/tasks
|
5
|
+
|
6
|
+
PactBroker::Client::PublicationTask.new do | task |
|
7
|
+
require 'consumer/version'
|
8
|
+
task.pact_broker_base_url = 'http://pact-broker'
|
9
|
+
task.consumer_version = Consumer::VERSION
|
10
|
+
end
|
11
|
+
|
12
|
+
=end
|
13
|
+
|
14
|
+
module PactBroker
|
15
|
+
module Client
|
16
|
+
class PublicationTask < ::Rake::TaskLib
|
17
|
+
|
18
|
+
attr_accessor :pattern, :pact_broker_base_url, :consumer_version
|
19
|
+
|
20
|
+
def initialize name = nil
|
21
|
+
@name = name
|
22
|
+
@pattern = 'spec/pacts/*.json'
|
23
|
+
@pact_broker_base_url = 'http://pact-broker'
|
24
|
+
yield self
|
25
|
+
rake_task
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def rake_task
|
31
|
+
namespace :pact do
|
32
|
+
task task_name do
|
33
|
+
require 'pact_broker/client/publish_pacts'
|
34
|
+
success = PactBroker::Client::PublishPacts.new(pact_broker_base_url, FileList[@pattern], consumer_version).call
|
35
|
+
raise "One or more pacts failed to be published" unless success
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def task_name
|
41
|
+
@name ? "publish:#{@name}" : "publish"
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'pact_broker/client/tasks/publication_task'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative 'base_client'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Client
|
5
|
+
class Versions < BaseClient
|
6
|
+
|
7
|
+
|
8
|
+
def last options
|
9
|
+
query = options[:tag] ? {tag: options[:tag]} : {}
|
10
|
+
response = self.class.get("#{version_base_url(options)}/last", query: query, headers: default_get_headers)
|
11
|
+
|
12
|
+
handle_response(response) do
|
13
|
+
string_keys_to_symbols(response.to_hash)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def update options
|
18
|
+
body = options.select{ | key, v | [:repository_ref, :repository_url, :tags].include?(key)}
|
19
|
+
body[:tags] ||= []
|
20
|
+
(body[:tags] << options[:tag]) if options[:tag]
|
21
|
+
response = patch("#{version_base_url(options)}/#{options[:version]}", body: body, headers: default_patch_headers)
|
22
|
+
handle_response(response) do
|
23
|
+
true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def pacts
|
28
|
+
Pacts.new base_url: base_url
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
def version_base_url options
|
33
|
+
pacticipant = encode_param(options[:pacticipant])
|
34
|
+
"/pacticipant/#{pacticipant}/versions"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
# -*- encoding: utf-8 -*-
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'pact_broker/client/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |gem|
|
8
|
+
gem.name = "pact_broker-client"
|
9
|
+
gem.version = PactBroker::Client::VERSION
|
10
|
+
gem.authors = ["Bethany Skurrie"]
|
11
|
+
gem.email = ["bskurrie@dius.com.au"]
|
12
|
+
gem.description = %q{Publishes pacts to, and retrieves pacts from, the pact broker server.}
|
13
|
+
gem.summary = %q{See description}
|
14
|
+
gem.homepage = "https://github.com/bethesque/pact_broker-client.git"
|
15
|
+
|
16
|
+
gem.files = `git ls-files`.split($/)
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
|
+
gem.require_paths = ["lib"]
|
20
|
+
gem.license = 'MIT'
|
21
|
+
|
22
|
+
gem.add_runtime_dependency 'pact'
|
23
|
+
gem.add_runtime_dependency 'httparty'
|
24
|
+
gem.add_runtime_dependency 'json' #Not locking down a version because buncher gem requires 1.6, while other projects use 1.7.
|
25
|
+
|
26
|
+
#gem.add_development_dependency 'geminabox-client'
|
27
|
+
gem.add_development_dependency 'rake', '~> 10.0.3'
|
28
|
+
gem.add_development_dependency 'pry'
|
29
|
+
gem.add_development_dependency 'fakefs', '~> 0.4'
|
30
|
+
gem.add_development_dependency 'rspec-fire'
|
31
|
+
gem.add_development_dependency 'debugger'
|
32
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'pact_broker/client'
|
4
|
+
|
5
|
+
module PactBroker::Client
|
6
|
+
describe PactBrokerClient do
|
7
|
+
|
8
|
+
describe 'initialize' do
|
9
|
+
subject { PactBrokerClient.new }
|
10
|
+
it 'sets the base_uri to http://pact-broker by default' do
|
11
|
+
expect(subject.base_url).to eq('http://pact-broker')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'allows configuration of the base_uri' do
|
15
|
+
expect(PactBrokerClient.new(base_url: 'https://blah').base_url).to eq('https://blah')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|