pact-support 1.2.5 → 1.2.99.alpha.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ceba97bd72023027c4e7580355cb8466ef517803
4
- data.tar.gz: 1e795b9e00a0f8e8a434c11fcb0da831cf34c691
3
+ metadata.gz: bb6aa8891e3b73c96d764ca9dd4c43849dc2972b
4
+ data.tar.gz: 79d896556e2d8eb9679aa41ae84200fe26fec695
5
5
  SHA512:
6
- metadata.gz: c55960e2c5ccc2855f832d9d7fb9fb1d8cba364a528a9677531a58886cac598c8fdb49ae3a214b0ddc78d40dc825e7145939a30ebb148258202f0a59fd7ea939
7
- data.tar.gz: 968254cef4d186916334e42f0bed7e1b80d4d25f9ad65688e9c06b5b96f1eb4d1bc215038874af77211aeaf1ff809ee5cb0b373c07fc30c4cf2613f4fb1cf733
6
+ metadata.gz: 9c3ca1df6aef0c0c5fa2944f9a75980dd5c2970d99c23c3940d8a1812fce409f9ac2f527733a3c9d06505453ae09b7dbddc6383170b62b1191c4036c0ffb6dac
7
+ data.tar.gz: b16006ef3b27268ecfa08793847709f9aee236c4b7ebf11a8a539bf41ffc4f38e7a1e76d63149e04bf9fc7bc916b05660e799e3bf974f487c35ab52a9e951104
data/CHANGELOG.md CHANGED
@@ -1,9 +1,6 @@
1
- <a name="v1.2.5"></a>
2
- ### v1.2.5 (2018-02-16)
1
+ Do this to generate your change history
3
2
 
4
- #### Bug Fixes
5
-
6
- * replace backslashes in pact dir path with forward slashes ([a1b5013](/../../commit/a1b5013))
3
+ git log --pretty=format:' * %h - %s (%an, %ad)'
7
4
 
8
5
  ### 1.2.4 (2017-10-30)
9
6
  * 80bbdcc - fix: remove unused dependency on rack-test (Beth Skurrie, Mon Oct 30 09:52:22 2017 +1100)
data/RELEASING.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Releasing
2
2
 
3
- Run
3
+ 1. Increment the version in `lib/pact/support/version.rb`
4
+ 2. Update the `CHANGELOG.md` using:
4
5
 
5
- script/release.sh [major|minor|patch] # default is minor
6
+ $ git log --pretty=format:' * %h - %s (%an, %ad)' vX.Y.Z..HEAD
7
+
8
+ 3. Add files to git
9
+
10
+ $ git add CHANGELOG.md lib/pact/support/version.rb
11
+ $ git commit -m "chore(release): version $(ruby -r ./lib/pact/support/version.rb -e "puts Pact::Support::VERSION")"
12
+
13
+ 3. Release:
14
+
15
+ $ bundle exec rake release
@@ -10,9 +10,9 @@ require 'pact/consumer_contract/service_consumer'
10
10
  require 'pact/consumer_contract/service_provider'
11
11
  require 'pact/consumer_contract/interaction'
12
12
  require 'pact/consumer_contract/pact_file'
13
+ require 'pact/consumer_contract/http_consumer_contract_parser'
13
14
 
14
15
  module Pact
15
-
16
16
  class ConsumerContract
17
17
 
18
18
  include SymbolizeKeys
@@ -29,13 +29,19 @@ module Pact
29
29
  @provider = attributes[:provider]
30
30
  end
31
31
 
32
+ def self.add_parser consumer_contract_parser
33
+ parsers << consumer_contract_parser
34
+ end
35
+
36
+ def self.parsers
37
+ @parsers ||= [Pact::HttpConsumerContractParser.new]
38
+ end
39
+
32
40
  def self.from_hash(hash)
33
- hash = symbolize_keys(hash)
34
- new(
35
- :consumer => ServiceConsumer.from_hash(hash[:consumer]),
36
- :provider => ServiceProvider.from_hash(hash[:provider]),
37
- :interactions => hash[:interactions].collect { |hash| Interaction.from_hash(hash)}
38
- )
41
+ parsers.each do | parser |
42
+ return parser.call(hash) if parser.can_parse?(hash)
43
+ end
44
+ raise Pact::Error.new("No consumer contract parser found for hash: #{hash}")
39
45
  end
40
46
 
41
47
  def self.from_json string
@@ -54,9 +60,9 @@ module Pact
54
60
  def find_interaction criteria
55
61
  interactions = find_interactions criteria
56
62
  if interactions.size == 0
57
- raise "Could not find interaction matching #{criteria} in pact file between #{consumer.name} and #{provider.name}."
63
+ raise Pact::Error.new("Could not find interaction matching #{criteria} in pact file between #{consumer.name} and #{provider.name}.")
58
64
  elsif interactions.size > 1
59
- raise "Found more than 1 interaction matching #{criteria} in pact file between #{consumer.name} and #{provider.name}."
65
+ raise Pact::Error.new("Found more than 1 interaction matching #{criteria} in pact file between #{consumer.name} and #{provider.name}.")
60
66
  end
61
67
  interactions.first
62
68
  end
@@ -8,15 +8,11 @@ module Pact
8
8
  end
9
9
 
10
10
  def file_path consumer_name, provider_name, pact_dir = Pact.configuration.pact_dir, options = {}
11
- File.join(windows_safe(pact_dir), file_name(consumer_name, provider_name, options))
11
+ File.join(pact_dir, file_name(consumer_name, provider_name, options))
12
12
  end
13
13
 
14
14
  def filenamify name
15
15
  name.downcase.gsub(/\s/, '_')
16
16
  end
17
-
18
- def windows_safe(pact_dir)
19
- pact_dir.gsub("\\", "/")
20
- end
21
17
  end
22
18
  end
@@ -0,0 +1,26 @@
1
+ module Pact
2
+ class HttpConsumerContractParser
3
+ include SymbolizeKeys
4
+
5
+ def call(hash)
6
+ hash = symbolize_keys(hash)
7
+ interactions = if hash[:interactions]
8
+ hash[:interactions].collect { |hash| Interaction.from_hash(hash)}
9
+ elsif hash[:messages]
10
+ hash[:messages].collect { |hash| Message.from_hash(hash)}
11
+ else
12
+ [] # or raise an error?
13
+ end
14
+
15
+ ConsumerContract.new(
16
+ :consumer => ServiceConsumer.from_hash(hash[:consumer]),
17
+ :provider => ServiceProvider.from_hash(hash[:provider]),
18
+ :interactions => interactions
19
+ )
20
+ end
21
+
22
+ def can_parse?(hash)
23
+ hash.key?('interactions') || hash.key?(:interactions)
24
+ end
25
+ end
26
+ end
@@ -6,7 +6,7 @@ require 'pact/matching_rules'
6
6
  require 'pact/errors'
7
7
 
8
8
  module Pact
9
- class Interaction
9
+ class Interaction
10
10
  include ActiveSupportSupport
11
11
  include SymbolizeKeys
12
12
 
@@ -36,6 +36,10 @@ module Pact
36
36
  }
37
37
  end
38
38
 
39
+ def http?
40
+ true
41
+ end
42
+
39
43
  def validate!
40
44
  raise Pact::InvalidInteractionError.new(self) unless description && request && response
41
45
  end
@@ -5,7 +5,7 @@ module Pact
5
5
 
6
6
  extend Matchers
7
7
 
8
- # Delegates to https://github.com/pact-foundation/pact-support/blob/master/lib/pact/matchers/matchers.rb#L25
8
+ # Delegates to https://github.com/bethesque/pact-support/blob/master/lib/pact/matchers/matchers.rb#L25
9
9
  def self.call expected, actual, options = {}
10
10
  diff expected, actual, options
11
11
  end
@@ -1,5 +1,5 @@
1
1
  module Pact
2
2
  module Support
3
- VERSION = "1.2.5"
3
+ VERSION = "1.2.99.alpha.1"
4
4
  end
5
5
  end
data/pact-support.gemspec CHANGED
@@ -34,6 +34,4 @@ Gem::Specification.new do |gem|
34
34
  gem.add_development_dependency 'hashie', '~> 2.0'
35
35
  gem.add_development_dependency 'activesupport'
36
36
  gem.add_development_dependency 'appraisal'
37
- gem.add_development_dependency 'conventional-changelog', '~>1.3'
38
- gem.add_development_dependency 'bump', '~> 0.5'
39
37
  end
@@ -3,50 +3,53 @@ require 'pact/consumer_contract'
3
3
 
4
4
  module Pact
5
5
  describe ConsumerContract do
6
-
7
6
  describe ".from_json" do
7
+
8
8
  let(:loaded_pact) { ConsumerContract.from_json(string) }
9
- context "when the top level object is a ConsumerContract" do
10
- let(:string) { '{"interactions":[{"request": {"path":"/path", "method" : "get"}, "response": {"status" : 200}}], "consumer": {"name" : "Bob"} , "provider": {"name" : "Mary"} }' }
11
9
 
12
- it "should create a Pact" do
13
- expect(loaded_pact).to be_instance_of ConsumerContract
14
- end
10
+ context "with an HTTP contract" do
11
+ context "when the top level object is a ConsumerContract" do
12
+ let(:string) { '{"interactions":[{"request": {"path":"/path", "method" : "get"}, "response": {"status" : 200}}], "consumer": {"name" : "Bob"} , "provider": {"name" : "Mary"} }' }
15
13
 
16
- it "should have interactions" do
17
- expect(loaded_pact.interactions).to be_instance_of Array
18
- end
14
+ it "should create a Pact" do
15
+ expect(loaded_pact).to be_instance_of ConsumerContract
16
+ end
19
17
 
20
- it "should have a consumer" do
21
- expect(loaded_pact.consumer).to be_instance_of Pact::ServiceConsumer
22
- end
18
+ it "should have interactions" do
19
+ expect(loaded_pact.interactions).to be_instance_of Array
20
+ end
23
21
 
24
- it "should have a provider" do
25
- expect(loaded_pact.provider).to be_instance_of Pact::ServiceProvider
26
- end
27
- end
22
+ it "should have a consumer" do
23
+ expect(loaded_pact.consumer).to be_instance_of Pact::ServiceConsumer
24
+ end
28
25
 
29
- context "with old 'producer' key" do
30
- let(:string) { File.read('./spec/support/a_consumer-a_producer.json')}
31
- it "should create a Pact" do
32
- expect(loaded_pact).to be_instance_of ConsumerContract
26
+ it "should have a provider" do
27
+ expect(loaded_pact.provider).to be_instance_of Pact::ServiceProvider
28
+ end
33
29
  end
34
30
 
35
- it "should have interactions" do
36
- expect(loaded_pact.interactions).to be_instance_of Array
37
- end
31
+ context "with old 'producer' key" do
32
+ let(:string) { File.read('./spec/support/a_consumer-a_producer.json')}
33
+ it "should create a Pact" do
34
+ expect(loaded_pact).to be_instance_of ConsumerContract
35
+ end
38
36
 
39
- it "should have a consumer" do
40
- expect(loaded_pact.consumer).to be_instance_of Pact::ServiceConsumer
41
- end
37
+ it "should have interactions" do
38
+ expect(loaded_pact.interactions).to be_instance_of Array
39
+ end
42
40
 
43
- it "should have a provider" do
44
- expect(loaded_pact.provider).to be_instance_of Pact::ServiceProvider
45
- expect(loaded_pact.provider.name).to eq "an old producer"
46
- end
41
+ it "should have a consumer" do
42
+ expect(loaded_pact.consumer).to be_instance_of Pact::ServiceConsumer
43
+ end
47
44
 
48
- it "should have a provider_state" do
49
- expect(loaded_pact.interactions.first.provider_state).to eq 'state one'
45
+ it "should have a provider" do
46
+ expect(loaded_pact.provider).to be_instance_of Pact::ServiceProvider
47
+ expect(loaded_pact.provider.name).to eq "an old producer"
48
+ end
49
+
50
+ it "should have a provider_state" do
51
+ expect(loaded_pact.interactions.first.provider_state).to eq 'state one'
52
+ end
50
53
  end
51
54
  end
52
55
  end
@@ -3,22 +3,13 @@ require 'pact/consumer_contract/file_name'
3
3
  module Pact
4
4
  describe FileName do
5
5
  describe "file_path" do
6
-
7
- subject { FileName.file_path 'foo', 'bar', 'tmp/pacts' }
6
+ let(:subject) { FileName.file_path 'foo', 'bar', 'tmp/pacts' }
8
7
  it { is_expected.to eq 'tmp/pacts/foo-bar.json' }
9
8
 
10
9
  context "when unique is true" do
11
- subject { FileName.file_path 'foo', 'bar', 'tmp/pacts', unique: true }
10
+ let(:subject) { FileName.file_path 'foo', 'bar', 'tmp/pacts', unique: true }
12
11
  it { is_expected.to match %r{tmp/pacts/foo-bar-\d+.json} }
13
12
  end
14
-
15
- context "when the path includes backslashes" do
16
- subject { FileName.file_path 'foo', 'bar', 'c:\tmp\pacts' }
17
-
18
- it "changes them to forward slashes" do
19
- expect(subject).to eq "c:/tmp/pacts/foo-bar.json"
20
- end
21
- end
22
13
  end
23
14
  end
24
15
  end
data/tasks/spec.rake CHANGED
@@ -12,4 +12,3 @@ task :spec_with_active_support => [:set_active_support_on] do
12
12
  end
13
13
 
14
14
  task :default => [:spec, :spec_with_active_support]
15
-
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact-support
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.5
4
+ version: 1.2.99.alpha.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Fraser
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2018-02-16 00:00:00.000000000 Z
15
+ date: 2018-03-08 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: randexp
@@ -210,34 +210,6 @@ dependencies:
210
210
  - - ">="
211
211
  - !ruby/object:Gem::Version
212
212
  version: '0'
213
- - !ruby/object:Gem::Dependency
214
- name: conventional-changelog
215
- requirement: !ruby/object:Gem::Requirement
216
- requirements:
217
- - - "~>"
218
- - !ruby/object:Gem::Version
219
- version: '1.3'
220
- type: :development
221
- prerelease: false
222
- version_requirements: !ruby/object:Gem::Requirement
223
- requirements:
224
- - - "~>"
225
- - !ruby/object:Gem::Version
226
- version: '1.3'
227
- - !ruby/object:Gem::Dependency
228
- name: bump
229
- requirement: !ruby/object:Gem::Requirement
230
- requirements:
231
- - - "~>"
232
- - !ruby/object:Gem::Version
233
- version: '0.5'
234
- type: :development
235
- prerelease: false
236
- version_requirements: !ruby/object:Gem::Requirement
237
- requirements:
238
- - - "~>"
239
- - !ruby/object:Gem::Version
240
- version: '0.5'
241
213
  description:
242
214
  email:
243
215
  - james.fraser@alumni.swinburne.edu
@@ -268,6 +240,7 @@ files:
268
240
  - lib/pact/consumer_contract/consumer_contract.rb
269
241
  - lib/pact/consumer_contract/file_name.rb
270
242
  - lib/pact/consumer_contract/headers.rb
243
+ - lib/pact/consumer_contract/http_consumer_contract_parser.rb
271
244
  - lib/pact/consumer_contract/interaction.rb
272
245
  - lib/pact/consumer_contract/pact_file.rb
273
246
  - lib/pact/consumer_contract/query.rb
@@ -320,7 +293,6 @@ files:
320
293
  - lib/pact/term.rb
321
294
  - lib/tasks/pact.rake
322
295
  - pact-support.gemspec
323
- - script/release.sh
324
296
  - script/update-pact-specification-v2
325
297
  - spec/fixtures/interaction-with-matching-rules.json
326
298
  - spec/integration/matching_rules_extract_and_merge_spec.rb
@@ -391,7 +363,6 @@ files:
391
363
  - spec/support/test_app_fail.json
392
364
  - spec/support/test_app_pass.json
393
365
  - spec/support/test_app_with_right_content_type_differ.json
394
- - tasks/release.rake
395
366
  - tasks/spec.rake
396
367
  homepage: https://github.com/bethesque/pact-support
397
368
  licenses:
@@ -408,9 +379,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
408
379
  version: '2.0'
409
380
  required_rubygems_version: !ruby/object:Gem::Requirement
410
381
  requirements:
411
- - - ">="
382
+ - - ">"
412
383
  - !ruby/object:Gem::Version
413
- version: '0'
384
+ version: 1.3.1
414
385
  requirements: []
415
386
  rubyforge_project:
416
387
  rubygems_version: 2.4.5.2
data/script/release.sh DELETED
@@ -1,9 +0,0 @@
1
- #!/bin/sh
2
- set -e
3
-
4
- git checkout -- lib/pact/support/version.rb
5
- bundle exec bump ${1:-minor} --no-commit
6
- bundle exec rake generate_changelog
7
- git add CHANGELOG.md lib/pact/support/version.rb
8
- git commit -m "Releasing version $(ruby -r ./lib/pact/support/version.rb -e "puts Pact::Support::VERSION")"
9
- bundle exec rake release
data/tasks/release.rake DELETED
@@ -1,5 +0,0 @@
1
- task :generate_changelog do
2
- require 'pact/support/version'
3
- require 'conventional_changelog'
4
- ConventionalChangelog::Generator.new.generate! version: "v#{Pact::Support::VERSION}"
5
- end