Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 430 lines (267 sloc) 14.078 kb
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
1 WebMock
2 =======
3
0016b13 Minor changes to README
Bartosz Blimke authored
4 Library for stubbing and setting expectations on HTTP requests in Ruby.
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
5
6 Features
7 --------
8
0016b13 Minor changes to README
Bartosz Blimke authored
9 * Stubbing HTTP requests at low http client lib level (no need to change tests when you change HTTP library)
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
10 * Setting and verifying expectations on HTTP requests
11 * Matching requests based on method, URI, headers and body
12 * Smart matching of the same URIs in different representations (also encoded and non encoded forms)
13 * Smart matching of the same headers in different representations.
14 * Support for Test::Unit and RSpec (and can be easily extended to other frameworks)
15 * Support for Net::HTTP and other http libraries based on Net::HTTP (i.e RightHttpConnection, rest-client, HTTParty)
32c653c Replaced google with example in README
Bartosz Blimke authored
16 * Support for HTTPClient library (both sync and async requests)
0016b13 Minor changes to README
Bartosz Blimke authored
17 * Easy to extend to other HTTP libraries
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
18
19 Installation
20 ------------
21
22 gem install webmock --source http://gemcutter.org
23
24 In your `test/test_helper.rb` add these two lines:
25
26 require 'webmock/test_unit'
27
28 include WebMock
29
30 or if you use RSpec add these lines to `spec/spec_helper`:
31
32 require 'webmock/rspec'
33
34 include WebMock
35
feb8ba5 Updated version to 0.7.3
Bartosz Blimke authored
36 You can also use WebMock without RSpec or Test::Unit support:
3ca443e WebMock module has to be included manually and is not included by RSp…
Bartosz Blimke authored
37
38 require 'webmock'
39
40 include WebMock
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
41
42 ## Examples
43
44
45
46 ## Stubbing
47
48
49 ### Stubbed request based on uri only and with the default response
50
32c653c Replaced google with example in README
Bartosz Blimke authored
51 stub_request(:any, "www.example.com")
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
52
32c653c Replaced google with example in README
Bartosz Blimke authored
53 Net::HTTP.get("www.example.com", "/") # ===> Success
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
54
55 ### Stubbing requests based on method, uri, body and headers
56
32c653c Replaced google with example in README
Bartosz Blimke authored
57 stub_request(:post, "www.example.com").with(:body => "abc", :headers => { 'Content-Length' => 3 })
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
58
32c653c Replaced google with example in README
Bartosz Blimke authored
59 uri = URI.parse("http://www.example.com/")
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
60 req = Net::HTTP::Post.new(uri.path)
61 req['Content-Length'] = 3
62 res = Net::HTTP.start(uri.host, uri.port) {|http|
63 http.request(req, "abc")
64 } # ===> Success
65
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
66 ### Matching request body and headers against regular expressions
67
68 stub_request(:post, "www.example.com").
69 with(:body => /^.*world$/, :headers => {"Content-Type" => /image\/.+/}).to_return(:body => "abc")
70
71 uri = URI.parse('http://www.example.com/')
72 req = Net::HTTP::Post.new(uri.path)
73 req['Content-Type'] = 'image/png'
74 res = Net::HTTP.start(uri.host, uri.port) {|http|
75 http.request(req, 'hello world')
76 } # ===> Success
77
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
78 ### Matching custom request headers
79
0016b13 Minor changes to README
Bartosz Blimke authored
80 stub_request(:any, "www.example.com").with(:headers=>{ 'Header-Name' => 'Header-Value' })
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
81
32c653c Replaced google with example in README
Bartosz Blimke authored
82 uri = URI.parse('http://www.example.com/')
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
83 req = Net::HTTP::Post.new(uri.path)
84 req['Header-Name'] = 'Header-Value'
85 res = Net::HTTP.start(uri.host, uri.port) {|http|
86 http.request(req, 'abc')
87 } # ===> Success
88
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
89 ### Matching requests against provided block
90
0016b13 Minor changes to README
Bartosz Blimke authored
91 stub_request(:post, "www.example.com").with { |request| request.body == "abc" }
92 RestClient.post('www.example.com', 'abc') # ===> Success
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
93
94 ### Request with basic authentication
95
96 stub_request(:get, "user:pass@www.example.com")
97
98 Net::HTTP.start('www.example.com') {|http|
99 req = Net::HTTP::Get.new('/')
100 req.basic_auth 'user', 'pass'
101 http.request(req)
102 } # ===> Success
103
104 ### Matching uris using regular expressions
105
106 stub_request(:any, /.*example.*/)
107
108 Net::HTTP.get('www.example.com', '/') # ===> Success
109
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
110 ### Stubbing with custom response
111
32c653c Replaced google with example in README
Bartosz Blimke authored
112 stub_request(:any, "www.example.com").to_return(:body => "abc", :status => 200, :headers => { 'Content-Length' => 3 } )
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
113
32c653c Replaced google with example in README
Bartosz Blimke authored
114 Net::HTTP.get("www.example.com", '/') # ===> "abc"
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
115
0f3bb21 Updated README regarding dynamic responses
Bartosz Blimke authored
116 ### Response with body specified as IO object
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
117
118 File.open('/tmp/response_body.txt', 'w') { |f| f.puts 'abc' }
119
32c653c Replaced google with example in README
Bartosz Blimke authored
120 stub_request(:any, "www.example.com").to_return(:body => File.new('/tmp/response_body.txt'), :status => 200)
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
121
32c653c Replaced google with example in README
Bartosz Blimke authored
122 Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
123
3314aad Added support for status messages
Bartosz Blimke authored
124 ### Response with custom status message
125
126 stub_request(:any, "www.example.com").to_return(:status => [500, "Internal Server Error"])
127
128 req = Net::HTTP::Get.new("/")
129 Net::HTTP.start("www.example.com") { |http| http.request(req) }.message # ===> "Internal Server Error"
af52fe7 Added support for declaring timeout errors using `to_timeout`
Bartosz Blimke authored
130
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
131 ### Replaying raw responses recorded with `curl -is`
132
133 `curl -is www.example.com > /tmp/example_curl_-is_output.txt`
134 raw_response_file = File.new("/tmp/example_curl_-is_output.txt")
135
136 from file
137
138 stub_request(:get, "www.example.com").to_return(raw_response_file)
139
140 or string
141
142 stub_request(:get, "www.example.com").to_return(raw_response_file.read)
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
143
0f3bb21 Updated README regarding dynamic responses
Bartosz Blimke authored
144 ### Responses dynamically evaluated from block
145
4e0568a Added information about dynamic responses to README
Bartosz Blimke authored
146 stub_request(:any, 'www.example.net').
0f3bb21 Updated README regarding dynamic responses
Bartosz Blimke authored
147 to_return { |request| {:body => request.body} }
4e0568a Added information about dynamic responses to README
Bartosz Blimke authored
148
0f3bb21 Updated README regarding dynamic responses
Bartosz Blimke authored
149 RestClient.post('www.example.net', 'abc') # ===> "abc\n"
5b1c97b @tomafro Added complete dynamic request, where headers, body and status can al…
tomafro authored
150
0f3bb21 Updated README regarding dynamic responses
Bartosz Blimke authored
151 ### Responses dynamically evaluated from lambda
5b1c97b @tomafro Added complete dynamic request, where headers, body and status can al…
tomafro authored
152
153 stub_request(:any, 'www.example.net').
154 to_return(lambda { |request| {:body => request.body} })
155
156 RestClient.post('www.example.net', 'abc') # ===> "abc\n"
4e0568a Added information about dynamic responses to README
Bartosz Blimke authored
157
0f3bb21 Updated README regarding dynamic responses
Bartosz Blimke authored
158 ### Responses with dynamically evaluated parts
159
160 stub_request(:any, 'www.example.net').
161 to_return(:body => lambda { |request| request.body })
162
163 RestClient.post('www.example.net', 'abc') # ===> "abc\n"
164
af52fe7 Added support for declaring timeout errors using `to_timeout`
Bartosz Blimke authored
165 ### Raising errors
166
167 stub_request(:any, 'www.example.net').to_raise(StandardError)
168
169 RestClient.post('www.example.net', 'abc') # ===> StandardError
170
171 ### Raising timeout errors
172
173 stub_request(:any, 'www.example.net').to_timeout
174
175 RestClient.post('www.example.net', 'abc') # ===> RestClient::RequestTimeout
176
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
177 ### Multiple responses for repeated requests
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
178
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
179 stub_request(:get, "www.example.com").to_return({:body => "abc"}, {:body => "def"})
180 Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
181 Net::HTTP.get('www.example.com', '/') # ===> "def\n"
182
183 #after all responses are used the last response will be returned infinitely
184
185 Net::HTTP.get('www.example.com', '/') # ===> "def\n"
bb41263 Improved section about basic authentication support in readme.
Bartosz Blimke authored
186
af52fe7 Added support for declaring timeout errors using `to_timeout`
Bartosz Blimke authored
187 ### Multiple responses using chained `to_return()`, `to_raise()` or `to_timeout` declarations
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
188
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
189 stub_request(:get, "www.example.com").
0f3bb21 Updated README regarding dynamic responses
Bartosz Blimke authored
190 to_return({:body => "abc"}).then. #then() is just a syntactic sugar
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
191 to_return({:body => "def"}).then.
192 to_raise(MyException)
193 Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
194 Net::HTTP.get('www.example.com', '/') # ===> "def\n"
195 Net::HTTP.get('www.example.com', '/') # ===> MyException raised
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
196
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
197 ### Specifying number of times given response should be returned
198
199 stub_request(:get, "www.example.com").
200 to_return({:body => "abc"}).times(2).then.
201 to_return({:body => "def"})
202
203 Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
204 Net::HTTP.get('www.example.com', '/') # ===> "abc\n"
205 Net::HTTP.get('www.example.com', '/') # ===> "def\n"
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
206
207
208 ### Real requests to network can be allowed or disabled
209
210 WebMock.allow_net_connect!
211
32c653c Replaced google with example in README
Bartosz Blimke authored
212 stub_request(:any, "www.example.com").to_return(:body => "abc")
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
213
32c653c Replaced google with example in README
Bartosz Blimke authored
214 Net::HTTP.get('www.example.com', '/') # ===> "abc"
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
215
216 Net::HTTP.get('www.something.com', '/') # ===> /.+Something.+/
217
218 WebMock.disable_net_connect!
219
220 Net::HTTP.get('www.something.com', '/') # ===> Failure
221
8859deb @macksmind Change the locahost option syntax and update README
macksmind authored
222 ### External requests can be disabled while allowing localhost
223
4c6c6a9 Fixed code formatting in README
Bartosz Blimke authored
224 WebMock.disable_net_connect!(:allow_localhost => true)
8859deb @macksmind Change the locahost option syntax and update README
macksmind authored
225
4c6c6a9 Fixed code formatting in README
Bartosz Blimke authored
226 Net::HTTP.get('www.something.com', '/') # ===> Failure
8859deb @macksmind Change the locahost option syntax and update README
macksmind authored
227
4c6c6a9 Fixed code formatting in README
Bartosz Blimke authored
228 Net::HTTP.get('localhost:9887', '/') # ===> Allowed. Perhaps to Selenium?
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
229
230 ## Setting Expectations
231
232 ### Setting expectations in Test::Unit
233 require 'webmock/test_unit'
234
32c653c Replaced google with example in README
Bartosz Blimke authored
235 stub_request(:any, "www.example.com")
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
236
32c653c Replaced google with example in README
Bartosz Blimke authored
237 uri = URI.parse('http://www.example.com/')
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
238 req = Net::HTTP::Post.new(uri.path)
239 req['Content-Length'] = 3
240 res = Net::HTTP.start(uri.host, uri.port) {|http|
241 http.request(req, 'abc')
242 }
243
32c653c Replaced google with example in README
Bartosz Blimke authored
244 assert_requested :post, "http://www.example.com",
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
245 :headers => {'Content-Length' => 3}, :body => "abc", :times => 1 # ===> Success
246
247 assert_not_requested :get, "http://www.something.com" # ===> Success
248
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
249 assert_requested(:post, "http://www.example.com", :times => 1) { |req| req.body == "abc" }
250
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
251 ### Expecting real (not stubbed) requests
252
253 WebMock.allow_net_connect!
254
32c653c Replaced google with example in README
Bartosz Blimke authored
255 Net::HTTP.get('www.example.com', '/') # ===> Success
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
256
32c653c Replaced google with example in README
Bartosz Blimke authored
257 assert_requested :get, "http://www.example.com" # ===> Success
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
258
259
260 ### Setting expectations in RSpec
261 This style is borrowed from [fakeweb-matcher](http://github.com/freelancing-god/fakeweb-matcher)
262
263 require 'webmock/rspec'
264
32c653c Replaced google with example in README
Bartosz Blimke authored
265 WebMock.should have_requested(:get, "www.example.com").with(:body => "abc", :headers => {'Content-Length' => 3}).twice
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
266
267 WebMock.should_not have_requested(:get, "www.something.com")
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
268
269 WebMock.should have_requested(:post, "www.example.com").with { |req| req.body == "abc" }
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
270
271 ### Different way of setting expectations in RSpec
272
32c653c Replaced google with example in README
Bartosz Blimke authored
273 request(:post, "www.example.com").with(:body => "abc", :headers => {'Content-Length' => 3}).should have_been_made.once
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
274
275 request(:post, "www.something.com").should have_been_made.times(3)
276
277 request(:any, "www.example.com").should_not have_been_made
278
5313e02 Added version 0.9.0 features to CHANGELOG and README
Bartosz Blimke authored
279 request(:post, "www.example.com").with { |req| req.body == "abc" }.should have_been_made
280
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
281 ## Clearing stubs and request history
282
283 If you want to reset all current stubs and history of requests use `WebMock.reset_webmock`
284
32c653c Replaced google with example in README
Bartosz Blimke authored
285 stub_request(:any, "www.example.com")
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
286
32c653c Replaced google with example in README
Bartosz Blimke authored
287 Net::HTTP.get('www.example.com', '/') # ===> Success
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
288
289 reset_webmock
290
32c653c Replaced google with example in README
Bartosz Blimke authored
291 Net::HTTP.get('www.example.com', '/') # ===> Failure
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
292
32c653c Replaced google with example in README
Bartosz Blimke authored
293 assert_not_requested :get, "www.example.com" # ===> Success
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
294
295
296 ## Matching requests
297
298 An executed request matches stubbed request if it passes following criteria:
299
4306efa Ability to register and expect requests with empty body.
Bartosz Blimke authored
300 When request URI matches stubbed request URI string or Regexp pattern<br/>
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
301 And request method is the same as stubbed request method or stubbed request method is :any<br/>
4306efa Ability to register and expect requests with empty body.
Bartosz Blimke authored
302 And request body is the same as stubbed request body or stubbed request body is not specified<br/>
0016b13 Minor changes to README
Bartosz Blimke authored
303 And request headers match stubbed request headers, or stubbed request headers match a subset of request headers, or stubbed request headers are not specified<br/>
304 And request matches provided block or block is not provided
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
305
306 ## Precedence of stubs
307
308 Always the last declared stub matching the request will be applied i.e:
309
32c653c Replaced google with example in README
Bartosz Blimke authored
310 stub_request(:get, "www.example.com").to_return(:body => "abc")
311 stub_request(:get, "www.example.com").to_return(:body => "def")
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
312
32c653c Replaced google with example in README
Bartosz Blimke authored
313 Net::HTTP.get('www.example.com', '/') # ====> "def"
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
314
315 ## Matching URIs
316
317 WebMock will match all different representations of the same URI.
318
319 I.e all the following representations of the URI are equal:
320
32c653c Replaced google with example in README
Bartosz Blimke authored
321 "www.example.com"
322 "www.example.com/"
323 "www.example.com:80"
324 "www.example.com:80/"
325 "http://www.example.com"
326 "http://www.example.com/"
327 "http://www.example.com:80"
328 "http://www.example.com:80/"
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
329
330 The following URIs with basic authentication are also equal for WebMock
331
32c653c Replaced google with example in README
Bartosz Blimke authored
332 "a b:pass@www.example.com"
333 "a b:pass@www.example.com/"
334 "a b:pass@www.example.com:80"
335 "a b:pass@www.example.com:80/"
336 "http://a b:pass@www.example.com"
337 "http://a b:pass@www.example.com/"
338 "http://a b:pass@www.example.com:80"
339 "http://a b:pass@www.example.com:80/"
340 "a%20b:pass@www.example.com"
341 "a%20b:pass@www.example.com/"
342 "a%20b:pass@www.example.com:80"
343 "a%20b:pass@www.example.com:80/"
344 "http://a%20b:pass@www.example.com"
345 "http://a%20b:pass@www.example.com/"
346 "http://a%20b:pass@www.example.com:80"
347 "http://a%20b:pass@www.example.com:80/"
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
348
349 or these
350
78414b7 Improved examples with equality of URIs with the same parameters
Bartosz Blimke authored
351 "www.example.com/my path/?a=my param&b=c"
352 "www.example.com/my%20path/?a=my%20param&b=c"
353 "www.example.com:80/my path/?a=my param&b=c"
354 "www.example.com:80/my%20path/?a=my%20param&b=c"
355 "http://www.example.com/my path/?a=my param&b=c"
356 "http://www.example.com/my%20path/?a=my%20param&b=c"
357 "http://www.example.com:80/my path/?a=my param&b=c"
358 "http://www.example.com:80/my%20path/?a=my%20param&b=c"
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
359
360
361 If you provide Regexp to match URI, WebMock will try to match it against every valid form of the same url.
362
78414b7 Improved examples with equality of URIs with the same parameters
Bartosz Blimke authored
363 I.e `/.*my param.*/` will match `www.example.com/my%20path` because it is equivalent of `www.example.com/my path`
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
364
365
366 ## Matching headers
367
368 WebMock will match request headers against stubbed request headers in the following situations:
369
370 1. Stubbed request has headers specified and request headers are the same as stubbed headers <br/>
371 i.e stubbed headers: `{ 'Header1' => 'Value1', 'Header1' => 'Value1' }`, requested: `{ 'Header1' => 'Value1', 'Header1' => 'Value1' }`
372
373 2. Stubbed request has headers specified and stubbed request headers are a subset of request headers <br/>
374 i.e stubbed headers: `{ 'Header1' => 'Value1' }`, requested: `{ 'Header1' => 'Value1', 'Header1' => 'Value1' }`
375
376 3. Stubbed request has no headers <br/>
377 i.e stubbed headers: `nil`, requested: `{ 'Header1' => 'Value1', 'Header1' => 'Value1' }`
378
379 WebMock normalises headers and treats all forms of same headers as equal:
380 i.e the following two sets of headers are equal:
381
382 `{ "Header1" => "value1", :content_length => 123, :X_CuStOm_hEAder => :value }`
383
384 `{ :header1 => "value1", "Content-Length" => 123, "x-cuSTOM-HeAder" => "value" }`
385
386
387 ## Bugs and Issues
388
389 Please submit them here [http://github.com/bblimke/webmock/issues](http://github.com/bblimke/webmock/issues)
390
391 ## Suggestions
392
393 If you have any suggestions on how to improve WebMock please send an email to the mailing list [groups.google.com/group/webmock-users](http://groups.google.com/group/webmock-users)
394
395 I'm particularly interested in how the DSL could be improved.
396
397 ## Credits
398
00424d9 Updated credits in README
Bartosz Blimke authored
399 The initial lines of this project were written during New Bamboo [Hack Day](http://blog.new-bamboo.co.uk/2009/11/13/hackday-results)
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
400 Thanks to my fellow [Bambinos](http://new-bamboo.co.uk/) for all the great suggestions!
401
00424d9 Updated credits in README
Bartosz Blimke authored
402 People who submitted patches and new features or suggested improvements. Many thanks to these people:
403
404 * Ben Pickles
405 * Mark Evans
406 * Ivan Vega
407 * Piotr Usewicz
408 * Nick Plante
409 * Nick Quaranto
410 * Diego E. "Flameeyes" Pettenò
411 * Niels Meersschaert
412 * Mack Earnhardt
413 * Arvicco
414 * Sergio Gil
415 * Jeffrey Jones
416 * Tekin Suleyman
417 * Tom Ward
418 * Nadim Bitar
419
420 ## Background
421
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
422 Thank you Fakeweb! This library was inspired by [FakeWeb](fakeweb.rubyforge.org).
00424d9 Updated credits in README
Bartosz Blimke authored
423 I imported some solutions from that project to WebMock. I also copied some code i.e Net:HTTP adapter.
95e8298 Revert "WebMock module has to be included manually and is not include…
Bartosz Blimke authored
424 Fakeweb architecture unfortunately didn't allow me to extend it easily with the features I needed.
425 I also preferred some things to work differently i.e request stub precedence.
426
427 ## Copyright
428
0016b13 Minor changes to README
Bartosz Blimke authored
429 Copyright 2009-2010 Bartosz Blimke. See LICENSE for details.
Something went wrong with that request. Please try again.