pact-message 0.6.0 → 0.7.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 +5 -5
- data/.travis.yml +24 -3
- data/CHANGELOG.md +30 -0
- data/Dockerfile-bundle-base +15 -0
- data/README.md +67 -1
- data/lib/pact/consumer_contract/message.rb +22 -8
- data/lib/pact/message/consumer_contract_parser.rb +3 -1
- data/lib/pact/message/version.rb +1 -1
- data/pact-message.gemspec +1 -1
- data/script/docker-functions +21 -0
- data/script/functions +5 -0
- data/script/release.sh +19 -6
- data/script/release/bump-version.sh +5 -0
- data/script/release/generate-changelog.sh +6 -0
- metadata +10 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d44fac4a872e57e964a935d228261c50773a4f90249bcdd979420b390b057b73
|
4
|
+
data.tar.gz: ea1c430bf254ae94970eaedb568d578cab98d1e68d6ad9e0dcd16322e0775eb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c9e77894059e089b6f3239727abe57425b2256d203b2ed6d66a6ee3b94f6ba063b9871198c18ace55dfb74a7d8c1d509f9ee17076df4d89c87657999a26b2fd
|
7
|
+
data.tar.gz: 0230fe4dde29531395c5a8153ecf6e718669c412e0088e4eb957131d5c55a64ea4d7eaffc441816b7a8d9c1fa838ee798ee4148a7857e53736534616bc3ef8d5
|
data/.travis.yml
CHANGED
@@ -1,12 +1,33 @@
|
|
1
1
|
sudo: false
|
2
2
|
language: ruby
|
3
3
|
rvm:
|
4
|
-
|
5
|
-
before_install:
|
4
|
+
- 2.2.4
|
5
|
+
before_install:
|
6
|
+
- rvm use @global
|
7
|
+
- gem uninstall bundler -x || gem uninstall bundler -a || true
|
8
|
+
- gem install bundler -v 1.17.3
|
9
|
+
- bundler --version
|
10
|
+
script:
|
11
|
+
- rvm use @global
|
12
|
+
- bundle exec rake
|
13
|
+
jobs:
|
14
|
+
include:
|
15
|
+
- stage: gem release
|
16
|
+
rvm: 2.2.4
|
17
|
+
script: echo "Deploying to rubygems.org ..."
|
18
|
+
deploy:
|
19
|
+
provider: rubygems
|
20
|
+
api_key:
|
21
|
+
secure: NEA7BYENheSN8qF/6BP52uQjTS5U43MXsyxBeqxbp1JOkJxVSNzQw14xy41aXX0gphT7wEVHinnWS+1slLKXvu4OzGKKzcUsnekYFZoGW7eTyKUx7lh/XtFejQ/Mm4P5t75GBgMoaIi+Pa1rD4fcE7zYGrgCvTwIrOGb/SPIKILj0yT8UXMFod8yDDmxzivSSKYe4rgWYlq8aiidDZr2M5ypBR4WcOptCrkBCF8XxXzhFMY4QtrXLsLFRyCzCrDHmosCfC/bLJQltlJjLXfB5ksgaImWAD7wZ6Q4uC5QqmPShonQiPlLEh53Q5nkEWPIcsV7FVZqzXUjPN3LYHlRv+7D3AvbHmJggSt7fXr8YxbzVUkviBlKqNmc9cqM6CSO++QT3UShNgH5b03YKI8rRjFMWYKn1DrN5F5rFNDoGFcZtQSjFN5g/fEiSYsdkNsIeTp4YFxMkTztAYT8TxgcBvCnfXox6xDaLaPWh13UrUL2VL7O7uDK06xWUCp9Hm3/AXz0wRzya1tK9dCWamE5BOzk2ScOiLOgmpgwNHFVA1U93rkHq7Ixr11wazP3Dcinv0kWcW7hdMcI7VA0DUesxLKw6mkcQpd3NLgSU4mWtpoVFcmdERQUGsNM1d5NjGjBeyVMpC0I9NXM1Wv6cLENSX9b4GR7lkwGG/IHRFNciHk=
|
22
|
+
gem: pact-message
|
23
|
+
on:
|
24
|
+
tags: true
|
25
|
+
repo: pact-foundation/pact-message-ruby
|
6
26
|
notifications:
|
7
27
|
webhooks:
|
8
28
|
urls:
|
9
|
-
|
29
|
+
- https://webhooks.gitter.im/e/6523128341fad111ed79
|
10
30
|
on_success: change
|
11
31
|
on_failure: always
|
12
32
|
on_start: never
|
33
|
+
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,33 @@
|
|
1
|
+
<a name="v0.7.0"></a>
|
2
|
+
### v0.7.0 (2020-02-10)
|
3
|
+
|
4
|
+
|
5
|
+
#### Features
|
6
|
+
|
7
|
+
* Add metadata to a message request ([796590f](/../../commit/796590f))
|
8
|
+
* support the _id attribute from the Pact Broker, and give each message an index ([3a05501](/../../commit/3a05501))
|
9
|
+
|
10
|
+
|
11
|
+
#### Bug Fixes
|
12
|
+
|
13
|
+
* add back support for using providerState instead of providerStates when updating a pact ([b494a76](/../../commit/b494a76))
|
14
|
+
|
15
|
+
|
16
|
+
<a name="v0.6.0"></a>
|
17
|
+
### v0.6.0 (2020-02-10)
|
18
|
+
|
19
|
+
|
20
|
+
#### Features
|
21
|
+
|
22
|
+
* Add metadata to a message request ([796590f](/../../commit/796590f))
|
23
|
+
* support the _id attribute from the Pact Broker, and give each message an index ([3a05501](/../../commit/3a05501))
|
24
|
+
|
25
|
+
|
26
|
+
#### Bug Fixes
|
27
|
+
|
28
|
+
* add back support for using providerState instead of providerStates when updating a pact ([b494a76](/../../commit/b494a76))
|
29
|
+
|
30
|
+
|
1
31
|
<a name="v0.5.0"></a>
|
2
32
|
### v0.5.0 (2018-10-04)
|
3
33
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
FROM ruby:2.2.4-alpine
|
2
|
+
|
3
|
+
# Installation path
|
4
|
+
ENV HOME=/app
|
5
|
+
WORKDIR $HOME
|
6
|
+
|
7
|
+
RUN set -ex && \
|
8
|
+
adduser -h $HOME -s /bin/false -D -S -G root ruby && \
|
9
|
+
chmod g+w $HOME && \
|
10
|
+
apk add --update --no-cache make gcc libc-dev git
|
11
|
+
|
12
|
+
RUN gem install bundler -v 1.17.3
|
13
|
+
COPY Gemfile pact-message.gemspec $HOME/
|
14
|
+
COPY lib/pact/message/version.rb $HOME/lib/pact/message/version.rb
|
15
|
+
RUN bundle install --no-cache
|
data/README.md
CHANGED
@@ -4,13 +4,14 @@
|
|
4
4
|
|
5
5
|
Create and verify consumer driven contracts for messages.
|
6
6
|
|
7
|
-
|
7
|
+
|
8
8
|
|
9
9
|
## Installation
|
10
10
|
|
11
11
|
Add this line to your application's Gemfile:
|
12
12
|
|
13
13
|
```ruby
|
14
|
+
gem 'pact'
|
14
15
|
gem 'pact-message'
|
15
16
|
```
|
16
17
|
|
@@ -20,11 +21,76 @@ And then execute:
|
|
20
21
|
|
21
22
|
Or install it yourself as:
|
22
23
|
|
24
|
+
$ gem install pact
|
23
25
|
$ gem install pact-message
|
24
26
|
|
25
27
|
## Usage
|
26
28
|
|
29
|
+
The key to using Message Pact is to completely separate the business logic that creates the message from the transmission protocol (eg. Kafka, Websockets, Lambda). This allows you to write a contract for the message contents, no matter how it is communicated.
|
30
|
+
|
31
|
+
### Consumer
|
32
|
+
|
33
|
+
Not finished yet as nobody has asked for it. Ping @Beth Skurrie on slack.pact.io if you'd like use this.
|
34
|
+
|
35
|
+
### Provider
|
36
|
+
|
37
|
+
Also called a "producer". Message pact verification follows all the same principles as HTTP pact verification, except that instead of verifying that a provider can make the expected HTTP response, we are verifying that the provider can create the expected message. Please read the HTTP Pact [verification](https://github.com/pact-foundation/pact-ruby/wiki/Verifying-pacts) documentation. The only difference is in the configuration block. Use `message_provider` instead of `service_provider`, and configure a `builder` block that takes a `|description|` argument, instead of a Rack `app` block.
|
38
|
+
|
39
|
+
Make sure you've required 'pact/message' as well as 'pact'.
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
require 'pact'
|
43
|
+
require 'pact/message'
|
44
|
+
|
45
|
+
Pact.message_provider "MyMessageProvider" do
|
46
|
+
honours_pact_with "MyMessageConsumer" do
|
47
|
+
pact_uri "/path/or/url/to/your/pact", {
|
48
|
+
username: "optional username",
|
49
|
+
password: "optional password",
|
50
|
+
token: "optional token"
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
# or
|
55
|
+
|
56
|
+
honours_pacts_from_pact_broker do
|
57
|
+
# See docs at https://github.com/pact-foundation/pact-ruby/wiki/Verifying-pacts
|
58
|
+
end
|
59
|
+
|
60
|
+
builder do |message_description|
|
61
|
+
#... code that accepts a message description and returns
|
62
|
+
# a message hash that should match what is expected in the pact
|
63
|
+
do
|
64
|
+
end
|
65
|
+
|
66
|
+
```
|
67
|
+
|
68
|
+
How you map between the message description and the code that creates the message is up to you. The easiest way is something like this:
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
class MyMessageProvider
|
72
|
+
def create_hello_message
|
73
|
+
{
|
74
|
+
text: "Hello world"
|
75
|
+
}
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
CONFIG = {
|
80
|
+
"a hello message" => lambda { MyMessageProvider.new.create_hello_message }
|
81
|
+
}
|
82
|
+
|
83
|
+
Pact.message_provider "SomeProvider" do
|
84
|
+
builder do |description|
|
85
|
+
CONFIG[description].call
|
86
|
+
do
|
87
|
+
end
|
88
|
+
|
89
|
+
```
|
90
|
+
|
91
|
+
#### Provider states
|
27
92
|
|
93
|
+
Provider states work the same way for Message Pact as they do for HTTP Pact. Please read the [provider state](https://github.com/pact-foundation/pact-ruby#using-provider-states) docs in the HTTP Pact project.
|
28
94
|
|
29
95
|
## Development
|
30
96
|
|
@@ -13,7 +13,7 @@ module Pact
|
|
13
13
|
include Pact::ActiveSupportSupport
|
14
14
|
include Pact::SymbolizeKeys
|
15
15
|
|
16
|
-
attr_accessor :description, :contents, :provider_state, :provider_states, :metadata
|
16
|
+
attr_accessor :description, :contents, :provider_state, :provider_states, :metadata, :_id, :index
|
17
17
|
|
18
18
|
def initialize attributes = {}
|
19
19
|
@description = attributes[:description]
|
@@ -21,6 +21,8 @@ module Pact
|
|
21
21
|
@provider_states = attributes[:provider_states] || []
|
22
22
|
@contents = attributes[:contents]
|
23
23
|
@metadata = attributes[:metadata]
|
24
|
+
@_id = attributes[:_id]
|
25
|
+
@index = attributes[:index]
|
24
26
|
end
|
25
27
|
|
26
28
|
def self.from_hash hash, options = {}
|
@@ -32,11 +34,12 @@ module Pact
|
|
32
34
|
contents_hash = Pact::MatchingRules.merge(hash['contents'], contents_matching_rules, opts)
|
33
35
|
contents = Pact::ConsumerContract::Message::Contents.from_hash(contents_hash)
|
34
36
|
metadata = hash['metaData'] || hash['metadata']
|
35
|
-
|
36
|
-
|
37
|
+
|
38
|
+
provider_state_name = parse_provider_state_name(hash['providerState'], hash['providerStates'])
|
39
|
+
provider_states = parse_provider_states(provider_state_name, hash['providerStates'])
|
37
40
|
new(symbolize_keys(hash).merge(
|
38
41
|
contents: contents,
|
39
|
-
provider_state:
|
42
|
+
provider_state: provider_state_name,
|
40
43
|
provider_states: provider_states,
|
41
44
|
metadata: metadata))
|
42
45
|
end
|
@@ -61,7 +64,8 @@ module Pact
|
|
61
64
|
providerStates: [{
|
62
65
|
name: provider_state,
|
63
66
|
params: {}
|
64
|
-
}]
|
67
|
+
}],
|
68
|
+
metadata: metadata
|
65
69
|
}
|
66
70
|
)
|
67
71
|
end
|
@@ -120,9 +124,19 @@ module Pact
|
|
120
124
|
|
121
125
|
private
|
122
126
|
|
123
|
-
def self.
|
124
|
-
(provider_states
|
125
|
-
|
127
|
+
def self.parse_provider_state_name provider_state, provider_states
|
128
|
+
(provider_states && provider_states.first && provider_states.first['name']) || provider_state
|
129
|
+
end
|
130
|
+
|
131
|
+
def self.parse_provider_states provider_state_name, provider_states
|
132
|
+
if provider_states && provider_states.any?
|
133
|
+
provider_states.collect do | provider_state_hash |
|
134
|
+
Pact::ProviderState.new(provider_state_hash['name'], provider_state_hash['params'])
|
135
|
+
end
|
136
|
+
elsif provider_state_name
|
137
|
+
[Pact::ProviderState.new(provider_state_name, {})]
|
138
|
+
else
|
139
|
+
[]
|
126
140
|
end
|
127
141
|
end
|
128
142
|
end
|
@@ -11,7 +11,9 @@ module Pact
|
|
11
11
|
def call(hash)
|
12
12
|
hash = symbolize_keys(hash)
|
13
13
|
options = { pact_specification_version: pact_specification_version(hash) }
|
14
|
-
interactions = hash[:messages].collect
|
14
|
+
interactions = hash[:messages].each_with_index.collect do |hash, index|
|
15
|
+
Pact::ConsumerContract::Message.from_hash({ index: index }.merge(hash), options)
|
16
|
+
end
|
15
17
|
ConsumerContract.new(
|
16
18
|
:consumer => ServiceConsumer.from_hash(hash[:consumer]),
|
17
19
|
:provider => ServiceProvider.from_hash(hash[:provider]),
|
data/lib/pact/message/version.rb
CHANGED
data/pact-message.gemspec
CHANGED
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.add_runtime_dependency "pact-mock_service", "~> 3.1"
|
37
37
|
spec.add_runtime_dependency "thor", "~> 0.20"
|
38
38
|
|
39
|
-
spec.add_development_dependency "bundler", "~> 1.
|
39
|
+
spec.add_development_dependency "bundler", "~> 1.17.3"
|
40
40
|
spec.add_development_dependency "rake", "~> 10.0"
|
41
41
|
spec.add_development_dependency "rspec", "~> 3.0"
|
42
42
|
spec.add_development_dependency "pry-byebug"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
export IMAGE=pact_message_ruby_bundle_base
|
4
|
+
|
5
|
+
function docker_build_bundle_base() {
|
6
|
+
docker build . -f Dockerfile-bundle-base -t $IMAGE
|
7
|
+
}
|
8
|
+
|
9
|
+
function bundle_update_on_docker() {
|
10
|
+
rm -rf tmp/Gemfile.lock
|
11
|
+
docker run --rm -v ${PWD}/tmp:/tmp/bundle_update $IMAGE:latest sh -c "bundle update && cp Gemfile.lock /tmp/bundle_update"
|
12
|
+
mv tmp/Gemfile.lock .
|
13
|
+
}
|
14
|
+
|
15
|
+
function on_docker() {
|
16
|
+
docker run --rm -v ${PWD}:/app $IMAGE:latest sh -c "$@"
|
17
|
+
}
|
18
|
+
|
19
|
+
gem_version() {
|
20
|
+
on_docker "bundle exec ruby -e \"require 'bump'; puts Bump::Bump.current\""
|
21
|
+
}
|
data/script/functions
ADDED
data/script/release.sh
CHANGED
@@ -1,13 +1,26 @@
|
|
1
|
-
#!/bin/
|
1
|
+
#!/bin/sh
|
2
2
|
set -e
|
3
3
|
|
4
|
+
source script/docker-functions
|
5
|
+
|
4
6
|
# avoid accidentally double incrementing when previous run fails
|
5
7
|
git reset HEAD CHANGELOG.md lib/pact/message/version.rb
|
6
8
|
git checkout -- lib/pact/message/version.rb
|
7
9
|
git checkout -- CHANGELOG.md
|
8
|
-
|
9
|
-
|
10
|
+
|
11
|
+
docker_build_bundle_base
|
12
|
+
|
13
|
+
script/release/bump-version.sh $1
|
14
|
+
script/release/generate-changelog.sh
|
15
|
+
|
10
16
|
git add CHANGELOG.md lib/pact/message/version.rb
|
11
|
-
git commit -m "chore(release): version $
|
12
|
-
|
13
|
-
|
17
|
+
git commit -m "chore(release): version ${VERSION}
|
18
|
+
|
19
|
+
[ci-skip]"
|
20
|
+
|
21
|
+
VERSION=$(gem_version)
|
22
|
+
TAG="v${VERSION}"
|
23
|
+
git tag -a "${TAG}" -m "Releasing version ${TAG}"
|
24
|
+
git push origin "${TAG}"
|
25
|
+
git push origin master
|
26
|
+
echo "Releasing from https://travis-ci.org/pact-foundation/pact-message-ruby/builds"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact-message
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Beth Skurrie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pact-support
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 1.17.3
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 1.17.3
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,6 +152,7 @@ files:
|
|
152
152
|
- CHANGELOG.md
|
153
153
|
- CONTRIBUTING.md
|
154
154
|
- DEVELOPER_DOCUMENTATION.md
|
155
|
+
- Dockerfile-bundle-base
|
155
156
|
- Gemfile
|
156
157
|
- LICENSE.txt
|
157
158
|
- QUESTIONS.md
|
@@ -181,7 +182,11 @@ files:
|
|
181
182
|
- lib/pact/message/consumer_contract_parser.rb
|
182
183
|
- lib/pact/message/version.rb
|
183
184
|
- pact-message.gemspec
|
185
|
+
- script/docker-functions
|
186
|
+
- script/functions
|
184
187
|
- script/release.sh
|
188
|
+
- script/release/bump-version.sh
|
189
|
+
- script/release/generate-changelog.sh
|
185
190
|
- script/update-pact.sh
|
186
191
|
- tasks/release.rake
|
187
192
|
homepage: http://pact.io
|
@@ -205,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
205
210
|
version: '0'
|
206
211
|
requirements: []
|
207
212
|
rubyforge_project:
|
208
|
-
rubygems_version: 2.
|
213
|
+
rubygems_version: 2.7.7
|
209
214
|
signing_key:
|
210
215
|
specification_version: 4
|
211
216
|
summary: Consumer contract library for messages
|