webmock 1.8.1 → 1.8.2
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.
- data/CHANGELOG.md +8 -0
- data/README.md +3 -0
- data/lib/webmock/api.rb +2 -0
- data/lib/webmock/request_pattern.rb +68 -66
- data/lib/webmock/version.rb +1 -1
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.8.2
|
4
|
+
|
5
|
+
* Prevent Webmock `hash_including` from overriding RSpec version 1 `hash_including` method.
|
6
|
+
|
7
|
+
Thanks to [Joe Karayusuf](https://github.com/karayusuf)
|
8
|
+
|
9
|
+
* Ensured WebMock handles RSpec 1 `hash_including` matcher for matching query params and body.
|
10
|
+
|
3
11
|
## 1.8.1
|
4
12
|
|
5
13
|
* Ensured WebMock doesn't interfere with `em-synchrony`, when `em-synchrony/em-http` is not included.
|
data/README.md
CHANGED
@@ -697,6 +697,9 @@ People who submitted patches and new features or suggested improvements. Many th
|
|
697
697
|
* Dimitrij Denissenko
|
698
698
|
* Marnen Laibow-Koser
|
699
699
|
* Evgeniy Dolzhenko
|
700
|
+
* Nick Recobra
|
701
|
+
* Jordan Elver
|
702
|
+
* Joe Karayusuf
|
700
703
|
|
701
704
|
For a full list of contributors you can visit the
|
702
705
|
[contributors](https://github.com/bblimke/webmock/contributors) page.
|
data/lib/webmock/api.rb
CHANGED
@@ -35,6 +35,8 @@ module WebMock
|
|
35
35
|
def hash_including(expected)
|
36
36
|
if defined?(::RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher)
|
37
37
|
RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new(expected)
|
38
|
+
elsif defined?(::Spec::Mocks::ArgumentMatchers::HashIncludingMatcher)
|
39
|
+
Spec::Mocks::ArgumentMatchers::HashIncludingMatcher.new(expected)
|
38
40
|
else
|
39
41
|
WebMock::Matchers::HashIncludingMatcher.new(expected)
|
40
42
|
end
|
@@ -40,19 +40,19 @@ module WebMock
|
|
40
40
|
private
|
41
41
|
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
43
|
+
def assign_options(options)
|
44
|
+
@body_pattern = BodyPattern.new(options[:body]) if options.has_key?(:body)
|
45
|
+
@headers_pattern = HeadersPattern.new(options[:headers]) if options.has_key?(:headers)
|
46
|
+
@uri_pattern.add_query_params(options[:query]) if options.has_key?(:query)
|
47
|
+
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
end
|
49
|
+
def create_uri_pattern(uri)
|
50
|
+
if uri.is_a?(Regexp)
|
51
|
+
URIRegexpPattern.new(uri)
|
52
|
+
else
|
53
|
+
URIStringPattern.new(uri)
|
55
54
|
end
|
55
|
+
end
|
56
56
|
|
57
57
|
end
|
58
58
|
|
@@ -82,7 +82,8 @@ module WebMock
|
|
82
82
|
query_params
|
83
83
|
elsif query_params.is_a?(WebMock::Matchers::HashIncludingMatcher)
|
84
84
|
query_params
|
85
|
-
elsif defined?(RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher) && query_params.is_a?(RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher)
|
85
|
+
elsif (defined?(RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher) && query_params.is_a?(RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher)) ||
|
86
|
+
(defined?(Spec::Mocks::ArgumentMatchers::HashIncludingMatcher) && query_params.is_a?(Spec::Mocks::ArgumentMatchers::HashIncludingMatcher))
|
86
87
|
WebMock::Matchers::HashIncludingMatcher.from_rspec_matcher(query_params)
|
87
88
|
else
|
88
89
|
Addressable::URI.parse('?' + query_params).query_values
|
@@ -161,7 +162,8 @@ module WebMock
|
|
161
162
|
def initialize(pattern)
|
162
163
|
@pattern = if pattern.is_a?(Hash)
|
163
164
|
normalize_hash(pattern)
|
164
|
-
elsif defined?(RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher) && pattern.is_a?(RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher)
|
165
|
+
elsif (defined?(RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher) && pattern.is_a?(RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher)) ||
|
166
|
+
(defined?(Spec::Mocks::ArgumentMatchers::HashIncludingMatcher) && pattern.is_a?(Spec::Mocks::ArgumentMatchers::HashIncludingMatcher))
|
165
167
|
WebMock::Matchers::HashIncludingMatcher.from_rspec_matcher(pattern)
|
166
168
|
else
|
167
169
|
pattern
|
@@ -186,62 +188,62 @@ module WebMock
|
|
186
188
|
end
|
187
189
|
|
188
190
|
private
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
end
|
191
|
+
def body_as_hash(body, content_type)
|
192
|
+
case BODY_FORMATS[content_type]
|
193
|
+
when :json then
|
194
|
+
WebMock::Util::JSON.parse(body)
|
195
|
+
when :xml then
|
196
|
+
Crack::XML.parse(body)
|
197
|
+
else
|
198
|
+
Addressable::URI.parse('?' + body).query_values
|
198
199
|
end
|
200
|
+
end
|
199
201
|
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
end
|
202
|
+
# Compare two hashes for equality
|
203
|
+
#
|
204
|
+
# For two hashes to match they must have the same length and all
|
205
|
+
# values must match when compared using `#===`.
|
206
|
+
#
|
207
|
+
# The following hashes are examples of matches:
|
208
|
+
#
|
209
|
+
# {a: /\d+/} and {a: '123'}
|
210
|
+
#
|
211
|
+
# {a: '123'} and {a: '123'}
|
212
|
+
#
|
213
|
+
# {a: {b: /\d+/}} and {a: {b: '123'}}
|
214
|
+
#
|
215
|
+
# {a: {b: 'wow'}} and {a: {b: 'wow'}}
|
216
|
+
#
|
217
|
+
# @param [Hash] query_parameters typically the result of parsing
|
218
|
+
# JSON, XML or URL encoded parameters.
|
219
|
+
#
|
220
|
+
# @param [Hash] pattern which contains keys with a string, hash or
|
221
|
+
# regular expression value to use for comparison.
|
222
|
+
#
|
223
|
+
# @return [Boolean] true if the paramaters match the comparison
|
224
|
+
# hash, false if not.
|
225
|
+
def matching_hashes?(query_parameters, pattern)
|
226
|
+
return false unless query_parameters.is_a?(Hash)
|
227
|
+
return false unless query_parameters.keys.sort == pattern.keys.sort
|
228
|
+
query_parameters.each do |key, actual|
|
229
|
+
expected = pattern[key]
|
230
|
+
|
231
|
+
if actual.is_a?(Hash) && expected.is_a?(Hash)
|
232
|
+
return false unless matching_hashes?(actual, expected)
|
233
|
+
else
|
234
|
+
return false unless expected === actual
|
234
235
|
end
|
235
|
-
true
|
236
236
|
end
|
237
|
+
true
|
238
|
+
end
|
237
239
|
|
238
|
-
|
239
|
-
|
240
|
-
|
240
|
+
def empty_string?(string)
|
241
|
+
string.nil? || string == ""
|
242
|
+
end
|
241
243
|
|
242
|
-
|
243
|
-
|
244
|
-
|
244
|
+
def normalize_hash(hash)
|
245
|
+
Hash[WebMock::Util::HashKeysStringifier.stringify_keys!(hash).sort]
|
246
|
+
end
|
245
247
|
|
246
248
|
end
|
247
249
|
|
@@ -268,9 +270,9 @@ module WebMock
|
|
268
270
|
|
269
271
|
private
|
270
272
|
|
271
|
-
|
272
|
-
|
273
|
-
|
273
|
+
def empty_headers?(headers)
|
274
|
+
headers.nil? || headers == {}
|
275
|
+
end
|
274
276
|
end
|
275
277
|
|
276
278
|
end
|
data/lib/webmock/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webmock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 51
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 1.8.
|
9
|
+
- 2
|
10
|
+
version: 1.8.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Bartosz Blimke
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-03-
|
18
|
+
date: 2012-03-07 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: addressable
|