pact-support 1.15.1 → 1.16.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 +4 -4
- data/CHANGELOG.md +41 -0
- data/lib/pact/consumer_contract/interaction_v2_parser.rb +7 -2
- data/lib/pact/consumer_contract/query.rb +98 -0
- data/lib/pact/rspec.rb +2 -4
- data/lib/pact/support/version.rb +1 -1
- metadata +33 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6a279f056179dc2383e86277a08e0ee5436601e14462e646c74d5188f8f3926
|
4
|
+
data.tar.gz: 18a96a0b5b1108054a976704e33ab7e6127da3dcc84b470d869dff5127b6275f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f3e75f12fc938510916fc09c5de54caeebeaa1e2067165ef1761114f2100a3b8f07f8d7a103b78becdcfc9fe30a2b3539b4170c42e4b223c7a0a16269e061b1
|
7
|
+
data.tar.gz: 950d8ab96d8e9d755a663072967f21ac6a71c9d99de1205b47fe4c05794a68c733473a6810319a0777c10f9ec196257b3ebe6b6677c830abb336503298855015
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,44 @@
|
|
1
|
+
<a name="v1.16.0"></a>
|
2
|
+
### v1.16.0 (2020-11-04)
|
3
|
+
|
4
|
+
#### Features
|
5
|
+
|
6
|
+
* remove runtime dependency on rspec ([aca30e2](/../../commit/aca30e2))
|
7
|
+
|
8
|
+
<a name="v1.15.5"></a>
|
9
|
+
### v1.15.5 (2020-11-04)
|
10
|
+
|
11
|
+
#### Bug Fixes
|
12
|
+
|
13
|
+
* add missing outputs to release workflow ([d565d0f](/../../commit/d565d0f))
|
14
|
+
* try different output syntax ([b11e8fb](/../../commit/b11e8fb))
|
15
|
+
|
16
|
+
<a name="v1.15.4"></a>
|
17
|
+
### v1.15.4 (2020-11-04)
|
18
|
+
|
19
|
+
#### Bug Fixes
|
20
|
+
|
21
|
+
* update release gem action version ([9dead58](/../../commit/9dead58))
|
22
|
+
|
23
|
+
<a name="v1.15.3"></a>
|
24
|
+
### v1.15.3 (2020-11-04)
|
25
|
+
|
26
|
+
|
27
|
+
#### Bug Fixes
|
28
|
+
|
29
|
+
* release workflow ([4bdf8d8](/../../commit/4bdf8d8))
|
30
|
+
* not actually a fix, just triggering new release ([74038a5](/../../commit/74038a5))
|
31
|
+
|
32
|
+
|
33
|
+
<a name="v1.15.2"></a>
|
34
|
+
### v1.15.2 (2020-11-04)
|
35
|
+
|
36
|
+
|
37
|
+
#### Bug Fixes
|
38
|
+
|
39
|
+
* parse query string to hash for v2 interactions ([faff17c](/../../commit/faff17c))
|
40
|
+
|
41
|
+
|
1
42
|
<a name="v1.15.0"></a>
|
2
43
|
### v1.15.0 (2020-04-30)
|
3
44
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'pact/consumer_contract/request'
|
2
2
|
require 'pact/consumer_contract/response'
|
3
3
|
require 'pact/consumer_contract/provider_state'
|
4
|
+
require 'pact/consumer_contract/query'
|
4
5
|
require 'pact/symbolize_keys'
|
5
6
|
require 'pact/matching_rules'
|
6
7
|
require 'pact/errors'
|
@@ -15,13 +16,17 @@ module Pact
|
|
15
16
|
response = parse_response(hash['response'], options)
|
16
17
|
provider_states = parse_provider_states(hash['providerState'] || hash['provider_state'])
|
17
18
|
metadata = parse_metadata(hash['metadata'])
|
18
|
-
Interaction.new(symbolize_keys(hash).merge(request: request,
|
19
|
-
response: response,
|
19
|
+
Interaction.new(symbolize_keys(hash).merge(request: request,
|
20
|
+
response: response,
|
20
21
|
provider_states: provider_states,
|
21
22
|
metadata: metadata))
|
22
23
|
end
|
23
24
|
|
24
25
|
def self.parse_request request_hash, options
|
26
|
+
if request_hash['query'].is_a?(String)
|
27
|
+
request_hash = request_hash.dup
|
28
|
+
request_hash['query'] = Pact::Query.parse_string(request_hash['query'])
|
29
|
+
end
|
25
30
|
request_hash = Pact::MatchingRules.merge(request_hash, request_hash['matchingRules'], options)
|
26
31
|
Pact::Request::Expected.from_hash(request_hash)
|
27
32
|
end
|
@@ -3,6 +3,9 @@ require 'pact/consumer_contract/query_string'
|
|
3
3
|
|
4
4
|
module Pact
|
5
5
|
class Query
|
6
|
+
DEFAULT_SEP = /[&;] */n
|
7
|
+
COMMON_SEP = { ";" => /[;] */n, ";," => /[;,] */n, "&" => /[&] */n }
|
8
|
+
|
6
9
|
def self.create query
|
7
10
|
if query.is_a? Hash
|
8
11
|
Pact::QueryHash.new(query)
|
@@ -10,5 +13,100 @@ module Pact
|
|
10
13
|
Pact::QueryString.new(query)
|
11
14
|
end
|
12
15
|
end
|
16
|
+
|
17
|
+
def self.parse_string query_string
|
18
|
+
parsed_query = parse_query(query_string)
|
19
|
+
|
20
|
+
# If Rails nested params...
|
21
|
+
if parsed_query.keys.any?{ | key| key.include?("[") }
|
22
|
+
parse_nested_query(query_string)
|
23
|
+
else
|
24
|
+
parsed_query.each_with_object({}) do | (key, value), new_hash |
|
25
|
+
new_hash[key] = [*value]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Ripped from Rack to avoid adding an unnecessary dependency, thank you Rack
|
31
|
+
# https://github.com/rack/rack/blob/649c72bab9e7b50d657b5b432d0c205c95c2be07/lib/rack/utils.rb
|
32
|
+
def self.parse_query(qs, d = nil, &unescaper)
|
33
|
+
unescaper ||= method(:unescape)
|
34
|
+
|
35
|
+
params = {}
|
36
|
+
|
37
|
+
(qs || '').split(d ? (COMMON_SEP[d] || /[#{d}] */n) : DEFAULT_SEP).each do |p|
|
38
|
+
next if p.empty?
|
39
|
+
k, v = p.split('=', 2).map!(&unescaper)
|
40
|
+
|
41
|
+
if cur = params[k]
|
42
|
+
if cur.class == Array
|
43
|
+
params[k] << v
|
44
|
+
else
|
45
|
+
params[k] = [cur, v]
|
46
|
+
end
|
47
|
+
else
|
48
|
+
params[k] = v
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
return params.to_h
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.parse_nested_query(qs, d = nil)
|
56
|
+
params = {}
|
57
|
+
|
58
|
+
unless qs.nil? || qs.empty?
|
59
|
+
(qs || '').split(d ? (COMMON_SEP[d] || /[#{d}] */n) : DEFAULT_SEP).each do |p|
|
60
|
+
k, v = p.split('=', 2).map! { |s| unescape(s) }
|
61
|
+
|
62
|
+
normalize_params(params, k, v)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
return params.to_h
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.normalize_params(params, name, v)
|
70
|
+
name =~ %r(\A[\[\]]*([^\[\]]+)\]*)
|
71
|
+
k = $1 || ''
|
72
|
+
after = $' || ''
|
73
|
+
|
74
|
+
if k.empty?
|
75
|
+
if !v.nil? && name == "[]"
|
76
|
+
return Array(v)
|
77
|
+
else
|
78
|
+
return
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
if after == ''
|
83
|
+
params[k] = v
|
84
|
+
elsif after == "["
|
85
|
+
params[name] = v
|
86
|
+
elsif after == "[]"
|
87
|
+
params[k] ||= []
|
88
|
+
raise ParameterTypeError, "expected Array (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Array)
|
89
|
+
params[k] << v
|
90
|
+
elsif after =~ %r(^\[\]\[([^\[\]]+)\]$) || after =~ %r(^\[\](.+)$)
|
91
|
+
child_key = $1
|
92
|
+
params[k] ||= []
|
93
|
+
raise ParameterTypeError, "expected Array (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Array)
|
94
|
+
if params_hash_type?(params[k].last) && !params_hash_has_key?(params[k].last, child_key)
|
95
|
+
normalize_params(params[k].last, child_key, v)
|
96
|
+
else
|
97
|
+
params[k] << normalize_params({}, child_key, v)
|
98
|
+
end
|
99
|
+
else
|
100
|
+
params[k] ||= {}
|
101
|
+
raise ParameterTypeError, "expected Hash (got #{params[k].class.name}) for param `#{k}'" unless params_hash_type?(params[k])
|
102
|
+
params[k] = normalize_params(params[k], after, v, depth - 1)
|
103
|
+
end
|
104
|
+
|
105
|
+
params
|
106
|
+
end
|
107
|
+
|
108
|
+
def self.unescape(s, encoding = Encoding::UTF_8)
|
109
|
+
URI.decode_www_form_component(s, encoding)
|
110
|
+
end
|
13
111
|
end
|
14
112
|
end
|
data/lib/pact/rspec.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'rspec'
|
2
1
|
# This is horrible, must work out a better way of doing this
|
3
2
|
module Pact
|
4
3
|
module RSpec
|
@@ -19,7 +18,6 @@ module Pact
|
|
19
18
|
require 'pact/provider/rspec/formatter_rspec_2'
|
20
19
|
Pact::Provider::RSpec::Formatter2
|
21
20
|
end
|
22
|
-
|
23
21
|
end
|
24
22
|
|
25
23
|
def self.full_description example
|
@@ -31,11 +29,11 @@ module Pact
|
|
31
29
|
end
|
32
30
|
|
33
31
|
def self.is_rspec_3
|
34
|
-
::RSpec::Core::Formatters.respond_to?(:register)
|
32
|
+
defined?(::RSpec) && ::RSpec::Core::Formatters.respond_to?(:register)
|
35
33
|
end
|
36
34
|
|
37
35
|
def self.is_rspec_2
|
38
|
-
!is_rspec_3
|
36
|
+
defined?(::RSpec) && !is_rspec_3
|
39
37
|
end
|
40
38
|
|
41
39
|
def self.with_rspec_3
|
data/lib/pact/support/version.rb
CHANGED
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.
|
4
|
+
version: 1.16.0
|
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: 2020-
|
15
|
+
date: 2020-11-04 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: randexp
|
@@ -29,47 +29,67 @@ dependencies:
|
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: 0.1.7
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
|
-
name:
|
32
|
+
name: term-ansicolor
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
34
34
|
requirements:
|
35
|
-
- - "
|
35
|
+
- - "~>"
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: '
|
37
|
+
version: '1.0'
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
requirements:
|
42
|
-
- - "
|
42
|
+
- - "~>"
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version: '
|
44
|
+
version: '1.0'
|
45
45
|
- !ruby/object:Gem::Dependency
|
46
|
-
name:
|
46
|
+
name: awesome_print
|
47
47
|
requirement: !ruby/object:Gem::Requirement
|
48
48
|
requirements:
|
49
49
|
- - "~>"
|
50
50
|
- !ruby/object:Gem::Version
|
51
|
-
version: '1.
|
51
|
+
version: '1.1'
|
52
52
|
type: :runtime
|
53
53
|
prerelease: false
|
54
54
|
version_requirements: !ruby/object:Gem::Requirement
|
55
55
|
requirements:
|
56
56
|
- - "~>"
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
-
version: '1.
|
58
|
+
version: '1.1'
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
|
-
name:
|
60
|
+
name: diff-lcs
|
61
61
|
requirement: !ruby/object:Gem::Requirement
|
62
62
|
requirements:
|
63
63
|
- - "~>"
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: '1.
|
65
|
+
version: '1.4'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
68
|
version_requirements: !ruby/object:Gem::Requirement
|
69
69
|
requirements:
|
70
70
|
- - "~>"
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: '1.
|
72
|
+
version: '1.4'
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: rspec
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '2.14'
|
80
|
+
- - "<"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '4.0'
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.14'
|
90
|
+
- - "<"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '4.0'
|
73
93
|
- !ruby/object:Gem::Dependency
|
74
94
|
name: rake
|
75
95
|
requirement: !ruby/object:Gem::Requirement
|