pact-support 1.15.1 → 1.16.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ccc117840bc0955cb8ffa7568bab96b94ec5d7d51b6bd5233a05b251373e221
4
- data.tar.gz: 66218c13f81e23f76facec82ef95f64038376f3368ae02aa3ce16008288f35fe
3
+ metadata.gz: d6a279f056179dc2383e86277a08e0ee5436601e14462e646c74d5188f8f3926
4
+ data.tar.gz: 18a96a0b5b1108054a976704e33ab7e6127da3dcc84b470d869dff5127b6275f
5
5
  SHA512:
6
- metadata.gz: 4e16a0adf65d235937a123a5a1ee0043ded52ba0e4a2541f6b3a7a0e5e208a681cb405baee555b23c66d46a75dcb388999d1f424b0c7bb9c8055839cbf72f9ac
7
- data.tar.gz: 0dc8fef0d02eaeb5976395c4a0eb33bdc01ac0ba954dad0eab3a7bc8b24d31625224e28c048d31b551ff1bc15a39ba41bd0f275a80f8d578f9077f0193fdfcb0
6
+ metadata.gz: 8f3e75f12fc938510916fc09c5de54caeebeaa1e2067165ef1761114f2100a3b8f07f8d7a103b78becdcfc9fe30a2b3539b4170c42e4b223c7a0a16269e061b1
7
+ data.tar.gz: 950d8ab96d8e9d755a663072967f21ac6a71c9d99de1205b47fe4c05794a68c733473a6810319a0777c10f9ec196257b3ebe6b6677c830abb336503298855015
@@ -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
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Pact
2
2
  module Support
3
- VERSION = "1.15.1"
3
+ VERSION = "1.16.0"
4
4
  end
5
5
  end
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.15.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-07-16 00:00:00.000000000 Z
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: rspec
32
+ name: term-ansicolor
33
33
  requirement: !ruby/object:Gem::Requirement
34
34
  requirements:
35
- - - ">="
35
+ - - "~>"
36
36
  - !ruby/object:Gem::Version
37
- version: '2.14'
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: '2.14'
44
+ version: '1.0'
45
45
  - !ruby/object:Gem::Dependency
46
- name: term-ansicolor
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.0'
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.0'
58
+ version: '1.1'
59
59
  - !ruby/object:Gem::Dependency
60
- name: awesome_print
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.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.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