lib/httpi.rb in httpi-0.3.0 vs lib/httpi.rb in httpi-0.4.0
- old
+ new
@@ -3,87 +3,131 @@
require "httpi/adapter"
# = HTTPI
#
# Executes HTTP requests using a predefined adapter.
+# All request methods accept an <tt>HTTPI::Request</tt> and an optional adapter.
+# They may also offer shortcut methods for executing basic requests.
+# Also they all return an <tt>HTTPI::Response</tt>.
+#
+# == GET
+#
+# request = HTTPI::Request.new :url => "http://example.com"
+# HTTPI.get request, :httpclient
+#
+# === Shortcuts
+#
+# HTTPI.get "http://example.com", :curb
+#
+# == POST
+#
+# request = HTTPI::Request.new
+# request.url = "http://example.com"
+# request.body = "<some>xml</some>"
+#
+# HTTPI.post request, :httpclient
+#
+# === Shortcuts
+#
+# HTTPI.post "http://example.com", "<some>xml</some>", :curb
+#
+# == HEAD
+#
+# request = HTTPI::Request.new :url => "http://example.com"
+# HTTPI.head request, :httpclient
+#
+# === Shortcuts
+#
+# HTTPI.head "http://example.com", :curb
+#
+# == PUT
+#
+# request = HTTPI::Request.new
+# request.url = "http://example.com"
+# request.body = "<some>xml</some>"
+#
+# HTTPI.put request, :httpclient
+#
+# === Shortcuts
+#
+# HTTPI.put "http://example.com", "<some>xml</some>", :curb
+#
+# == DELETE
+#
+# request = HTTPI::Request.new :url => "http://example.com"
+# HTTPI.delete request, :httpclient
+#
+# === Shortcuts
+#
+# HTTPI.delete "http://example.com", :curb
+#
+# == More control
+#
+# If you need more control over your request, you can access the HTTP client
+# instance represented by your adapter in a block.
+#
+# HTTPI.get request do |http|
+# http.follow_redirect_count = 3 # HTTPClient example
+# end
module HTTPI
class << self
- # Executes an HTTP GET request and returns an <tt>HTTPI::Response</tt>.
- #
- # ==== Example
- #
- # Accepts an <tt>HTTPI::Request</tt> and an optional adapter:
- #
- # request = HTTPI::Request.new :url => "http://example.com"
- # HTTPI.get request, :httpclient
- #
- # ==== Shortcut
- #
- # You can also just pass a URL and an optional adapter if you don't
- # need to configure the request:
- #
- # HTTPI.get "http://example.com", :curb
- #
- # ==== More control
- #
- # If you need more control over the request, you can access the HTTP
- # client instance represented by your adapter in a block.
- #
- # HTTPI.get request do |http|
- # http.follow_redirect_count = 3 # HTTPClient example
- # end
+ # Executes an HTTP GET request.
def get(request, adapter = nil)
request = Request.new :url => request if request.kind_of? String
with adapter do |adapter|
yield adapter.client if block_given?
adapter.get request
end
end
- # Executes an HTTP POST request and returns an <tt>HTTPI::Response</tt>.
- #
- # ==== Example
- #
- # Accepts an <tt>HTTPI::Request</tt> and an optional adapter:
- #
- # request = HTTPI::Request.new
- # request.url = "http://example.com"
- # request.body = "<some>xml</some>"
- #
- # HTTPI.post request, :httpclient
- #
- # ==== Shortcut
- #
- # You can also just pass a URL, a request body and an optional adapter
- # if you don't need to configure the request:
- #
- # HTTPI.post "http://example.com", "<some>xml</some>", :curb
- #
- # ==== More control
- #
- # If you need more control over the request, you can access the HTTP
- # client instance represented by your adapter in a block.
- #
- # HTTPI.post request do |http|
- # http.use_ssl = true # Curb example
- # end
+ # Executes an HTTP POST request.
def post(*args)
- request, adapter = extract_post_args(args)
+ request, adapter = request_and_adapter_from(args)
with adapter do |adapter|
yield adapter.client if block_given?
adapter.post request
end
end
- private
+ # Executes an HTTP HEAD request.
+ def head(request, adapter = nil)
+ request = Request.new :url => request if request.kind_of? String
+
+ with adapter do |adapter|
+ yield adapter.client if block_given?
+ adapter.head request
+ end
+ end
+ # Executes an HTTP PUT request.
+ def put(*args)
+ request, adapter = request_and_adapter_from(args)
+
+ with adapter do |adapter|
+ yield adapter.client if block_given?
+ adapter.put request
+ end
+ end
+
+ # Executes an HTTP DELETE request.
+ def delete(request, adapter = nil)
+ request = Request.new :url => request if request.kind_of? String
+
+ with adapter do |adapter|
+ yield adapter.client if block_given?
+ adapter.delete request
+ end
+ end
+
+ private
+
# Checks whether +args+ contains of an <tt>HTTPI::Request</tt> or a URL
# and a request body plus an optional adapter and returns an Array with
# an <tt>HTTPI::Request</tt> and (if given) an adapter.
- def extract_post_args(args)
+ def request_and_adapter_from(args)
return args if args[0].kind_of? Request
[Request.new(:url => args[0], :body => args[1]), args[2]]
end
# Accepts an +adapter+ (defaults to <tt>Adapter.use</tt>) and yields a