webmock 1.1.0 → 1.2.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.
- data/CHANGELOG.md +10 -1
- data/README.md +1 -1
- data/VERSION +1 -1
- data/lib/webmock/adapters/rspec.rb +15 -5
- data/lib/webmock/request_pattern.rb +1 -1
- data/lib/webmock/util/uri.rb +11 -11
- data/lib/webmock/webmock.rb +1 -1
- data/spec/benchmark.rb +63 -0
- data/spec/webmock_spec.rb +7 -1
- data/webmock.gemspec +5 -4
- metadata +46 -21
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
#Changelog
|
2
2
|
|
3
|
+
## 1.2.0
|
4
|
+
|
5
|
+
* RSpec 2 compatibility. Thanks to Sam Phillips!
|
6
|
+
|
7
|
+
* :allow_localhost => true' now permits 127.0.0.1 as well as 'localhost'. Thanks to Mack Earnhardt
|
8
|
+
|
9
|
+
* Request URI matching in now 2x faster!
|
10
|
+
|
11
|
+
|
3
12
|
## 1.1.0
|
4
13
|
|
5
|
-
* [VCR](http://github.com/myronmarston/vcr/) compatibility. Many thanks to Myron
|
14
|
+
* [VCR](http://github.com/myronmarston/vcr/) compatibility. Many thanks to Myron Marston for all suggestions.
|
6
15
|
|
7
16
|
* Support for stubbing requests and returning responses with multiple headers with the same name. i.e multiple Accept headers.
|
8
17
|
|
data/README.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
@@ -1,10 +1,20 @@
|
|
1
1
|
require 'webmock'
|
2
|
-
|
2
|
+
|
3
|
+
# RSpec 1.x and 2.x compatibility
|
4
|
+
begin
|
5
|
+
require 'rspec'
|
6
|
+
RSPEC_NAMESPACE = RSPEC_CONFIGURER = Rspec
|
7
|
+
rescue LoadError
|
8
|
+
require 'spec'
|
9
|
+
RSPEC_NAMESPACE = Spec
|
10
|
+
RSPEC_CONFIGURER = Spec::Runner
|
11
|
+
end
|
12
|
+
|
3
13
|
require 'webmock/adapters/rspec/request_pattern_matcher'
|
4
14
|
require 'webmock/adapters/rspec/webmock_matcher'
|
5
15
|
require 'webmock/adapters/rspec/matchers'
|
6
|
-
|
7
|
-
|
16
|
+
|
17
|
+
RSPEC_CONFIGURER.configure { |config|
|
8
18
|
|
9
19
|
config.include WebMock::Matchers
|
10
20
|
|
@@ -15,6 +25,6 @@ Spec::Runner.configure { |config|
|
|
15
25
|
|
16
26
|
module WebMock
|
17
27
|
def assertion_failure(message)
|
18
|
-
raise
|
28
|
+
raise RSPEC_NAMESPACE::Expectations::ExpectationNotMetError.new(message)
|
19
29
|
end
|
20
|
-
end
|
30
|
+
end
|
@@ -64,7 +64,7 @@ module WebMock
|
|
64
64
|
def matches?(uri)
|
65
65
|
if @pattern.is_a?(Addressable::URI)
|
66
66
|
##TODO : do I need to normalize again??
|
67
|
-
|
67
|
+
uri === @pattern
|
68
68
|
elsif @pattern.is_a?(Regexp)
|
69
69
|
WebMock::Util::URI.variations_of_uri_as_strings(uri).any? { |u| u.match(@pattern) }
|
70
70
|
else
|
data/lib/webmock/util/uri.rb
CHANGED
@@ -17,7 +17,7 @@ module WebMock
|
|
17
17
|
uri = 'http://' + uri unless uri.match('^https?://') if uri.is_a?(String)
|
18
18
|
normalized_uri = Addressable::URI.heuristic_parse(uri)
|
19
19
|
normalized_uri.query_values = Hash[*normalized_uri.query_values.sort.flatten] if normalized_uri.query_values
|
20
|
-
normalized_uri.normalize!
|
20
|
+
normalized_uri = normalized_uri.normalize #normalize! is slower
|
21
21
|
normalized_uri.port = normalized_uri.inferred_port unless normalized_uri.port
|
22
22
|
normalized_uri
|
23
23
|
end
|
@@ -26,20 +26,20 @@ module WebMock
|
|
26
26
|
normalized_uri = normalize_uri(uri_object.dup).freeze
|
27
27
|
uris = [ normalized_uri ]
|
28
28
|
|
29
|
+
if normalized_uri.path == '/'
|
30
|
+
uris = uris_with_trailing_slash_and_without(uris)
|
31
|
+
end
|
32
|
+
|
33
|
+
uris = uris_encoded_and_unencoded(uris)
|
34
|
+
|
29
35
|
if normalized_uri.port == Addressable::URI.port_mapping[normalized_uri.scheme]
|
30
36
|
uris = uris_with_inferred_port_and_without(uris)
|
31
37
|
end
|
32
|
-
|
38
|
+
|
33
39
|
if normalized_uri.scheme == "http"
|
34
40
|
uris = uris_with_scheme_and_without(uris)
|
35
41
|
end
|
36
42
|
|
37
|
-
if normalized_uri.path == '/'
|
38
|
-
uris = uris_with_trailing_slash_and_without(uris)
|
39
|
-
end
|
40
|
-
|
41
|
-
uris = uris_encoded_and_unencoded(uris)
|
42
|
-
|
43
43
|
uris.map {|uri| uri.to_s.gsub(/^\/\//,'') }.uniq
|
44
44
|
end
|
45
45
|
|
@@ -58,17 +58,17 @@ module WebMock
|
|
58
58
|
private
|
59
59
|
|
60
60
|
def self.uris_with_inferred_port_and_without(uris)
|
61
|
-
uris.map { |uri| [ uri, uri.
|
61
|
+
uris.map { |uri| [ uri, uri.gsub(%r{(:80)|(:443)}, "").freeze ] }.flatten
|
62
62
|
end
|
63
63
|
|
64
64
|
def self.uris_encoded_and_unencoded(uris)
|
65
65
|
uris.map do |uri|
|
66
|
-
[ uri, Addressable::URI.
|
66
|
+
[ uri.to_s, Addressable::URI.unencode(uri, String).freeze ]
|
67
67
|
end.flatten
|
68
68
|
end
|
69
69
|
|
70
70
|
def self.uris_with_scheme_and_without(uris)
|
71
|
-
uris.map { |uri| [ uri, uri.
|
71
|
+
uris.map { |uri| [ uri, uri.gsub(%r{^https?://},"").freeze ] }.flatten
|
72
72
|
end
|
73
73
|
|
74
74
|
def self.uris_with_trailing_slash_and_without(uris)
|
data/lib/webmock/webmock.rb
CHANGED
@@ -44,7 +44,7 @@ module WebMock
|
|
44
44
|
uri = WebMock::Util::URI.normalize_uri(uri)
|
45
45
|
end
|
46
46
|
Config.instance.allow_net_connect ||
|
47
|
-
(Config.instance.allow_localhost && uri.is_a?(Addressable::URI) && uri.host == 'localhost')
|
47
|
+
(Config.instance.allow_localhost && uri.is_a?(Addressable::URI) && (uri.host == 'localhost' || uri.host == '127.0.0.1'))
|
48
48
|
end
|
49
49
|
|
50
50
|
def registered_request?(request_signature)
|
data/spec/benchmark.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'benchmark'
|
3
|
+
require 'net/http'
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
5
|
+
|
6
|
+
def http_request
|
7
|
+
res = Net::HTTP.get_response(URI.parse('http://example.com'))
|
8
|
+
raise "Body should be 'Hello'" unless res.body == 'Hello'
|
9
|
+
end
|
10
|
+
|
11
|
+
# def fakeweb
|
12
|
+
# FakeWeb.register_uri(:get, 'http://example.com', :body => 'Hello')
|
13
|
+
# yield
|
14
|
+
# ensure
|
15
|
+
# FakeWeb.clean_registry
|
16
|
+
# end
|
17
|
+
|
18
|
+
def webmock
|
19
|
+
WebMock.stub_request(:get, %r{http://example.com}).to_return(:body => 'Hello')
|
20
|
+
yield
|
21
|
+
ensure
|
22
|
+
WebMock.reset_webmock
|
23
|
+
end
|
24
|
+
|
25
|
+
def perform_benchmark(name)
|
26
|
+
puts "\n\nBenchmarking #{name}:"
|
27
|
+
Benchmark.benchmark do |b|
|
28
|
+
%w(webmock).each do |type|
|
29
|
+
b.report(type) do
|
30
|
+
# this is a bit convoluted, but we want to ensure that each benchmark runs without the other library loaded,
|
31
|
+
# so we fork off a sub-process before requiring the libraries.
|
32
|
+
Process.fork do
|
33
|
+
require type
|
34
|
+
yield type
|
35
|
+
end
|
36
|
+
Process.wait
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
n = 5000 #*2*2
|
43
|
+
# uri = Addressable::URI.heuristic_parse("http://www.example.com")
|
44
|
+
perform_benchmark("Single setup/teardown") do |type|
|
45
|
+
send(type) { n.times { http_request } }
|
46
|
+
# (2*n).times { WebMock::Util::URI.normalize_uri("http://www.example.com") }
|
47
|
+
end
|
48
|
+
|
49
|
+
perform_benchmark("Setup/teardown for each http request") do |type|
|
50
|
+
n.times { send(type) { http_request } }
|
51
|
+
# WebMock::Util::URI.normalize_uri("http://www.example.com")
|
52
|
+
end
|
53
|
+
|
54
|
+
# Output on my machine:
|
55
|
+
#
|
56
|
+
# Benchmarking Single setup/teardown:
|
57
|
+
# webmock 0.000000 0.000000 18.830000 ( 19.350281)
|
58
|
+
# fakeweb 0.000000 0.000000 1.930000 ( 2.049569)
|
59
|
+
#
|
60
|
+
#
|
61
|
+
# Benchmarking Setup/teardown for each http request:
|
62
|
+
# webmock 0.000000 0.000000 21.350000 ( 21.795557)
|
63
|
+
# fakeweb 0.000000 0.000000 2.490000 ( 2.707574)
|
data/spec/webmock_spec.rb
CHANGED
@@ -84,11 +84,17 @@ describe "WebMock", :shared => true do
|
|
84
84
|
}.should raise_error(WebMock::NetConnectNotAllowedError, client_specific_request_string("Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/"))
|
85
85
|
end
|
86
86
|
|
87
|
-
it "should allow a real request localhost" do
|
87
|
+
it "should allow a real request to localhost" do
|
88
88
|
lambda {
|
89
89
|
http_request(:get, "http://localhost:12345/")
|
90
90
|
}.should raise_error(connection_refused_exception_class)
|
91
91
|
end
|
92
|
+
|
93
|
+
it "should allow a real request to 127.0.0.1" do
|
94
|
+
lambda {
|
95
|
+
http_request(:get, "http://127.0.0.1:12345/")
|
96
|
+
}.should raise_error(connection_refused_exception_class)
|
97
|
+
end
|
92
98
|
end
|
93
99
|
end
|
94
100
|
|
data/webmock.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{webmock}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bartosz Blimke"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-05-14}
|
13
13
|
s.description = %q{WebMock allows stubbing HTTP requests and setting expectations on HTTP requests.}
|
14
14
|
s.email = %q{bartosz.blimke@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -83,10 +83,11 @@ Gem::Specification.new do |s|
|
|
83
83
|
s.homepage = %q{http://github.com/bblimke/webmock}
|
84
84
|
s.rdoc_options = ["--charset=UTF-8"]
|
85
85
|
s.require_paths = ["lib"]
|
86
|
-
s.rubygems_version = %q{1.3.
|
86
|
+
s.rubygems_version = %q{1.3.6}
|
87
87
|
s.summary = %q{Library for stubbing HTTP requests in Ruby.}
|
88
88
|
s.test_files = [
|
89
|
-
"spec/
|
89
|
+
"spec/benchmark.rb",
|
90
|
+
"spec/httpclient_spec.rb",
|
90
91
|
"spec/httpclient_spec_helper.rb",
|
91
92
|
"spec/net_http_spec.rb",
|
92
93
|
"spec/net_http_spec_helper.rb",
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webmock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 1.2.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Bartosz Blimke
|
@@ -9,49 +14,66 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-05-14 00:00:00 +01:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: addressable
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 2
|
29
|
+
- 1
|
30
|
+
- 1
|
23
31
|
version: 2.1.1
|
24
|
-
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
25
34
|
- !ruby/object:Gem::Dependency
|
26
35
|
name: rspec
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
38
|
requirements:
|
31
39
|
- - ">="
|
32
40
|
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 1
|
43
|
+
- 2
|
44
|
+
- 9
|
33
45
|
version: 1.2.9
|
34
|
-
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
35
48
|
- !ruby/object:Gem::Dependency
|
36
49
|
name: httpclient
|
37
|
-
|
38
|
-
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
52
|
requirements:
|
41
53
|
- - ">="
|
42
54
|
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 2
|
57
|
+
- 1
|
58
|
+
- 5
|
59
|
+
- 2
|
43
60
|
version: 2.1.5.2
|
44
|
-
|
61
|
+
type: :development
|
62
|
+
version_requirements: *id003
|
45
63
|
- !ruby/object:Gem::Dependency
|
46
64
|
name: patron
|
47
|
-
|
48
|
-
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
50
67
|
requirements:
|
51
68
|
- - ">="
|
52
69
|
- !ruby/object:Gem::Version
|
70
|
+
segments:
|
71
|
+
- 0
|
72
|
+
- 4
|
73
|
+
- 5
|
53
74
|
version: 0.4.5
|
54
|
-
|
75
|
+
type: :development
|
76
|
+
version_requirements: *id004
|
55
77
|
description: WebMock allows stubbing HTTP requests and setting expectations on HTTP requests.
|
56
78
|
email: bartosz.blimke@gmail.com
|
57
79
|
executables: []
|
@@ -137,22 +159,25 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
137
159
|
requirements:
|
138
160
|
- - ">="
|
139
161
|
- !ruby/object:Gem::Version
|
162
|
+
segments:
|
163
|
+
- 0
|
140
164
|
version: "0"
|
141
|
-
version:
|
142
165
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
166
|
requirements:
|
144
167
|
- - ">="
|
145
168
|
- !ruby/object:Gem::Version
|
169
|
+
segments:
|
170
|
+
- 0
|
146
171
|
version: "0"
|
147
|
-
version:
|
148
172
|
requirements: []
|
149
173
|
|
150
174
|
rubyforge_project:
|
151
|
-
rubygems_version: 1.3.
|
175
|
+
rubygems_version: 1.3.6
|
152
176
|
signing_key:
|
153
177
|
specification_version: 3
|
154
178
|
summary: Library for stubbing HTTP requests in Ruby.
|
155
179
|
test_files:
|
180
|
+
- spec/benchmark.rb
|
156
181
|
- spec/httpclient_spec.rb
|
157
182
|
- spec/httpclient_spec_helper.rb
|
158
183
|
- spec/net_http_spec.rb
|