pact-support 1.15.1 → 1.15.2

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: 013c48242b5599c0523e3a0628008cad711662fc96cf40271d5a1f28ae27fe33
4
+ data.tar.gz: 734a79394ff2baef976fcc0f3ad21907f994892c6dbba7a888d26f37332fdcb2
5
5
  SHA512:
6
- metadata.gz: 4e16a0adf65d235937a123a5a1ee0043ded52ba0e4a2541f6b3a7a0e5e208a681cb405baee555b23c66d46a75dcb388999d1f424b0c7bb9c8055839cbf72f9ac
7
- data.tar.gz: 0dc8fef0d02eaeb5976395c4a0eb33bdc01ac0ba954dad0eab3a7bc8b24d31625224e28c048d31b551ff1bc15a39ba41bd0f275a80f8d578f9077f0193fdfcb0
6
+ metadata.gz: e065e5f99495d3e5acd90fa10807b3ed33138669ea120e0709b2fce1169b53085fa81ad2751120f21befaad1a89bb1295d3a1837465ac1eebf5c2dc6f8a9bad1
7
+ data.tar.gz: 36054ddc380804d4b94b18829ec6859a595b82f14ccae0de78e5d5f842aa266af04c78782677b1d8a9a52f37a72e1168e203bfaac28d53e2ad8acaa79c90cadd
@@ -1,3 +1,12 @@
1
+ <a name="v1.15.2"></a>
2
+ ### v1.15.2 (2020-11-04)
3
+
4
+
5
+ #### Bug Fixes
6
+
7
+ * parse query string to hash for v2 interactions ([faff17c](/../../commit/faff17c))
8
+
9
+
1
10
  <a name="v1.15.0"></a>
2
11
  ### v1.15.0 (2020-04-30)
3
12
 
@@ -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,5 +1,5 @@
1
1
  module Pact
2
2
  module Support
3
- VERSION = "1.15.1"
3
+ VERSION = "1.15.2"
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.15.2
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-03 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: randexp
@@ -70,6 +70,20 @@ dependencies:
70
70
  - - "~>"
71
71
  - !ruby/object:Gem::Version
72
72
  version: '1.1'
73
+ - !ruby/object:Gem::Dependency
74
+ name: diff-lcs
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.4'
80
+ type: :runtime
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: '1.4'
73
87
  - !ruby/object:Gem::Dependency
74
88
  name: rake
75
89
  requirement: !ruby/object:Gem::Requirement