httparty 0.8.0 → 0.9.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.
Potentially problematic release.
This version of httparty might be problematic. Click here for more details.
- data/.gitignore +1 -0
- data/.travis.yml +8 -0
- data/Gemfile +8 -1
- data/Guardfile +16 -0
- data/History +34 -0
- data/README.md +79 -0
- data/bin/httparty +10 -4
- data/cucumber.yml +1 -1
- data/examples/crack.rb +19 -0
- data/examples/headers_and_user_agents.rb +6 -0
- data/examples/nokogiri_html_parser.rb +22 -0
- data/features/steps/remote_service_steps.rb +1 -1
- data/httparty.gemspec +2 -2
- data/lib/httparty.rb +81 -30
- data/lib/httparty/connection_adapter.rb +116 -0
- data/lib/httparty/cookie_hash.rb +2 -2
- data/lib/httparty/core_extensions.rb +23 -0
- data/lib/httparty/hash_conversions.rb +1 -1
- data/lib/httparty/module_inheritable_attributes.rb +11 -1
- data/lib/httparty/net_digest_auth.rb +20 -7
- data/lib/httparty/parser.rb +10 -6
- data/lib/httparty/request.rb +34 -51
- data/lib/httparty/response.rb +17 -40
- data/lib/httparty/response/headers.rb +31 -0
- data/lib/httparty/version.rb +1 -1
- data/spec/httparty/connection_adapter_spec.rb +206 -0
- data/spec/httparty/cookie_hash_spec.rb +3 -4
- data/spec/httparty/net_digest_auth_spec.rb +33 -11
- data/spec/httparty/parser_spec.rb +16 -0
- data/spec/httparty/request_spec.rb +78 -101
- data/spec/httparty/response_spec.rb +41 -20
- data/spec/httparty/ssl_spec.rb +13 -5
- data/spec/httparty_spec.rb +84 -2
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +8 -0
- data/spec/support/ssl_test_helper.rb +28 -6
- data/spec/support/ssl_test_server.rb +19 -8
- data/spec/support/stub_response.rb +13 -0
- metadata +53 -61
- data/README.rdoc +0 -54
    
        data/.gitignore
    CHANGED
    
    
    
        data/.travis.yml
    ADDED
    
    
    
        data/Gemfile
    CHANGED
    
    | @@ -1,8 +1,15 @@ | |
| 1 1 | 
             
            source :rubygems
         | 
| 2 2 | 
             
            gemspec
         | 
| 3 3 |  | 
| 4 | 
            -
            gem 'rake' | 
| 4 | 
            +
            gem 'rake'
         | 
| 5 5 | 
             
            gem 'cucumber', '~> 0.7'
         | 
| 6 6 | 
             
            gem 'fakeweb',  '~> 1.2'
         | 
| 7 7 | 
             
            gem 'rspec',    '~> 1.3'
         | 
| 8 8 | 
             
            gem 'mongrel',  '1.2.0.pre2'
         | 
| 9 | 
            +
            gem 'multi_json', '~> 1.3'
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            group :development do
         | 
| 12 | 
            +
              gem 'guard'
         | 
| 13 | 
            +
              gem 'guard-rspec'
         | 
| 14 | 
            +
              gem 'guard-bundler'
         | 
| 15 | 
            +
            end
         | 
    
        data/Guardfile
    ADDED
    
    | @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            rspec_options = {
         | 
| 2 | 
            +
              :version        => 1,
         | 
| 3 | 
            +
              :all_after_pass => false,
         | 
| 4 | 
            +
              :all_on_start   => false,
         | 
| 5 | 
            +
            }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            guard 'rspec', rspec_options do
         | 
| 8 | 
            +
              watch(%r{^spec/.+_spec\.rb$})
         | 
| 9 | 
            +
              watch(%r{^lib/(.+)\.rb$})     { |m| "spec/#{m[1]}_spec.rb" }
         | 
| 10 | 
            +
              watch('spec/spec_helper.rb')  { "spec" }
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            guard 'bundler' do
         | 
| 14 | 
            +
              watch('Gemfile')
         | 
| 15 | 
            +
              watch(/^.+\.gemspec/)
         | 
| 16 | 
            +
            end
         | 
    
        data/History
    CHANGED
    
    | @@ -1,3 +1,37 @@ | |
| 1 | 
            +
            == 0.9.0 2012-09-07
         | 
| 2 | 
            +
            * new
         | 
| 3 | 
            +
              * [support for connection adapters](https://github.com/jnunemaker/httparty/pull/157)
         | 
| 4 | 
            +
              * [allow ssl_version on ruby 1.9](https://github.com/jnunemaker/httparty/pull/159)
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            * bug fixes
         | 
| 7 | 
            +
              * [don't treat port 4430 as ssl](https://github.com/jnunemaker/httparty/commit/a296b1c97f83d7dcc6ef85720a43664c265685ac)
         | 
| 8 | 
            +
              * [deep clone default options](https://github.com/jnunemaker/httparty/commit/f74227d30f9389b4b23a888c9af49fb9b8248e1f)
         | 
| 9 | 
            +
              * a few net digest auth fixes
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            == 0.8.3 2012-04-21
         | 
| 12 | 
            +
            * new
         | 
| 13 | 
            +
              * [lazy parsing of responses](https://github.com/jnunemaker/httparty/commit/9fd5259c8dab00e426082b66af44ede2c9068f45)
         | 
| 14 | 
            +
              * [add support for PATCH requests](https://github.com/jnunemaker/httparty/commit/7ab6641e37a9e31517e46f6124f38c615395d38a)
         | 
| 15 | 
            +
            * bug fixes
         | 
| 16 | 
            +
              * [subclasses no longer override superclass options](https://github.com/jnunemaker/httparty/commit/682af8fbf672e7b3009e650da776c85cdfe78d39)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            == 0.8.2 2012-04-12
         | 
| 19 | 
            +
            * new
         | 
| 20 | 
            +
              * add -r to make CLI return failure code if status >= 400
         | 
| 21 | 
            +
              * allow blank username from CLI
         | 
| 22 | 
            +
            * bug fixes
         | 
| 23 | 
            +
              * return nil for null body
         | 
| 24 | 
            +
              * automatically deflate responses with a Content-Encoding: x-gzip header
         | 
| 25 | 
            +
              * Do not HEAD on POST request with digest authentication
         | 
| 26 | 
            +
              * add support for proxy authentication
         | 
| 27 | 
            +
              * fix posting data with CLI
         | 
| 28 | 
            +
              * require rexml/document if xml format from CLI
         | 
| 29 | 
            +
              * support for fragmented responses
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            == 0.8.1 2011-10-05
         | 
| 32 | 
            +
            * bug fixes
         | 
| 33 | 
            +
              * content-encoding header should be removed when automatically inflating the body
         | 
| 34 | 
            +
             | 
| 1 35 | 
             
            == 0.8.0 2011-09-13
         | 
| 2 36 | 
             
            * new
         | 
| 3 37 | 
             
              * switch to multi json/xml for parsing by default
         | 
    
        data/README.md
    ADDED
    
    | @@ -0,0 +1,79 @@ | |
| 1 | 
            +
            # httparty
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Makes http fun again!
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ## Install
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            ```
         | 
| 8 | 
            +
            gem install httparty
         | 
| 9 | 
            +
            ```
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            ## Requirements
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            * multi_json and multi_xml
         | 
| 14 | 
            +
            * You like to party!
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ## Examples
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            ```ruby
         | 
| 19 | 
            +
            # Use the class methods to get down to business quickly
         | 
| 20 | 
            +
            response = HTTParty.get('http://twitter.com/statuses/public_timeline.json')
         | 
| 21 | 
            +
            puts response.body, response.code, response.message, response.headers.inspect
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            response.each do |item|
         | 
| 24 | 
            +
              puts item['user']['screen_name']
         | 
| 25 | 
            +
            end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            # Or wrap things up in your own class
         | 
| 28 | 
            +
            class Twitter
         | 
| 29 | 
            +
              include HTTParty
         | 
| 30 | 
            +
              base_uri 'twitter.com'
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              def initialize(u, p)
         | 
| 33 | 
            +
                @auth = {:username => u, :password => p}
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              # which can be :friends, :user or :public
         | 
| 37 | 
            +
              # options[:query] can be things like since, since_id, count, etc.
         | 
| 38 | 
            +
              def timeline(which=:friends, options={})
         | 
| 39 | 
            +
                options.merge!({:basic_auth => @auth})
         | 
| 40 | 
            +
                self.class.get("/statuses/#{which}_timeline.json", options)
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              def post(text)
         | 
| 44 | 
            +
                options = { :body => {:status => text}, :basic_auth => @auth }
         | 
| 45 | 
            +
                self.class.post('/statuses/update.json', options)
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            twitter = Twitter.new(config['email'], config['password'])
         | 
| 50 | 
            +
            pp twitter.timeline
         | 
| 51 | 
            +
            ```
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            See the [examples directory](http://github.com/jnunemaker/httparty/tree/master/examples) for even more goodies.
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            ## Command Line Interface
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            httparty also includes the executable `httparty` which can be
         | 
| 58 | 
            +
            used to query web services and examine the resulting output. By default
         | 
| 59 | 
            +
            it will output the response as a pretty-printed Ruby object (useful for
         | 
| 60 | 
            +
            grokking the structure of output). This can also be overridden to output
         | 
| 61 | 
            +
            formatted XML or JSON. Execute `httparty --help` for all the
         | 
| 62 | 
            +
            options. Below is an example of how easy it is.
         | 
| 63 | 
            +
             | 
| 64 | 
            +
            ```
         | 
| 65 | 
            +
            httparty "http://twitter.com/statuses/public_timeline.json"
         | 
| 66 | 
            +
            ```
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            ## Help and Docs
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            * https://groups.google.com/forum/#!forum/httparty-gem
         | 
| 71 | 
            +
            * http://rdoc.info/projects/jnunemaker/httparty
         | 
| 72 | 
            +
             | 
| 73 | 
            +
            ## Contributing
         | 
| 74 | 
            +
             | 
| 75 | 
            +
            * Fork the project.
         | 
| 76 | 
            +
            * Make your feature addition or bug fix.
         | 
| 77 | 
            +
            * Add tests for it. This is important so I don't break it in a future version unintentionally.
         | 
| 78 | 
            +
            * Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself in another branch so I can ignore when I pull)
         | 
| 79 | 
            +
            * Send me a pull request. Bonus points for topic branches.
         | 
    
        data/bin/httparty
    CHANGED
    
    | @@ -32,13 +32,13 @@ OptionParser.new do |o| | |
| 32 32 | 
             
                   "--data [BODY]",
         | 
| 33 33 | 
             
                   "Data to put in request body (prefix with '@' for file)") do |d|
         | 
| 34 34 | 
             
                if d =~ /^@/
         | 
| 35 | 
            -
                  opts[: | 
| 35 | 
            +
                  opts[:body] = open(d[1..-1]).read
         | 
| 36 36 | 
             
                else
         | 
| 37 | 
            -
                  opts[: | 
| 37 | 
            +
                  opts[:body] = d
         | 
| 38 38 | 
             
                end
         | 
| 39 39 | 
             
              end
         | 
| 40 40 |  | 
| 41 | 
            -
              o.on("-H", "--header [NAME | 
| 41 | 
            +
              o.on("-H", "--header [NAME:VALUE]", "Additional HTTP headers in NAME:VALUE form") do |h|
         | 
| 42 42 | 
             
                abort "Invalid header specification, should be Name:Value" unless h =~ /.+:.+/
         | 
| 43 43 | 
             
                name, value = h.split(':')
         | 
| 44 44 | 
             
                opts[:headers][name.strip] = value.strip
         | 
| @@ -49,11 +49,15 @@ OptionParser.new do |o| | |
| 49 49 | 
             
              end
         | 
| 50 50 |  | 
| 51 51 | 
             
              o.on("-u", "--user [CREDS]", "Use basic authentication. Value should be user:password") do |u|
         | 
| 52 | 
            -
                abort "Invalid credentials format. Must be user:password" unless u =~  | 
| 52 | 
            +
                abort "Invalid credentials format. Must be user:password" unless u =~ /.*:.+/
         | 
| 53 53 | 
             
                user, password = u.split(':')
         | 
| 54 54 | 
             
                opts[:basic_auth] = { :username => user, :password => password }
         | 
| 55 55 | 
             
              end
         | 
| 56 56 |  | 
| 57 | 
            +
              o.on("-r", "--response-code", "Command fails if response code >= 400") do
         | 
| 58 | 
            +
                opts[:response_code] = true
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 57 61 | 
             
              o.on("-h", "--help", "Show help documentation") do |h|
         | 
| 58 62 | 
             
                puts o
         | 
| 59 63 | 
             
                exit
         | 
| @@ -100,9 +104,11 @@ else | |
| 100 104 | 
             
                    puts YAML.dump(response.delegate)
         | 
| 101 105 | 
             
                  end
         | 
| 102 106 | 
             
                when :xml
         | 
| 107 | 
            +
                  require 'rexml/document'
         | 
| 103 108 | 
             
                  REXML::Document.new(response.body).write(STDOUT, 2)
         | 
| 104 109 | 
             
                  puts
         | 
| 105 110 | 
             
                else
         | 
| 106 111 | 
             
                  puts response
         | 
| 107 112 | 
             
              end
         | 
| 108 113 | 
             
            end
         | 
| 114 | 
            +
            exit false if opts[:response_code] && response.code >= 400
         | 
    
        data/cucumber.yml
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            default: features
         | 
| 1 | 
            +
            default: features --format progress
         | 
    
        data/examples/crack.rb
    ADDED
    
    | @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            require 'crack'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
         | 
| 5 | 
            +
            require File.join(dir, 'httparty')
         | 
| 6 | 
            +
            require 'pp'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            class Rep
         | 
| 9 | 
            +
              include HTTParty
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              parser(
         | 
| 12 | 
            +
                Proc.new do |body, format|
         | 
| 13 | 
            +
                  Crack::XML.parse(body)
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              )
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            pp Rep.get('http://whoismyrepresentative.com/whoismyrep.php?zip=46544')
         | 
| 19 | 
            +
            pp Rep.get('http://whoismyrepresentative.com/whoismyrep.php', :query => {:zip => 46544})
         | 
| @@ -0,0 +1,6 @@ | |
| 1 | 
            +
            # To send custom user agents to identify your application to a web service (or mask as a specific browser for testing), send "User-Agent" as a hash to headers as shown below.
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'httparty'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            APPLICATION_NAME = "Httparty" 
         | 
| 6 | 
            +
            response = HTTParty.get('http://example.com', :headers => {"User-Agent" => APPLICATION_NAME})
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            require 'nokogiri'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
             | 
| 5 | 
            +
            dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
         | 
| 6 | 
            +
            require File.join(dir, 'httparty')
         | 
| 7 | 
            +
            require 'pp'
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            class HtmlParserIncluded < HTTParty::Parser
         | 
| 10 | 
            +
              SupportedFormats.merge!('text/html' => :html)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              def html
         | 
| 13 | 
            +
                Nokogiri::HTML(body)
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            class Page
         | 
| 18 | 
            +
              include HTTParty
         | 
| 19 | 
            +
              parser HtmlParserIncluded
         | 
| 20 | 
            +
            end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            pp Page.get('http://www.google.com')
         | 
| @@ -14,7 +14,7 @@ end | |
| 14 14 |  | 
| 15 15 | 
             
            Given /^that service takes (\d+) seconds to generate a response$/ do |time|
         | 
| 16 16 | 
             
              @server_response_time = time.to_i
         | 
| 17 | 
            -
              @handler.preprocessor =  | 
| 17 | 
            +
              @handler.preprocessor = Proc.new { sleep time.to_i }
         | 
| 18 18 | 
             
            end
         | 
| 19 19 |  | 
| 20 20 | 
             
            Given /^a remote deflate service$/ do
         | 
    
        data/httparty.gemspec
    CHANGED
    
    | @@ -8,11 +8,11 @@ Gem::Specification.new do |s| | |
| 8 8 | 
             
              s.platform    = Gem::Platform::RUBY
         | 
| 9 9 | 
             
              s.authors     = ["John Nunemaker", "Sandro Turriate"]
         | 
| 10 10 | 
             
              s.email       = ["nunemaker@gmail.com"]
         | 
| 11 | 
            -
              s.homepage    = "http:// | 
| 11 | 
            +
              s.homepage    = "http://jnunemaker.github.com/httparty"
         | 
| 12 12 | 
             
              s.summary     = %q{Makes http fun! Also, makes consuming restful web services dead easy.}
         | 
| 13 13 | 
             
              s.description = %q{Makes http fun! Also, makes consuming restful web services dead easy.}
         | 
| 14 14 |  | 
| 15 | 
            -
              s.add_dependency 'multi_json'
         | 
| 15 | 
            +
              s.add_dependency 'multi_json', "~> 1.0"
         | 
| 16 16 | 
             
              s.add_dependency 'multi_xml'
         | 
| 17 17 |  | 
| 18 18 | 
             
              s.post_install_message = "When you HTTParty, you must party hard!"
         | 
    
        data/lib/httparty.rb
    CHANGED
    
    | @@ -10,6 +10,7 @@ require 'httparty/module_inheritable_attributes' | |
| 10 10 | 
             
            require 'httparty/cookie_hash'
         | 
| 11 11 | 
             
            require 'httparty/net_digest_auth'
         | 
| 12 12 | 
             
            require 'httparty/version'
         | 
| 13 | 
            +
            require 'httparty/connection_adapter'
         | 
| 13 14 |  | 
| 14 15 | 
             
            # @see HTTParty::ClassMethods
         | 
| 15 16 | 
             
            module HTTParty
         | 
| @@ -36,11 +37,13 @@ module HTTParty | |
| 36 37 | 
             
              end
         | 
| 37 38 |  | 
| 38 39 | 
             
              # == Common Request Options
         | 
| 39 | 
            -
              # Request methods (get, post, put, delete, head, options) all take a common set of options. These are:
         | 
| 40 | 
            +
              # Request methods (get, post, patch, put, delete, head, options) all take a common set of options. These are:
         | 
| 40 41 | 
             
              #
         | 
| 41 42 | 
             
              # [:+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.
         | 
| 42 43 | 
             
              # [:+http_proxyaddr+:] Address of proxy server to use.
         | 
| 43 44 | 
             
              # [:+http_proxyport+:]  Port of proxy server to use.
         | 
| 45 | 
            +
              # [:+http_proxyuser+:] User for proxy server authentication.
         | 
| 46 | 
            +
              # [:+http_proxypass+:] Password for proxy server authentication.
         | 
| 44 47 | 
             
              # [:+limit+:] Maximum number of redirects to follow. Takes precedences over :+no_follow+.
         | 
| 45 48 | 
             
              # [:+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.
         | 
| 46 49 | 
             
              # [:+timeout+:] Timeout for opening connection and reading data.
         | 
| @@ -55,9 +58,11 @@ module HTTParty | |
| 55 58 | 
             
              # * :+maintain_method_across_redirects+: see HTTParty::ClassMethods.maintain_method_across_redirects.
         | 
| 56 59 | 
             
              # * :+no_follow+: see HTTParty::ClassMethods.no_follow.
         | 
| 57 60 | 
             
              # * :+parser+: see HTTParty::ClassMethods.parser.
         | 
| 61 | 
            +
              # * :+connection_adapter+: see HTTParty::ClassMethods.connection_adapter.
         | 
| 58 62 | 
             
              # * :+pem+: see HTTParty::ClassMethods.pem.
         | 
| 59 63 | 
             
              # * :+query_string_normalizer+: see HTTParty::ClassMethods.query_string_normalizer
         | 
| 60 64 | 
             
              # * :+ssl_ca_file+: see HTTParty::ClassMethods.ssl_ca_file.
         | 
| 65 | 
            +
              # * :+ssl_ca_path+: see HTTParty::ClassMethods.ssl_ca_path.
         | 
| 61 66 |  | 
| 62 67 | 
             
              module ClassMethods
         | 
| 63 68 |  | 
| @@ -67,11 +72,13 @@ module HTTParty | |
| 67 72 | 
             
                #
         | 
| 68 73 | 
             
                #   class Foo
         | 
| 69 74 | 
             
                #     include HTTParty
         | 
| 70 | 
            -
                #     http_proxy 'http://foo.com', 80
         | 
| 75 | 
            +
                #     http_proxy 'http://foo.com', 80, 'user', 'pass'
         | 
| 71 76 | 
             
                #   end
         | 
| 72 | 
            -
                def http_proxy(addr=nil, port = nil)
         | 
| 77 | 
            +
                def http_proxy(addr=nil, port=nil, user=nil, pass=nil)
         | 
| 73 78 | 
             
                  default_options[:http_proxyaddr] = addr
         | 
| 74 79 | 
             
                  default_options[:http_proxyport] = port
         | 
| 80 | 
            +
                  default_options[:http_proxyuser] = user
         | 
| 81 | 
            +
                  default_options[:http_proxypass] = pass
         | 
| 75 82 | 
             
                end
         | 
| 76 83 |  | 
| 77 84 | 
             
                # Allows setting a base uri to be used for each request.
         | 
| @@ -292,6 +299,17 @@ module HTTParty | |
| 292 299 | 
             
                  default_options[:query_string_normalizer] = normalizer
         | 
| 293 300 | 
             
                end
         | 
| 294 301 |  | 
| 302 | 
            +
                # Allows setting of SSL version to use. This only works in Ruby 1.9.
         | 
| 303 | 
            +
                # You can get a list of valid versions from OpenSSL::SSL::SSLContext::METHODS.
         | 
| 304 | 
            +
                #
         | 
| 305 | 
            +
                #   class Foo
         | 
| 306 | 
            +
                #     include HTTParty
         | 
| 307 | 
            +
                #     ssl_version :SSLv3
         | 
| 308 | 
            +
                #   end
         | 
| 309 | 
            +
                def ssl_version(version)
         | 
| 310 | 
            +
                  default_options[:ssl_version] = version
         | 
| 311 | 
            +
                end
         | 
| 312 | 
            +
             | 
| 295 313 | 
             
                # Allows setting an OpenSSL certificate authority file
         | 
| 296 314 | 
             
                #
         | 
| 297 315 | 
             
                #   class Foo
         | 
| @@ -327,6 +345,30 @@ module HTTParty | |
| 327 345 | 
             
                  end
         | 
| 328 346 | 
             
                end
         | 
| 329 347 |  | 
| 348 | 
            +
                # Allows setting a custom connection_adapter for the http connections
         | 
| 349 | 
            +
                #
         | 
| 350 | 
            +
                # @example
         | 
| 351 | 
            +
                #   class Foo
         | 
| 352 | 
            +
                #     include HTTParty
         | 
| 353 | 
            +
                #     connection_adapter Proc.new {|uri, options| ... }
         | 
| 354 | 
            +
                #   end
         | 
| 355 | 
            +
                #
         | 
| 356 | 
            +
                # @example provide optional configuration for your connection_adapter
         | 
| 357 | 
            +
                #   class Foo
         | 
| 358 | 
            +
                #     include HTTParty
         | 
| 359 | 
            +
                #     connection_adapter Proc.new {|uri, options| ... }, {:foo => :bar}
         | 
| 360 | 
            +
                #   end
         | 
| 361 | 
            +
                #
         | 
| 362 | 
            +
                # @see HTTParty::ConnectionAdapter
         | 
| 363 | 
            +
                def connection_adapter(custom_adapter = nil, options = nil)
         | 
| 364 | 
            +
                  if custom_adapter.nil?
         | 
| 365 | 
            +
                    default_options[:connection_adapter]
         | 
| 366 | 
            +
                  else
         | 
| 367 | 
            +
                    default_options[:connection_adapter] = custom_adapter
         | 
| 368 | 
            +
                    default_options[:connection_adapter_options] = options
         | 
| 369 | 
            +
                  end
         | 
| 370 | 
            +
                end
         | 
| 371 | 
            +
             | 
| 330 372 | 
             
                # Allows making a get request to a url.
         | 
| 331 373 | 
             
                #
         | 
| 332 374 | 
             
                #   class Foo
         | 
| @@ -339,8 +381,8 @@ module HTTParty | |
| 339 381 | 
             
                #   # Simple get with full url and query parameters
         | 
| 340 382 | 
             
                #   # ie: http://foo.com/resource.json?limit=10
         | 
| 341 383 | 
             
                #   Foo.get('http://foo.com/resource.json', :query => {:limit => 10})
         | 
| 342 | 
            -
                def get(path, options={})
         | 
| 343 | 
            -
                  perform_request Net::HTTP::Get, path, options
         | 
| 384 | 
            +
                def get(path, options={}, &block)
         | 
| 385 | 
            +
                  perform_request Net::HTTP::Get, path, options, &block
         | 
| 344 386 | 
             
                end
         | 
| 345 387 |  | 
| 346 388 | 
             
                # Allows making a post request to a url.
         | 
| @@ -355,28 +397,33 @@ module HTTParty | |
| 355 397 | 
             
                #   # Simple post with full url using :query option,
         | 
| 356 398 | 
             
                #   # which gets set as form data on the request.
         | 
| 357 399 | 
             
                #   Foo.post('http://foo.com/resources', :query => {:bar => 'baz'})
         | 
| 358 | 
            -
                def post(path, options={})
         | 
| 359 | 
            -
                  perform_request Net::HTTP::Post, path, options
         | 
| 400 | 
            +
                def post(path, options={}, &block)
         | 
| 401 | 
            +
                  perform_request Net::HTTP::Post, path, options, &block
         | 
| 402 | 
            +
                end
         | 
| 403 | 
            +
             | 
| 404 | 
            +
                # Perform a PATCH request to a path
         | 
| 405 | 
            +
                def patch(path, options={}, &block)
         | 
| 406 | 
            +
                  perform_request Net::HTTP::Patch, path, options, &block
         | 
| 360 407 | 
             
                end
         | 
| 361 408 |  | 
| 362 409 | 
             
                # Perform a PUT request to a path
         | 
| 363 | 
            -
                def put(path, options={})
         | 
| 364 | 
            -
                  perform_request Net::HTTP::Put, path, options
         | 
| 410 | 
            +
                def put(path, options={}, &block)
         | 
| 411 | 
            +
                  perform_request Net::HTTP::Put, path, options, &block
         | 
| 365 412 | 
             
                end
         | 
| 366 413 |  | 
| 367 414 | 
             
                # Perform a DELETE request to a path
         | 
| 368 | 
            -
                def delete(path, options={})
         | 
| 369 | 
            -
                  perform_request Net::HTTP::Delete, path, options
         | 
| 415 | 
            +
                def delete(path, options={}, &block)
         | 
| 416 | 
            +
                  perform_request Net::HTTP::Delete, path, options, &block
         | 
| 370 417 | 
             
                end
         | 
| 371 418 |  | 
| 372 419 | 
             
                # Perform a HEAD request to a path
         | 
| 373 | 
            -
                def head(path, options={})
         | 
| 374 | 
            -
                  perform_request Net::HTTP::Head, path, options
         | 
| 420 | 
            +
                def head(path, options={}, &block)
         | 
| 421 | 
            +
                  perform_request Net::HTTP::Head, path, options, &block
         | 
| 375 422 | 
             
                end
         | 
| 376 423 |  | 
| 377 424 | 
             
                # Perform an OPTIONS request to a path
         | 
| 378 | 
            -
                def options(path, options={})
         | 
| 379 | 
            -
                  perform_request Net::HTTP::Options, path, options
         | 
| 425 | 
            +
                def options(path, options={}, &block)
         | 
| 426 | 
            +
                  perform_request Net::HTTP::Options, path, options, &block
         | 
| 380 427 | 
             
                end
         | 
| 381 428 |  | 
| 382 429 | 
             
                def default_options #:nodoc:
         | 
| @@ -385,10 +432,10 @@ module HTTParty | |
| 385 432 |  | 
| 386 433 | 
             
                private
         | 
| 387 434 |  | 
| 388 | 
            -
                  def perform_request(http_method, path, options) #:nodoc:
         | 
| 435 | 
            +
                  def perform_request(http_method, path, options, &block) #:nodoc:
         | 
| 389 436 | 
             
                    options = default_options.dup.merge(options)
         | 
| 390 437 | 
             
                    process_cookies(options)
         | 
| 391 | 
            -
                    Request.new(http_method, path, options).perform
         | 
| 438 | 
            +
                    Request.new(http_method, path, options).perform(&block)
         | 
| 392 439 | 
             
                  end
         | 
| 393 440 |  | 
| 394 441 | 
             
                  def process_cookies(options) #:nodoc:
         | 
| @@ -406,7 +453,7 @@ module HTTParty | |
| 406 453 |  | 
| 407 454 | 
             
              def self.normalize_base_uri(url) #:nodoc:
         | 
| 408 455 | 
             
                normalized_url = url.dup
         | 
| 409 | 
            -
                use_ssl = (normalized_url =~ /^https/) || normalized_url | 
| 456 | 
            +
                use_ssl = (normalized_url =~ /^https/) || (normalized_url =~ /:443\b/)
         | 
| 410 457 | 
             
                ends_with_slash = normalized_url =~ /\/$/
         | 
| 411 458 |  | 
| 412 459 | 
             
                normalized_url.chop! if ends_with_slash
         | 
| @@ -419,28 +466,32 @@ module HTTParty | |
| 419 466 | 
             
                include HTTParty
         | 
| 420 467 | 
             
              end
         | 
| 421 468 |  | 
| 422 | 
            -
              def self.get(*args)
         | 
| 423 | 
            -
                Basement.get(*args)
         | 
| 469 | 
            +
              def self.get(*args, &block)
         | 
| 470 | 
            +
                Basement.get(*args, &block)
         | 
| 471 | 
            +
              end
         | 
| 472 | 
            +
             | 
| 473 | 
            +
              def self.post(*args, &block)
         | 
| 474 | 
            +
                Basement.post(*args, &block)
         | 
| 424 475 | 
             
              end
         | 
| 425 476 |  | 
| 426 | 
            -
              def self. | 
| 427 | 
            -
                Basement. | 
| 477 | 
            +
              def self.patch(*args, &block)
         | 
| 478 | 
            +
                Basement.patch(*args, &block)
         | 
| 428 479 | 
             
              end
         | 
| 429 480 |  | 
| 430 | 
            -
              def self.put(*args)
         | 
| 431 | 
            -
                Basement.put(*args)
         | 
| 481 | 
            +
              def self.put(*args, &block)
         | 
| 482 | 
            +
                Basement.put(*args, &block)
         | 
| 432 483 | 
             
              end
         | 
| 433 484 |  | 
| 434 | 
            -
              def self.delete(*args)
         | 
| 435 | 
            -
                Basement.delete(*args)
         | 
| 485 | 
            +
              def self.delete(*args, &block)
         | 
| 486 | 
            +
                Basement.delete(*args, &block)
         | 
| 436 487 | 
             
              end
         | 
| 437 488 |  | 
| 438 | 
            -
              def self.head(*args)
         | 
| 439 | 
            -
                Basement.head(*args)
         | 
| 489 | 
            +
              def self.head(*args, &block)
         | 
| 490 | 
            +
                Basement.head(*args, &block)
         | 
| 440 491 | 
             
              end
         | 
| 441 492 |  | 
| 442 | 
            -
              def self.options(*args)
         | 
| 443 | 
            -
                Basement.options(*args)
         | 
| 493 | 
            +
              def self.options(*args, &block)
         | 
| 494 | 
            +
                Basement.options(*args, &block)
         | 
| 444 495 | 
             
              end
         | 
| 445 496 | 
             
            end
         | 
| 446 497 |  |