pact-support 1.14.3 → 1.15.4

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
  SHA256:
3
- metadata.gz: '087dcf6851c39ea4ebd35e99b0ca22187881043cfdfd9066aec43f84e7b0312a'
4
- data.tar.gz: 0dbadb7e1f17f75c08380559800293bc1d150c96d86f757d28baf12a0db3151e
3
+ metadata.gz: bbf781395b4831b71e7c146cd7b4b4147720735a4d215c03809f63f6914355b6
4
+ data.tar.gz: dc33661cde8c26da60d3377152de106a7eb018c936366cf2eb27cefc8b2ec8e5
5
5
  SHA512:
6
- metadata.gz: 605bef579256f250e1f460558c1c70f5883ce3112aec69b41aa26128ba76d0f3fbebd7c6ca766c5d2552b22302d60c3c9b34a42d69ae6d642dde2db227b365fc
7
- data.tar.gz: 6d3876bbfa8f702790a4131c72fb092952297ee963e2a0e6cdd28d76de69ef6fdd6c11c55d18ef5cfc907fddc9fb972838f01a6f16d0700c93d920a7697e351b
6
+ metadata.gz: 23424ffbcfc67d2e1a6f71e451f777ea56b1ad4ea1f5bbc017e40ccd236516ed88faa1724f1cfa5867da9f72904e4e0dd42f3e15aec4638441df44f94cfdc095
7
+ data.tar.gz: 0c844a6243463605b30bbb8f0de186603ff7fe93ba032f5ee702b1496b562d4877daafa155d6680077dc8258235049ecf816b52a6bd496b9531f4886ac6f06bf
@@ -1,3 +1,38 @@
1
+ <a name="v1.15.4"></a>
2
+ ### v1.15.4 (2020-11-04)
3
+
4
+ #### Bug Fixes
5
+
6
+ * update release gem action version ([9dead58](/../../commit/9dead58))
7
+
8
+ <a name="v1.15.3"></a>
9
+ ### v1.15.3 (2020-11-04)
10
+
11
+
12
+ #### Bug Fixes
13
+
14
+ * release workflow ([4bdf8d8](/../../commit/4bdf8d8))
15
+ * not actually a fix, just triggering new release ([74038a5](/../../commit/74038a5))
16
+
17
+
18
+ <a name="v1.15.2"></a>
19
+ ### v1.15.2 (2020-11-04)
20
+
21
+
22
+ #### Bug Fixes
23
+
24
+ * parse query string to hash for v2 interactions ([faff17c](/../../commit/faff17c))
25
+
26
+
27
+ <a name="v1.15.0"></a>
28
+ ### v1.15.0 (2020-04-30)
29
+
30
+
31
+ #### Bug Fixes
32
+
33
+ * follow first redirect when fetching remote pact artifacts. (#80) ([c1df6dd](/../../commit/c1df6dd))
34
+
35
+
1
36
  <a name="v1.14.3"></a>
2
37
  ### v1.14.3 (2020-04-06)
3
38
 
@@ -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
@@ -79,12 +79,37 @@ module Pact
79
79
 
80
80
  def get_remote(uri, options)
81
81
  request = Net::HTTP::Get.new(uri)
82
+ request = prepare_auth(request, options) if options[:username] || options[:token]
83
+
84
+ http = prepare_request(uri)
85
+ response = perform_http_request(http, request, options)
86
+
87
+ if response.is_a?(Net::HTTPRedirection)
88
+ uri = URI(response.header['location'])
89
+ req = Net::HTTP::Get.new(uri)
90
+ req = prepare_auth(req, options) if options[:username] || options[:token]
91
+
92
+ http = prepare_request(uri)
93
+ response = perform_http_request(http, req, options)
94
+ end
95
+ response
96
+ end
97
+
98
+ def prepare_auth(request, options)
82
99
  request.basic_auth(options[:username], options[:password]) if options[:username]
83
100
  request['Authorization'] = "Bearer #{options[:token]}" if options[:token]
101
+ request
102
+ end
103
+
104
+ def prepare_request(uri)
84
105
  http = Net::HTTP.new(uri.host, uri.port, :ENV)
85
106
  http.use_ssl = (uri.scheme == 'https')
86
107
  http.ca_file = ENV['SSL_CERT_FILE'] if ENV['SSL_CERT_FILE'] && ENV['SSL_CERT_FILE'] != ''
87
108
  http.ca_path = ENV['SSL_CERT_DIR'] if ENV['SSL_CERT_DIR'] && ENV['SSL_CERT_DIR'] != ''
109
+ http
110
+ end
111
+
112
+ def perform_http_request(http, request, options)
88
113
  http.start do |http|
89
114
  http.open_timeout = options[:open_timeout] || OPEN_TIMEOUT
90
115
  http.read_timeout = options[:read_timeout] || READ_TIMEOUT
@@ -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.14.3"
3
+ VERSION = "1.15.4"
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.14.3
4
+ version: 1.15.4
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-04-06 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
@@ -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
@@ -298,8 +312,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
298
312
  - !ruby/object:Gem::Version
299
313
  version: '0'
300
314
  requirements: []
301
- rubyforge_project:
302
- rubygems_version: 2.7.6
315
+ rubygems_version: 3.1.4
303
316
  signing_key:
304
317
  specification_version: 4
305
318
  summary: Shared code for Pact gems