Returns the version string for the copy of FakeWeb you have loaded.
Enables or disables real HTTP connections for requests that don't match registered URIs.
If you set FakeWeb.allow_net_connect = false
and subsequently
try to make a request to a URI you haven't registered with register_uri, a
NetConnectNotAllowedError
will be raised. This is handy when you want to make sure your tests are
self-contained, or want to catch the scenario when a URI is changed in
implementation code without a corresponding test change.
When FakeWeb.allow_net_connect = true
(the default), requests
to URIs not stubbed with FakeWeb are passed
through to Net::HTTP.
If you assign a String
, URI
, or
Regexp
object, unstubbed requests will be allowed if they
match that value. This is useful when you want to allow access to a local
server for integration testing, while still preventing your tests from
using the internet.
# File lib/fake_web.rb, line 41 def self.allow_net_connect=(allowed) case allowed when String, URI, Regexp @allow_all_connections = false Registry.instance.register_passthrough_uri(allowed) else @allow_all_connections = allowed Registry.instance.remove_passthrough_uri end end
Returns true
if requests to URIs not registered with FakeWeb are passed through to Net::HTTP for normal
processing (the default). Returns false
if an exception is
raised for these requests.
If you've assigned a String
, URI
, or
Regexp
to FakeWeb.allow_net_connect=
, you must
supply a URI to check against that filter. Otherwise, an ArgumentError will
be raised.
# File lib/fake_web.rb, line 62 def self.allow_net_connect?(uri = nil) if Registry.instance.passthrough_uri_map.any? raise ArgumentError, "You must supply a URI to test" if uri.nil? Registry.instance.passthrough_uri_matches?(uri) else @allow_all_connections end end
Resets the FakeWeb Registry. This will force all subsequent web requests to behave as real requests.
# File lib/fake_web.rb, line 20 def self.clean_registry Registry.instance.clean_registry end
Returns the request object from the last request made via Net::HTTP.
# File lib/fake_web.rb, line 196 def self.last_request @last_request end
Register requests using the HTTP method specified by the symbol
method
for uri
to be handled according to
options
. If you specify the method :any
, the
response will be reigstered for any request for uri
.
uri
can be a String
, URI
, or
Regexp
object. options
must be either a
Hash
or an Array
of Hashes
(see
below), which must contain one of these two keys:
:body
A string which is used as the body of the response. If the string refers to
a valid filesystem path, the contents of that file will be read and used as
the body of the response instead. (This used to be two options,
:string
and :file
, respectively. These are now
deprecated.)
:response
Either a Net::HTTPResponse
, an IO
, or a
String
which is used as the full response for the request.
The easier way by far is to pass the :response
option to
register_uri
as a String
or an (open for reads)
IO
object which will be used as the complete HTTP response,
including headers and body. If the string points to a readable file, this
file will be used as the content for the request.
To obtain a complete response document, you can use the curl
command, like so:
curl -i http://example.com > response_from_example.com
which can then be used in your test environment like so:
FakeWeb.register_uri(:get, "http://example.com", :response => "response_from_example.com")
See the Net::HTTPResponse
documentation
for more information on creating custom response objects.
options
may also be an Array
containing a list of
the above-described Hash
. In this case, FakeWeb will rotate through each response. You can
optionally repeat a response more than once before rotating:
:times
The number of times this response will be used before moving on to the next
one. The last response will be repeated indefinitely, regardless of its
:times
parameter.
Two optional arguments are also accepted:
:status
Passing :status
as a two-value array will set the response
code and message. The defaults are 200
and OK
,
respectively. Example:
FakeWeb.register_uri(:get, "http://example.com", :body => "Go away!", :status => [404, "Not Found"])
:exception
The argument passed via :exception
will be raised when the
specified URL is requested. Any Exception
class is valid.
Example:
FakeWeb.register_uri(:get, "http://example.com", :exception => Net::HTTPError)
If you're using the :body
response type, you can pass
additional options to specify the HTTP headers to be used in the response.
Example:
FakeWeb.register_uri(:get, "http://example.com/index.txt", :body => "Hello", :content_type => "text/plain")
You can also pass an array of header values to include a header in the response more than once:
FakeWeb.register_uri(:get, "http://example.com", :set_cookie => ["name=value", "example=1"])
# File lib/fake_web.rb, line 150 def self.register_uri(*args) case args.length when 3 Registry.instance.register_uri(*args) when 2 print_missing_http_method_deprecation_warning(*args) Registry.instance.register_uri(:any, *args) else raise ArgumentError.new("wrong number of arguments (#{args.length} for 3)") end end
Returns true if a method
request for uri
is
registered with FakeWeb. Specify a method of
:any
to check against all HTTP methods.
# File lib/fake_web.rb, line 183 def self.registered_uri?(*args) case args.length when 2 Registry.instance.registered_uri?(*args) when 1 print_missing_http_method_deprecation_warning(*args) Registry.instance.registered_uri?(:any, *args) else raise ArgumentError.new("wrong number of arguments (#{args.length} for 2)") end end