2009-08-22 10:36:41 -04:00
require 'pathname'
2008-07-27 11:52:18 -04:00
require 'net/http'
require 'net/https'
2010-06-09 19:00:41 -04:00
require 'uri'
require 'zlib'
2011-07-07 10:29:02 -04:00
require 'multi_xml'
2013-06-14 16:24:45 -04:00
require 'json'
2014-02-08 12:32:43 -05:00
require 'csv'
2008-11-08 13:59:57 -05:00
2011-04-15 18:29:55 -04:00
require 'httparty/module_inheritable_attributes'
require 'httparty/cookie_hash'
require 'httparty/net_digest_auth'
2011-04-16 14:43:20 -04:00
require 'httparty/version'
2012-08-13 19:36:35 -04:00
require 'httparty/connection_adapter'
2013-08-16 14:59:23 -04:00
require 'httparty/logger/logger'
2009-06-23 20:28:42 -04:00
2010-12-10 16:47:42 -05:00
# @see HTTParty::ClassMethods
2009-01-28 14:06:46 -05:00
module HTTParty
2009-12-05 21:00:36 -05:00
module AllowedFormatsDeprecation
def const_missing ( const )
if const . to_s =~ / AllowedFormats$ /
Kernel . warn ( " Deprecated: Use HTTParty::Parser::SupportedFormats " )
HTTParty :: Parser :: SupportedFormats
else
super
end
end
end
2009-11-09 22:09:33 -05:00
2009-12-05 21:00:36 -05:00
extend AllowedFormatsDeprecation
2009-11-09 22:09:33 -05:00
2008-07-27 11:52:18 -04:00
def self . included ( base )
base . extend ClassMethods
2009-01-31 00:53:26 -05:00
base . send :include , HTTParty :: ModuleInheritableAttributes
2008-11-30 23:58:06 -05:00
base . send ( :mattr_inheritable , :default_options )
2009-06-23 20:28:42 -04:00
base . send ( :mattr_inheritable , :default_cookies )
2008-11-30 23:58:06 -05:00
base . instance_variable_set ( " @default_options " , { } )
2009-06-23 20:28:42 -04:00
base . instance_variable_set ( " @default_cookies " , CookieHash . new )
2008-07-27 11:52:18 -04:00
end
2009-11-09 22:09:33 -05:00
2011-01-12 14:30:31 -05:00
# == Common Request Options
2012-04-13 19:22:51 -04:00
# Request methods (get, post, patch, put, delete, head, options) all take a common set of options. These are:
2011-01-12 14:30:31 -05:00
#
# [:+body+:] Body of the request. If passed a Hash, will try to normalize it first, by default passing it to ActiveSupport::to_params. Any other kind of object will get used as-is.
# [:+http_proxyaddr+:] Address of proxy server to use.
# [:+http_proxyport+:] Port of proxy server to use.
2012-03-28 11:51:31 -04:00
# [:+http_proxyuser+:] User for proxy server authentication.
# [:+http_proxypass+:] Password for proxy server authentication.
2011-01-12 14:30:31 -05:00
# [:+limit+:] Maximum number of redirects to follow. Takes precedences over :+no_follow+.
# [:+query+:] Query string, or a Hash representing it. Normalized according to the same rules as :+body+. If you specify this on a POST, you must use a Hash. See also HTTParty::ClassMethods.default_params.
# [:+timeout+:] Timeout for opening connection and reading data.
2013-09-24 13:44:36 -04:00
# [:+local_host:] Local address to bind to before connecting.
# [:+local_port:] Local port to bind to before connecting.
2011-01-12 14:30:31 -05:00
#
# There are also another set of options with names corresponding to various class methods. The methods in question are those that let you set a class-wide default, and the options override the defaults on a request-by-request basis. Those options are:
# * :+base_uri+: see HTTParty::ClassMethods.base_uri.
# * :+basic_auth+: see HTTParty::ClassMethods.basic_auth. Only one of :+basic_auth+ and :+digest_auth+ can be used at a time; if you try using both, you'll get an ArgumentError.
# * :+debug_output+: see HTTParty::ClassMethods.debug_output.
# * :+digest_auth+: see HTTParty::ClassMethods.digest_auth. Only one of :+basic_auth+ and :+digest_auth+ can be used at a time; if you try using both, you'll get an ArgumentError.
# * :+format+: see HTTParty::ClassMethods.format.
# * :+headers+: see HTTParty::ClassMethods.headers. Must be a Hash.
# * :+maintain_method_across_redirects+: see HTTParty::ClassMethods.maintain_method_across_redirects.
# * :+no_follow+: see HTTParty::ClassMethods.no_follow.
# * :+parser+: see HTTParty::ClassMethods.parser.
2012-08-13 19:36:35 -04:00
# * :+connection_adapter+: see HTTParty::ClassMethods.connection_adapter.
2011-01-12 14:30:31 -05:00
# * :+pem+: see HTTParty::ClassMethods.pem.
# * :+query_string_normalizer+: see HTTParty::ClassMethods.query_string_normalizer
# * :+ssl_ca_file+: see HTTParty::ClassMethods.ssl_ca_file.
2012-08-13 19:36:35 -04:00
# * :+ssl_ca_path+: see HTTParty::ClassMethods.ssl_ca_path.
2011-01-12 14:30:31 -05:00
2008-12-06 22:47:01 -05:00
module ClassMethods
2011-01-12 14:30:31 -05:00
2009-12-05 21:00:36 -05:00
extend AllowedFormatsDeprecation
2013-08-16 14:59:23 -04:00
# Turns on logging
#
# class Foo
# include HTTParty
# logger Logger.new('http_logger'), :info, :apache
# end
def logger ( logger , level = :info , format = :apache )
default_options [ :logger ] = logger
default_options [ :log_level ] = level
default_options [ :log_format ] = format
end
2009-01-31 01:14:04 -05:00
# Allows setting http proxy information to be used
#
# class Foo
# include HTTParty
2012-03-28 11:51:31 -04:00
# http_proxy 'http://foo.com', 80, 'user', 'pass'
2009-01-31 01:14:04 -05:00
# end
2012-03-28 11:51:31 -04:00
def http_proxy ( addr = nil , port = nil , user = nil , pass = nil )
2008-11-08 13:59:57 -05:00
default_options [ :http_proxyaddr ] = addr
default_options [ :http_proxyport ] = port
2012-03-28 11:51:31 -04:00
default_options [ :http_proxyuser ] = user
default_options [ :http_proxypass ] = pass
2008-08-18 15:48:54 -04:00
end
2009-11-09 22:09:33 -05:00
2009-01-31 01:14:04 -05:00
# Allows setting a base uri to be used for each request.
# Will normalize uri to include http, etc.
#
# class Foo
# include HTTParty
# base_uri 'twitter.com'
# end
2008-11-08 13:59:57 -05:00
def base_uri ( uri = nil )
return default_options [ :base_uri ] unless uri
2008-12-06 23:41:28 -05:00
default_options [ :base_uri ] = HTTParty . normalize_base_uri ( uri )
2008-07-27 14:44:18 -04:00
end
2009-11-09 22:09:33 -05:00
2009-01-31 01:14:04 -05:00
# Allows setting basic authentication username and password.
#
# class Foo
# include HTTParty
# basic_auth 'username', 'password'
# end
2008-07-27 14:44:18 -04:00
def basic_auth ( u , p )
2008-11-08 13:59:57 -05:00
default_options [ :basic_auth ] = { :username = > u , :password = > p }
2008-07-27 11:52:18 -04:00
end
2009-11-09 22:09:33 -05:00
2010-02-09 21:50:53 -05:00
# Allows setting digest authentication username and password.
#
# class Foo
# include HTTParty
# digest_auth 'username', 'password'
# end
def digest_auth ( u , p )
default_options [ :digest_auth ] = { :username = > u , :password = > p }
end
2010-12-10 16:47:42 -05:00
# Do not send rails style query strings.
# Specically, don't use bracket notation when sending an array
#
# For a query:
# get '/', :query => {:selected_ids => [1,2,3]}
#
# The default query string looks like this:
# /?selected_ids[]=1&selected_ids[]=2&selected_ids[]=3
#
# Call `disable_rails_query_string_format` to transform the query string
# into:
# /?selected_ids=1&selected_ids=2&selected_ids=3
#
# @example
# class Foo
# include HTTParty
# disable_rails_query_string_format
# end
def disable_rails_query_string_format
query_string_normalizer Request :: NON_RAILS_QUERY_STRING_NORMALIZER
end
2009-01-31 01:14:04 -05:00
# Allows setting default parameters to be appended to each request.
# Great for api keys and such.
#
# class Foo
# include HTTParty
# default_params :api_key => 'secret', :another => 'foo'
# end
2008-07-28 12:40:40 -04:00
def default_params ( h = { } )
raise ArgumentError , 'Default params must be a hash' unless h . is_a? ( Hash )
2008-11-08 13:59:57 -05:00
default_options [ :default_params ] || = { }
default_options [ :default_params ] . merge! ( h )
2008-07-28 12:08:21 -04:00
end
2009-11-09 22:09:33 -05:00
2010-04-12 04:45:27 -04:00
# Allows setting a default timeout for all HTTP calls
# Timeout is specified in seconds.
#
# class Foo
# include HTTParty
# default_timeout 10
# end
def default_timeout ( t )
2011-02-17 13:55:48 -05:00
raise ArgumentError , 'Timeout must be an integer or float' unless t && ( t . is_a? ( Integer ) || t . is_a? ( Float ) )
2010-04-12 04:45:27 -04:00
default_options [ :timeout ] = t
end
2010-01-24 22:59:55 -05:00
# Set an output stream for debugging, defaults to $stderr.
# The output stream is passed on to Net::HTTP#set_debug_output.
#
# class Foo
# include HTTParty
# debug_output $stderr
# end
def debug_output ( stream = $stderr )
default_options [ :debug_output ] = stream
end
2010-04-10 23:50:49 -04:00
# Allows setting HTTP headers to be used for each request.
2009-01-31 01:14:04 -05:00
#
# class Foo
# include HTTParty
# headers 'Accept' => 'text/html'
# end
2008-07-28 12:08:21 -04:00
def headers ( h = { } )
raise ArgumentError , 'Headers must be a hash' unless h . is_a? ( Hash )
2008-11-08 13:59:57 -05:00
default_options [ :headers ] || = { }
default_options [ :headers ] . merge! ( h )
2008-07-28 12:08:21 -04:00
end
2009-01-28 23:54:42 -05:00
def cookies ( h = { } )
raise ArgumentError , 'Cookies must be a hash' unless h . is_a? ( Hash )
2009-06-23 20:28:42 -04:00
default_cookies . add_cookies ( h )
2009-01-28 23:54:42 -05:00
end
2009-11-09 22:09:33 -05:00
2011-01-18 15:36:56 -05:00
# Proceed to the location header when an HTTP response dictates a redirect.
# Redirects are always followed by default.
#
# @example
# class Foo
# include HTTParty
# base_uri 'http://google.com'
# follow_redirects true
# end
def follow_redirects ( value = true )
default_options [ :follow_redirects ] = value
end
2009-01-31 01:14:04 -05:00
# Allows setting the format with which to parse.
# Must be one of the allowed formats ie: json, xml
#
# class Foo
# include HTTParty
# format :json
# end
2009-12-05 21:00:36 -05:00
def format ( f = nil )
if f . nil?
default_options [ :format ]
else
parser ( Parser ) if parser . nil?
default_options [ :format ] = f
validate_format
end
2008-07-28 12:40:40 -04:00
end
2009-11-09 22:09:33 -05:00
2010-01-29 16:57:35 -05:00
# Declare whether or not to follow redirects. When true, an
# {HTTParty::RedirectionTooDeep} error will raise upon encountering a
# redirect. You can then gain access to the response object via
# HTTParty::RedirectionTooDeep#response.
#
# @see HTTParty::ResponseError#response
#
# @example
# class Foo
# include HTTParty
# base_uri 'http://google.com'
# no_follow true
# end
#
# begin
# Foo.get('/')
# rescue HTTParty::RedirectionTooDeep => e
# puts e.response.body
# end
def no_follow ( value = false )
default_options [ :no_follow ] = value
end
2010-02-09 22:02:15 -05:00
# Declare that you wish to maintain the chosen HTTP method across redirects.
# The default behavior is to follow redirects via the GET method.
# If you wish to maintain the original method, you can set this option to true.
#
# @example
# class Foo
# include HTTParty
# base_uri 'http://google.com'
# maintain_method_across_redirects true
# end
def maintain_method_across_redirects ( value = true )
default_options [ :maintain_method_across_redirects ] = value
end
2009-11-19 18:03:59 -05:00
# Allows setting a PEM file to be used
#
# class Foo
# include HTTParty
2010-11-24 12:27:45 -05:00
# pem File.read('/home/user/my.pem'), "optional password"
2009-11-19 18:03:59 -05:00
# end
2010-11-24 12:27:45 -05:00
def pem ( pem_contents , password = nil )
2009-11-20 17:45:06 -05:00
default_options [ :pem ] = pem_contents
2010-11-24 12:27:45 -05:00
default_options [ :pem_password ] = password
2009-11-19 18:03:59 -05:00
end
2013-10-22 06:45:03 -04:00
# Allows setting a PKCS12 file to be used
#
# class Foo
# include HTTParty
# pkcs12 File.read('/home/user/my.p12'), "password"
# end
def pkcs12 ( p12_contents , password )
default_options [ :p12 ] = p12_contents
default_options [ :p12_password ] = password
end
2010-10-29 09:09:47 -04:00
# Override the way query strings are normalized.
# Helpful for overriding the default rails normalization of Array queries.
#
# For a query:
# get '/', :query => {:selected_ids => [1,2,3]}
#
# The default query string normalizer returns:
# /?selected_ids[]=1&selected_ids[]=2&selected_ids[]=3
#
# Let's change it to this:
# /?selected_ids=1&selected_ids=2&selected_ids=3
#
# Pass a Proc to the query normalizer which accepts the yielded query.
#
# @example Modifying Array query strings
# class ServiceWrapper
# include HTTParty
#
# query_string_normalizer proc { |query|
# query.map do |key, value|
# value.map {|v| "#{key}=#{v}"}
# end.join('&')
# }
# end
#
2010-12-10 16:47:42 -05:00
# @param [Proc] normalizer custom query string normalizer.
# @yield [Hash, String] query string
# @yieldreturn [Array] an array that will later be joined with '&'
2010-10-29 09:09:47 -04:00
def query_string_normalizer ( normalizer )
default_options [ :query_string_normalizer ] = normalizer
end
2012-11-30 14:08:17 -05:00
# Allows setting of SSL version to use. This only works in Ruby 1.9+.
2012-08-20 09:08:25 -04:00
# You can get a list of valid versions from OpenSSL::SSL::SSLContext::METHODS.
#
# class Foo
# include HTTParty
# ssl_version :SSLv3
# end
def ssl_version ( version )
default_options [ :ssl_version ] = version
end
2012-11-30 14:08:17 -05:00
# Allows setting of SSL ciphers to use. This only works in Ruby 1.9+.
# You can get a list of valid specific ciphers from OpenSSL::Cipher.ciphers.
2013-04-18 08:09:21 -04:00
# You also can specify a cipher suite here, listed here at openssl.org:
2012-11-30 14:08:17 -05:00
# http://www.openssl.org/docs/apps/ciphers.html#CIPHER_SUITE_NAMES
#
# class Foo
# include HTTParty
# ciphers "RC4-SHA"
# end
def ciphers ( cipher_names )
default_options [ :ciphers ] = cipher_names
end
2013-07-11 16:28:57 -04:00
# Allows setting an OpenSSL certificate authority file. The file
# should contain one or more certificates in PEM format.
#
# Setting this option enables certificate verification. All
# certificates along a chain must be available in ssl_ca_file or
# ssl_ca_path for verification to succeed.
#
2010-07-08 22:21:38 -04:00
#
# class Foo
# include HTTParty
# ssl_ca_file '/etc/ssl/certs/ca-certificates.crt'
# end
def ssl_ca_file ( path )
default_options [ :ssl_ca_file ] = path
end
2013-07-11 16:28:57 -04:00
# Allows setting an OpenSSL certificate authority path (directory).
#
# Setting this option enables certificate verification. All
# certificates along a chain must be available in ssl_ca_file or
# ssl_ca_path for verification to succeed.
2010-07-08 22:21:38 -04:00
#
# class Foo
# include HTTParty
# ssl_ca_path '/etc/ssl/certs/'
# end
def ssl_ca_path ( path )
default_options [ :ssl_ca_path ] = path
end
2009-09-08 23:34:21 -04:00
# Allows setting a custom parser for the response.
#
# class Foo
# include HTTParty
# parser Proc.new {|data| ...}
# end
2010-01-27 02:27:11 -05:00
def parser ( custom_parser = nil )
if custom_parser . nil?
2009-12-05 21:00:36 -05:00
default_options [ :parser ]
else
2010-01-27 02:27:11 -05:00
default_options [ :parser ] = custom_parser
2009-12-05 21:00:36 -05:00
validate_format
end
2009-09-08 23:34:21 -04:00
end
2009-11-09 22:09:33 -05:00
2012-08-13 19:36:35 -04:00
# Allows setting a custom connection_adapter for the http connections
2012-08-10 17:01:50 -04:00
#
2012-08-13 19:36:35 -04:00
# @example
# class Foo
# include HTTParty
# connection_adapter Proc.new {|uri, options| ... }
# end
#
# @example provide optional configuration for your connection_adapter
2012-08-10 17:01:50 -04:00
# class Foo
# include HTTParty
2012-08-13 19:36:35 -04:00
# connection_adapter Proc.new {|uri, options| ... }, {:foo => :bar}
2012-08-10 17:01:50 -04:00
# end
#
2012-08-13 19:36:35 -04:00
# @see HTTParty::ConnectionAdapter
def connection_adapter ( custom_adapter = nil , options = nil )
if custom_adapter . nil?
default_options [ :connection_adapter ]
2012-08-10 17:01:50 -04:00
else
2012-08-13 19:36:35 -04:00
default_options [ :connection_adapter ] = custom_adapter
default_options [ :connection_adapter_options ] = options
2012-08-10 17:01:50 -04:00
end
end
2009-01-31 01:14:04 -05:00
# Allows making a get request to a url.
#
# class Foo
# include HTTParty
# end
2009-11-09 22:09:33 -05:00
#
2009-01-31 01:14:04 -05:00
# # Simple get with full url
# Foo.get('http://foo.com/resource.json')
2009-11-09 22:09:33 -05:00
#
2009-01-31 01:14:04 -05:00
# # Simple get with full url and query parameters
# # ie: http://foo.com/resource.json?limit=10
# Foo.get('http://foo.com/resource.json', :query => {:limit => 10})
2012-02-15 14:46:01 -05:00
def get ( path , options = { } , & block )
perform_request Net :: HTTP :: Get , path , options , & block
2008-07-27 14:44:18 -04:00
end
2009-11-09 22:09:33 -05:00
2009-01-31 01:14:04 -05:00
# Allows making a post request to a url.
#
# class Foo
# include HTTParty
# end
2009-11-09 22:09:33 -05:00
#
2009-01-31 01:14:04 -05:00
# # Simple post with full url and setting the body
# Foo.post('http://foo.com/resources', :body => {:bar => 'baz'})
#
2009-11-09 22:09:33 -05:00
# # Simple post with full url using :query option,
2009-01-31 01:14:04 -05:00
# # which gets set as form data on the request.
# Foo.post('http://foo.com/resources', :query => {:bar => 'baz'})
2012-02-15 14:46:01 -05:00
def post ( path , options = { } , & block )
perform_request Net :: HTTP :: Post , path , options , & block
2008-07-27 14:44:18 -04:00
end
2008-07-28 12:40:40 -04:00
2012-04-13 19:22:51 -04:00
# Perform a PATCH request to a path
def patch ( path , options = { } , & block )
perform_request Net :: HTTP :: Patch , path , options , & block
end
2010-01-29 16:57:27 -05:00
# Perform a PUT request to a path
2012-02-15 14:46:01 -05:00
def put ( path , options = { } , & block )
perform_request Net :: HTTP :: Put , path , options , & block
2008-07-27 14:44:18 -04:00
end
2008-07-28 12:40:40 -04:00
2010-01-29 16:57:27 -05:00
# Perform a DELETE request to a path
2012-02-15 14:46:01 -05:00
def delete ( path , options = { } , & block )
perform_request Net :: HTTP :: Delete , path , options , & block
2008-07-27 14:44:18 -04:00
end
2009-11-09 22:09:33 -05:00
2013-01-17 00:01:17 -05:00
# Perform a MOVE request to a path
def move ( path , options = { } , & block )
perform_request Net :: HTTP :: Move , path , options , & block
end
2013-02-07 09:34:32 -05:00
# Perform a COPY request to a path
def copy ( path , options = { } , & block )
perform_request Net :: HTTP :: Copy , path , options , & block
end
2010-01-29 16:57:27 -05:00
# Perform a HEAD request to a path
2012-02-15 14:46:01 -05:00
def head ( path , options = { } , & block )
perform_request Net :: HTTP :: Head , path , options , & block
2009-11-22 23:18:29 -05:00
end
2010-01-29 16:57:27 -05:00
# Perform an OPTIONS request to a path
2012-02-15 14:46:01 -05:00
def options ( path , options = { } , & block )
perform_request Net :: HTTP :: Options , path , options , & block
2009-11-22 23:18:29 -05:00
end
2009-01-31 01:14:04 -05:00
def default_options #:nodoc:
@default_options
end
2008-11-08 13:59:57 -05:00
2008-07-27 11:52:18 -04:00
private
2009-12-05 21:00:36 -05:00
2012-02-15 14:46:01 -05:00
def perform_request ( http_method , path , options , & block ) #:nodoc:
2013-10-22 12:24:26 -04:00
options = default_options . merge ( options )
2009-01-28 23:54:42 -05:00
process_cookies ( options )
2012-02-15 14:46:01 -05:00
Request . new ( http_method , path , options ) . perform ( & block )
2008-07-27 14:44:18 -04:00
end
2009-01-28 23:54:42 -05:00
def process_cookies ( options ) #:nodoc:
2009-09-08 19:02:09 -04:00
return unless options [ :cookies ] || default_cookies . any?
options [ :headers ] || = headers . dup
options [ :headers ] [ " cookie " ] = cookies . merge ( options . delete ( :cookies ) || { } ) . to_cookie_string
2009-01-28 23:54:42 -05:00
end
2009-12-05 21:00:36 -05:00
def validate_format
if format && parser . respond_to? ( :supports_format? ) && ! parser . supports_format? ( format )
raise UnsupportedFormat , " ' #{ format . inspect } ' Must be one of: #{ parser . supported_formats . map { | f | f . to_s } . sort . join ( ', ' ) } "
end
end
2008-07-27 11:52:18 -04:00
end
2008-12-05 16:13:11 -05:00
2008-12-06 23:41:28 -05:00
def self . normalize_base_uri ( url ) #:nodoc:
2009-03-03 11:13:41 -05:00
normalized_url = url . dup
2012-05-04 18:26:55 -04:00
use_ssl = ( normalized_url =~ / ^https / ) || ( normalized_url =~ / :443 \ b / )
2009-03-03 11:13:41 -05:00
ends_with_slash = normalized_url =~ / \/ $ /
2009-11-09 22:09:33 -05:00
2009-03-03 11:13:41 -05:00
normalized_url . chop! if ends_with_slash
normalized_url . gsub! ( / ^https?: \/ \/ /i , '' )
2009-11-09 22:09:33 -05:00
2009-03-03 11:13:41 -05:00
" http #{ 's' if use_ssl } :// #{ normalized_url } "
2008-12-06 23:41:28 -05:00
end
2009-11-09 22:09:33 -05:00
2009-01-30 23:18:27 -05:00
class Basement #:nodoc:
2008-12-05 16:13:11 -05:00
include HTTParty
end
2009-11-09 22:09:33 -05:00
2012-02-15 14:46:01 -05:00
def self . get ( * args , & block )
Basement . get ( * args , & block )
2008-12-05 16:13:11 -05:00
end
2009-11-09 22:09:33 -05:00
2012-02-15 14:46:01 -05:00
def self . post ( * args , & block )
Basement . post ( * args , & block )
2008-12-05 16:13:11 -05:00
end
2012-04-13 19:22:51 -04:00
def self . patch ( * args , & block )
Basement . patch ( * args , & block )
end
2012-02-15 14:46:01 -05:00
def self . put ( * args , & block )
Basement . put ( * args , & block )
2008-12-05 16:13:11 -05:00
end
2012-02-15 14:46:01 -05:00
def self . delete ( * args , & block )
Basement . delete ( * args , & block )
2008-12-05 16:13:11 -05:00
end
2009-11-22 23:18:29 -05:00
2013-01-17 00:01:17 -05:00
def self . move ( * args , & block )
Basement . move ( * args , & block )
end
2013-04-18 08:09:21 -04:00
2013-02-07 09:34:32 -05:00
def self . copy ( * args , & block )
2014-02-07 15:02:23 -05:00
Basement . copy ( * args , & block )
2013-02-07 09:34:32 -05:00
end
2012-02-15 14:46:01 -05:00
def self . head ( * args , & block )
Basement . head ( * args , & block )
2009-11-22 23:18:29 -05:00
end
2012-02-15 14:46:01 -05:00
def self . options ( * args , & block )
Basement . options ( * args , & block )
2009-11-22 23:18:29 -05:00
end
2008-11-08 12:05:59 -05:00
end
2008-12-06 22:01:42 -05:00
2011-04-15 18:29:55 -04:00
require 'httparty/core_extensions'
2011-09-13 12:29:26 -04:00
require 'httparty/hash_conversions'
2011-04-15 18:29:55 -04:00
require 'httparty/exceptions'
require 'httparty/parser'
require 'httparty/request'
require 'httparty/response'