aitch 0.1.0 → 0.1.1
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.
- checksums.yaml +7 -0
- data/README.md +14 -2
- data/lib/aitch.rb +18 -26
- data/lib/aitch/configuration.rb +0 -8
- data/lib/aitch/namespace.rb +48 -0
- data/lib/aitch/redirect.rb +4 -3
- data/lib/aitch/request.rb +29 -21
- data/lib/aitch/response.rb +4 -3
- data/lib/aitch/version.rb +1 -1
- data/spec/aitch/aitch_spec.rb +16 -5
- data/spec/aitch/namespace_spec.rb +11 -0
- data/spec/aitch/request_spec.rb +31 -21
- metadata +24 -37
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: c38a1b4c89a137aad0faec66bd2c53f00d59871c
         | 
| 4 | 
            +
              data.tar.gz: 6d6054265f125130692693f502f43e856830a7e8
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 233cb27de492f6e8f03cceaf0f8d5ddf65aaffdaee7aaf963db1865aecbed347024360727ec5e72e3064bd046b53bc196e7f50cdce435a5cc6ae8bd38d3ca62b
         | 
| 7 | 
            +
              data.tar.gz: 9c02590e9d20323273e4584ae86f0ac0694ef316a2e35be6e2c7516402afb78991110f9aa228cbd2a35207c3c8dd510df57da2e4d6720906b55286401a7a2e26
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,9 +1,7 @@ | |
| 1 1 | 
             
            # Aitch
         | 
| 2 2 |  | 
| 3 3 | 
             
            [](https://travis-ci.org/fnando/aitch)
         | 
| 4 | 
            -
             | 
| 5 4 | 
             
            [](https://codeclimate.com/github/fnando/aitch/)
         | 
| 6 | 
            -
             | 
| 7 5 | 
             
            [](https://rubygems.org/gems/aitch)
         | 
| 8 6 |  | 
| 9 7 | 
             
            A simple HTTP client.
         | 
| @@ -132,6 +130,20 @@ Aitch.get("http://restrict.example.org/", {}, {}, user: "john", password: "test" | |
| 132 130 | 
             
            Aitch.get("http://example.org", {}, {"User-Agent" => "MyBot/1.0.0"})
         | 
| 133 131 | 
             
            ```
         | 
| 134 132 |  | 
| 133 | 
            +
            ### Creating namespaced requests
         | 
| 134 | 
            +
             | 
| 135 | 
            +
            Sometimes you don't want to use the global settings (maybe you're building a
         | 
| 136 | 
            +
            lib). In this case, you can instantiate the namespace.
         | 
| 137 | 
            +
             | 
| 138 | 
            +
            ```ruby
         | 
| 139 | 
            +
            Request = Aitch::Namespace.new
         | 
| 140 | 
            +
            Request.configure do |config|
         | 
| 141 | 
            +
              config.user_agent = "MyLib/1.0.0"
         | 
| 142 | 
            +
            end
         | 
| 143 | 
            +
             | 
| 144 | 
            +
            Request.get("http://example.org")
         | 
| 145 | 
            +
            ```
         | 
| 146 | 
            +
             | 
| 135 147 | 
             
            ## Contributing
         | 
| 136 148 |  | 
| 137 149 | 
             
            1. Fork it
         | 
    
        data/lib/aitch.rb
    CHANGED
    
    | @@ -3,6 +3,7 @@ require "forwardable" | |
| 3 3 | 
             
            require "json"
         | 
| 4 4 | 
             
            require "zlib"
         | 
| 5 5 |  | 
| 6 | 
            +
            require "aitch/namespace"
         | 
| 6 7 | 
             
            require "aitch/configuration"
         | 
| 7 8 | 
             
            require "aitch/errors"
         | 
| 8 9 | 
             
            require "aitch/request"
         | 
| @@ -14,34 +15,25 @@ require "aitch/xml_parser" | |
| 14 15 | 
             
            require "aitch/version"
         | 
| 15 16 |  | 
| 16 17 | 
             
            module Aitch
         | 
| 17 | 
            -
               | 
| 18 | 
            +
              class << self
         | 
| 19 | 
            +
                extend Forwardable
         | 
| 18 20 |  | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            +
                def_delegators :namespace,
         | 
| 22 | 
            +
                  :configuration, :config,
         | 
| 23 | 
            +
                  :get, :get!,
         | 
| 24 | 
            +
                  :post, :post!,
         | 
| 25 | 
            +
                  :put, :put!,
         | 
| 26 | 
            +
                  :patch, :patch!,
         | 
| 27 | 
            +
                  :options, :options!,
         | 
| 28 | 
            +
                  :trace, :trace!,
         | 
| 29 | 
            +
                  :head, :head!,
         | 
| 30 | 
            +
                  :delete, :delete!,
         | 
| 31 | 
            +
                  :execute, :execute!,
         | 
| 32 | 
            +
                  :configure
         | 
| 21 33 | 
             
              end
         | 
| 22 34 |  | 
| 23 | 
            -
               | 
| 24 | 
            -
             | 
| 25 | 
            -
                 | 
| 26 | 
            -
                response
         | 
| 27 | 
            -
              end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
              %w[
         | 
| 30 | 
            -
                get
         | 
| 31 | 
            -
                post
         | 
| 32 | 
            -
                put
         | 
| 33 | 
            -
                patch
         | 
| 34 | 
            -
                delete
         | 
| 35 | 
            -
                options
         | 
| 36 | 
            -
                trace
         | 
| 37 | 
            -
                head
         | 
| 38 | 
            -
              ].each do |method_name|
         | 
| 39 | 
            -
                define_method(method_name) do |url, args = {}, headers = {}, options = {}|
         | 
| 40 | 
            -
                  execute(method_name, url, args, headers, options)
         | 
| 41 | 
            -
                end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                define_method("#{method_name}!") do |url, args = {}, headers = {}, options = {}|
         | 
| 44 | 
            -
                  execute!(method_name, url, args, headers, options)
         | 
| 45 | 
            -
                end
         | 
| 35 | 
            +
              private
         | 
| 36 | 
            +
              def self.namespace
         | 
| 37 | 
            +
                @namespace ||= Namespace.new
         | 
| 46 38 | 
             
              end
         | 
| 47 39 | 
             
            end
         | 
    
        data/lib/aitch/configuration.rb
    CHANGED
    
    
| @@ -0,0 +1,48 @@ | |
| 1 | 
            +
            module Aitch
         | 
| 2 | 
            +
              class Namespace
         | 
| 3 | 
            +
                def configure(&block)
         | 
| 4 | 
            +
                  yield config
         | 
| 5 | 
            +
                end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def config
         | 
| 8 | 
            +
                  @config ||= Configuration.new
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
                alias_method :configuration, :config
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def execute(request_method, url, data = {}, headers = {}, options = {})
         | 
| 13 | 
            +
                  Request.new({
         | 
| 14 | 
            +
                    config: config,
         | 
| 15 | 
            +
                    request_method: request_method,
         | 
| 16 | 
            +
                    url: url,
         | 
| 17 | 
            +
                    data: data,
         | 
| 18 | 
            +
                    headers: headers,
         | 
| 19 | 
            +
                    options: options
         | 
| 20 | 
            +
                  }).perform
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def execute!(*args)
         | 
| 24 | 
            +
                  response = execute(*args)
         | 
| 25 | 
            +
                  raise response.error if response.error?
         | 
| 26 | 
            +
                  response
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                %w[
         | 
| 30 | 
            +
                  get
         | 
| 31 | 
            +
                  post
         | 
| 32 | 
            +
                  put
         | 
| 33 | 
            +
                  patch
         | 
| 34 | 
            +
                  delete
         | 
| 35 | 
            +
                  options
         | 
| 36 | 
            +
                  trace
         | 
| 37 | 
            +
                  head
         | 
| 38 | 
            +
                ].each do |method_name|
         | 
| 39 | 
            +
                  define_method(method_name) do |url, data = {}, headers = {}, options = {}|
         | 
| 40 | 
            +
                    execute(method_name, url, data, headers, options)
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  define_method("#{method_name}!") do |url, data = {}, headers = {}, options = {}|
         | 
| 44 | 
            +
                    execute!(method_name, url, data, headers, options)
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
            end
         | 
    
        data/lib/aitch/redirect.rb
    CHANGED
    
    | @@ -1,8 +1,9 @@ | |
| 1 1 | 
             
            module Aitch
         | 
| 2 2 | 
             
              class Redirect
         | 
| 3 | 
            -
                def initialize
         | 
| 3 | 
            +
                def initialize(config)
         | 
| 4 4 | 
             
                  @tries = 1
         | 
| 5 | 
            -
                  @ | 
| 5 | 
            +
                  @config = config
         | 
| 6 | 
            +
                  @max_tries = @config.redirect_limit
         | 
| 6 7 | 
             
                end
         | 
| 7 8 |  | 
| 8 9 | 
             
                def followed!
         | 
| @@ -14,7 +15,7 @@ module Aitch | |
| 14 15 | 
             
                end
         | 
| 15 16 |  | 
| 16 17 | 
             
                def enabled?
         | 
| 17 | 
            -
                   | 
| 18 | 
            +
                  @config.follow_redirect
         | 
| 18 19 | 
             
                end
         | 
| 19 20 | 
             
              end
         | 
| 20 21 | 
             
            end
         | 
    
        data/lib/aitch/request.rb
    CHANGED
    
    | @@ -1,16 +1,24 @@ | |
| 1 1 | 
             
            module Aitch
         | 
| 2 2 | 
             
              class Request
         | 
| 3 | 
            -
                 | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 3 | 
            +
                attr_accessor :config
         | 
| 4 | 
            +
                attr_accessor :request_method
         | 
| 5 | 
            +
                attr_accessor :url
         | 
| 6 | 
            +
                attr_accessor :data
         | 
| 7 | 
            +
                attr_accessor :headers
         | 
| 8 | 
            +
                attr_accessor :options
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def initialize(options)
         | 
| 11 | 
            +
                  options.each do |name, value|
         | 
| 12 | 
            +
                    public_send("#{name}=", value)
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  self.headers ||= {}
         | 
| 16 | 
            +
                  self.options ||= {}
         | 
| 9 17 | 
             
                end
         | 
| 10 18 |  | 
| 11 19 | 
             
                def perform
         | 
| 12 | 
            -
                  response = Response.new(client.request(request))
         | 
| 13 | 
            -
                  redirect = Redirect.new
         | 
| 20 | 
            +
                  response = Response.new(config, client.request(request))
         | 
| 21 | 
            +
                  redirect = Redirect.new(config)
         | 
| 14 22 |  | 
| 15 23 | 
             
                  while redirect.follow?(response)
         | 
| 16 24 | 
             
                    redirect.followed!
         | 
| @@ -43,37 +51,37 @@ module Aitch | |
| 43 51 | 
             
                end
         | 
| 44 52 |  | 
| 45 53 | 
             
                def uri
         | 
| 46 | 
            -
                  @uri ||= URI.parse( | 
| 54 | 
            +
                  @uri ||= URI.parse(url)
         | 
| 47 55 | 
             
                rescue URI::InvalidURIError
         | 
| 48 56 | 
             
                  raise InvalidURIError
         | 
| 49 57 | 
             
                end
         | 
| 50 58 |  | 
| 51 59 | 
             
                def http_method_class
         | 
| 52 | 
            -
                  Net::HTTP.const_get( | 
| 60 | 
            +
                  Net::HTTP.const_get(request_method.to_s.capitalize)
         | 
| 53 61 | 
             
                rescue NameError
         | 
| 54 | 
            -
                  raise InvalidHTTPMethodError, "unexpected HTTP verb: #{ | 
| 62 | 
            +
                  raise InvalidHTTPMethodError, "unexpected HTTP verb: #{request_method.inspect}"
         | 
| 55 63 | 
             
                end
         | 
| 56 64 |  | 
| 57 65 | 
             
                private
         | 
| 58 66 | 
             
                def set_body(request)
         | 
| 59 | 
            -
                  if  | 
| 60 | 
            -
                    request.form_data =  | 
| 61 | 
            -
                  elsif  | 
| 62 | 
            -
                    request.form_data =  | 
| 67 | 
            +
                  if data.respond_to?(:to_h)
         | 
| 68 | 
            +
                    request.form_data = data.to_h
         | 
| 69 | 
            +
                  elsif data.kind_of?(Hash)
         | 
| 70 | 
            +
                    request.form_data = data
         | 
| 63 71 | 
             
                  else
         | 
| 64 | 
            -
                    request.body =  | 
| 72 | 
            +
                    request.body = data.to_s
         | 
| 65 73 | 
             
                  end
         | 
| 66 74 | 
             
                end
         | 
| 67 75 |  | 
| 68 76 | 
             
                def set_headers(request)
         | 
| 69 | 
            -
                  all_headers =  | 
| 77 | 
            +
                  all_headers = config.default_headers.merge(headers)
         | 
| 70 78 | 
             
                  all_headers.each do |name, value|
         | 
| 71 79 | 
             
                    request[name.to_s] = value.to_s
         | 
| 72 80 | 
             
                  end
         | 
| 73 81 | 
             
                end
         | 
| 74 82 |  | 
| 75 83 | 
             
                def set_credentials(request)
         | 
| 76 | 
            -
                  request.basic_auth( | 
| 84 | 
            +
                  request.basic_auth(options[:user], options[:password]) if options[:user]
         | 
| 77 85 | 
             
                end
         | 
| 78 86 |  | 
| 79 87 | 
             
                def set_https(client)
         | 
| @@ -82,16 +90,16 @@ module Aitch | |
| 82 90 | 
             
                end
         | 
| 83 91 |  | 
| 84 92 | 
             
                def set_timeout(client)
         | 
| 85 | 
            -
                  client.read_timeout =  | 
| 93 | 
            +
                  client.read_timeout = config.timeout
         | 
| 86 94 | 
             
                end
         | 
| 87 95 |  | 
| 88 96 | 
             
                def set_logger(client)
         | 
| 89 | 
            -
                  logger =  | 
| 97 | 
            +
                  logger = config.logger
         | 
| 90 98 | 
             
                  client.set_debug_output(logger) if logger
         | 
| 91 99 | 
             
                end
         | 
| 92 100 |  | 
| 93 101 | 
             
                def set_user_agent(request)
         | 
| 94 | 
            -
                  request["User-Agent"] =  | 
| 102 | 
            +
                  request["User-Agent"] = config.user_agent
         | 
| 95 103 | 
             
                end
         | 
| 96 104 |  | 
| 97 105 | 
             
                def set_gzip(request)
         | 
    
        data/lib/aitch/response.rb
    CHANGED
    
    | @@ -4,7 +4,8 @@ module Aitch | |
| 4 4 |  | 
| 5 5 | 
             
                def_delegators :@http_response, :content_type
         | 
| 6 6 |  | 
| 7 | 
            -
                def initialize(http_response)
         | 
| 7 | 
            +
                def initialize(config, http_response)
         | 
| 8 | 
            +
                  @config = config
         | 
| 8 9 | 
             
                  @http_response = http_response
         | 
| 9 10 | 
             
                end
         | 
| 10 11 |  | 
| @@ -46,9 +47,9 @@ module Aitch | |
| 46 47 |  | 
| 47 48 | 
             
                def data
         | 
| 48 49 | 
             
                  if json?
         | 
| 49 | 
            -
                     | 
| 50 | 
            +
                    @config.json_parser.load(body)
         | 
| 50 51 | 
             
                  elsif xml?
         | 
| 51 | 
            -
                     | 
| 52 | 
            +
                    @config.xml_parser.load(body)
         | 
| 52 53 | 
             
                  else
         | 
| 53 54 | 
             
                    body
         | 
| 54 55 | 
             
                  end
         | 
    
        data/lib/aitch/version.rb
    CHANGED
    
    
    
        data/spec/aitch/aitch_spec.rb
    CHANGED
    
    | @@ -20,25 +20,36 @@ describe Aitch do | |
| 20 20 | 
             
                it { should respond_to(:trace!) }
         | 
| 21 21 | 
             
                it { should respond_to(:execute) }
         | 
| 22 22 | 
             
                it { should respond_to(:execute!) }
         | 
| 23 | 
            +
                it { should respond_to(:config) }
         | 
| 24 | 
            +
                it { should respond_to(:configuration) }
         | 
| 23 25 | 
             
              end
         | 
| 24 26 |  | 
| 25 27 | 
             
              describe "#execute" do
         | 
| 26 28 | 
             
                let(:request) { mock.as_null_object }
         | 
| 27 29 |  | 
| 28 30 | 
             
                it "delegates to Request" do
         | 
| 31 | 
            +
                  expected = {
         | 
| 32 | 
            +
                    config: Aitch.config,
         | 
| 33 | 
            +
                    request_method: "get",
         | 
| 34 | 
            +
                    url: "URL",
         | 
| 35 | 
            +
                    data: "DATA",
         | 
| 36 | 
            +
                    headers: "HEADERS",
         | 
| 37 | 
            +
                    options: "OPTIONS"
         | 
| 38 | 
            +
                  }
         | 
| 39 | 
            +
             | 
| 29 40 | 
             
                  Aitch::Request
         | 
| 30 41 | 
             
                    .should_receive(:new)
         | 
| 31 | 
            -
                    .with( | 
| 42 | 
            +
                    .with(expected)
         | 
| 32 43 | 
             
                    .and_return(request)
         | 
| 33 44 |  | 
| 34 | 
            -
                  Aitch. | 
| 45 | 
            +
                  Aitch.get("URL", "DATA", "HEADERS", "OPTIONS")
         | 
| 35 46 | 
             
                end
         | 
| 36 47 |  | 
| 37 48 | 
             
                it "performs request" do
         | 
| 38 49 | 
             
                  Aitch::Request.stub new: request
         | 
| 39 50 | 
             
                  request.should_receive(:perform)
         | 
| 40 51 |  | 
| 41 | 
            -
                  Aitch. | 
| 52 | 
            +
                  Aitch.get("URL")
         | 
| 42 53 | 
             
                end
         | 
| 43 54 | 
             
              end
         | 
| 44 55 |  | 
| @@ -47,7 +58,7 @@ describe Aitch do | |
| 47 58 | 
             
                  response = stub(error?: false)
         | 
| 48 59 | 
             
                  Aitch::Request.any_instance.stub perform: response
         | 
| 49 60 |  | 
| 50 | 
            -
                  expect(Aitch. | 
| 61 | 
            +
                  expect(Aitch.get!("URL")).to eql(response)
         | 
| 51 62 | 
             
                end
         | 
| 52 63 |  | 
| 53 64 | 
             
                it "raises when has errors" do
         | 
| @@ -55,7 +66,7 @@ describe Aitch do | |
| 55 66 | 
             
                  Aitch::Request.any_instance.stub perform: response
         | 
| 56 67 |  | 
| 57 68 | 
             
                  expect {
         | 
| 58 | 
            -
                    Aitch. | 
| 69 | 
            +
                    Aitch.get!("URL")
         | 
| 59 70 | 
             
                  }.to raise_error("ERROR")
         | 
| 60 71 | 
             
                end
         | 
| 61 72 | 
             
              end
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            require "spec_helper"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Aitch::Namespace do
         | 
| 4 | 
            +
              it "isolates namespace configuration" do
         | 
| 5 | 
            +
                ns = Aitch::Namespace.new
         | 
| 6 | 
            +
                ns.config.user_agent = "MyLib/1.0.0"
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                expect(ns.config.user_agent).to eql("MyLib/1.0.0")
         | 
| 9 | 
            +
                expect(Aitch.config.user_agent).to match(%r[^Aitch])
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
            end
         | 
    
        data/spec/aitch/request_spec.rb
    CHANGED
    
    | @@ -1,14 +1,22 @@ | |
| 1 1 | 
             
            require "spec_helper"
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe Aitch::Request do
         | 
| 4 | 
            +
              def build_request(options = {})
         | 
| 5 | 
            +
                Aitch::Request.new({
         | 
| 6 | 
            +
                  request_method: "get",
         | 
| 7 | 
            +
                  url: "URL",
         | 
| 8 | 
            +
                  config: Aitch::Configuration.new
         | 
| 9 | 
            +
                }.merge(options))
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 4 12 | 
             
              it "raises with invalid uri" do
         | 
| 5 13 | 
             
                expect {
         | 
| 6 | 
            -
                   | 
| 14 | 
            +
                  build_request(url: "\\").uri
         | 
| 7 15 | 
             
                }.to raise_error(Aitch::InvalidURIError)
         | 
| 8 16 | 
             
              end
         | 
| 9 17 |  | 
| 10 18 | 
             
              it "raises on timeout", ruby: 2.0 do
         | 
| 11 | 
            -
                request =  | 
| 19 | 
            +
                request = build_request(request_method: "post", url: "http://example.org")
         | 
| 12 20 | 
             
                request.stub_chain(:client, :request).and_raise(Net::ReadTimeout)
         | 
| 13 21 |  | 
| 14 22 | 
             
                expect {
         | 
| @@ -17,7 +25,7 @@ describe Aitch::Request do | |
| 17 25 | 
             
              end
         | 
| 18 26 |  | 
| 19 27 | 
             
              it "raises on timeout", ruby: 1.9 do
         | 
| 20 | 
            -
                request =  | 
| 28 | 
            +
                request = build_request(request_method: "post", url: "http://example.org")
         | 
| 21 29 | 
             
                request.stub_chain(:client, :request).and_raise(Timeout::Error)
         | 
| 22 30 |  | 
| 23 31 | 
             
                expect {
         | 
| @@ -26,56 +34,59 @@ describe Aitch::Request do | |
| 26 34 | 
             
              end
         | 
| 27 35 |  | 
| 28 36 | 
             
              it "sets user agent" do
         | 
| 29 | 
            -
                 | 
| 30 | 
            -
                 | 
| 37 | 
            +
                requester = build_request
         | 
| 38 | 
            +
                request = requester.request
         | 
| 39 | 
            +
                expect(request["User-Agent"]).to eql(requester.config.user_agent)
         | 
| 31 40 | 
             
              end
         | 
| 32 41 |  | 
| 33 42 | 
             
              it "requests gzip encoding" do
         | 
| 34 | 
            -
                request =  | 
| 43 | 
            +
                request = build_request.request
         | 
| 35 44 | 
             
                expect(request["Accept-Encoding"]).to eql("gzip,deflate")
         | 
| 36 45 | 
             
              end
         | 
| 37 46 |  | 
| 38 47 | 
             
              it "sets path" do
         | 
| 39 | 
            -
                request =  | 
| 48 | 
            +
                request = build_request(url: "http://example.org/some/path").request
         | 
| 40 49 | 
             
                expect(request.path).to eql("/some/path")
         | 
| 41 50 | 
             
              end
         | 
| 42 51 |  | 
| 43 52 | 
             
              it "sets request body from hash" do
         | 
| 44 | 
            -
                request =  | 
| 53 | 
            +
                request = build_request(data: {a: 1}).request
         | 
| 45 54 | 
             
                expect(request.body).to eql("a=1")
         | 
| 46 55 | 
             
              end
         | 
| 47 56 |  | 
| 48 57 | 
             
              it "sets request body from string" do
         | 
| 49 | 
            -
                request =  | 
| 58 | 
            +
                request = build_request(data: "some body").request
         | 
| 50 59 | 
             
                expect(request.body).to eql("some body")
         | 
| 51 60 | 
             
              end
         | 
| 52 61 |  | 
| 53 62 | 
             
              it "sets request body from to_h protocol" do
         | 
| 54 63 | 
             
                data = stub(to_h: {a: 1})
         | 
| 55 | 
            -
                request =  | 
| 64 | 
            +
                request = build_request(data: data).request
         | 
| 56 65 | 
             
                expect(request.body).to eql("a=1")
         | 
| 57 66 | 
             
              end
         | 
| 58 67 |  | 
| 59 68 | 
             
              it "sets request body from to_s protocol" do
         | 
| 60 69 | 
             
                data = stub(to_s: "some body")
         | 
| 61 | 
            -
                request =  | 
| 70 | 
            +
                request = build_request(data: data).request
         | 
| 62 71 |  | 
| 63 72 | 
             
                expect(request.body).to eql("some body")
         | 
| 64 73 | 
             
              end
         | 
| 65 74 |  | 
| 66 75 | 
             
              it "sets default headers" do
         | 
| 67 | 
            -
                 | 
| 68 | 
            -
                 | 
| 76 | 
            +
                requester = build_request
         | 
| 77 | 
            +
                requester.config.default_headers = {"HEADER" => "VALUE"}
         | 
| 78 | 
            +
                request = requester.request
         | 
| 79 | 
            +
             | 
| 69 80 | 
             
                expect(request["HEADER"]).to eql("VALUE")
         | 
| 70 81 | 
             
              end
         | 
| 71 82 |  | 
| 72 83 | 
             
              it "sets custom headers" do
         | 
| 73 | 
            -
                request =  | 
| 84 | 
            +
                request = build_request(headers: {"HEADER" => "VALUE"}).request
         | 
| 74 85 | 
             
                expect(request["HEADER"]).to eql("VALUE")
         | 
| 75 86 | 
             
              end
         | 
| 76 87 |  | 
| 77 88 | 
             
              it "sets basic auth credentials" do
         | 
| 78 | 
            -
                request =  | 
| 89 | 
            +
                request = build_request(options: {user: "USER", password: "PASS"}).request
         | 
| 79 90 | 
             
                credentials = Base64.decode64(request["Authorization"].gsub(/Basic /, ""))
         | 
| 80 91 |  | 
| 81 92 | 
             
                expect(credentials).to eql("USER:PASS")
         | 
| @@ -83,9 +94,8 @@ describe Aitch::Request do | |
| 83 94 |  | 
| 84 95 | 
             
              describe "#client" do
         | 
| 85 96 | 
             
                context "https" do
         | 
| 86 | 
            -
                   | 
| 87 | 
            -
             | 
| 88 | 
            -
                  }
         | 
| 97 | 
            +
                  let(:request) { build_request(url: "https://example.org") }
         | 
| 98 | 
            +
                  subject(:client) { request.client }
         | 
| 89 99 |  | 
| 90 100 | 
             
                  it "sets https" do
         | 
| 91 101 | 
             
                    expect(client.use_ssl?).to be_true
         | 
| @@ -96,7 +106,7 @@ describe Aitch::Request do | |
| 96 106 | 
             
                  end
         | 
| 97 107 |  | 
| 98 108 | 
             
                  it "sets timeout" do
         | 
| 99 | 
            -
                     | 
| 109 | 
            +
                    request.config.timeout = 20
         | 
| 100 110 | 
             
                    expect(client.read_timeout).to eql(20)
         | 
| 101 111 | 
             
                  end
         | 
| 102 112 | 
             
                end
         | 
| @@ -105,7 +115,7 @@ describe Aitch::Request do | |
| 105 115 | 
             
              describe "Request class" do
         | 
| 106 116 | 
             
                it "raises with invalid method" do
         | 
| 107 117 | 
             
                  expect {
         | 
| 108 | 
            -
                     | 
| 118 | 
            +
                    build_request(request_method: "invalid").request
         | 
| 109 119 | 
             
                  }.to raise_error(Aitch::InvalidHTTPMethodError, %[unexpected HTTP verb: "invalid"])
         | 
| 110 120 | 
             
                end
         | 
| 111 121 |  | 
| @@ -120,7 +130,7 @@ describe Aitch::Request do | |
| 120 130 | 
             
                  trace
         | 
| 121 131 | 
             
                ].each do |method|
         | 
| 122 132 | 
             
                  it "instantiates #{method.upcase} method" do
         | 
| 123 | 
            -
                    request =  | 
| 133 | 
            +
                    request = build_request(request_method: method).request
         | 
| 124 134 | 
             
                    expect(request.class.name).to eql("Net::HTTP::#{method.capitalize}")
         | 
| 125 135 | 
             
                  end
         | 
| 126 136 | 
             
                end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,126 +1,111 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: aitch
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 5 | 
            -
              prerelease: 
         | 
| 4 | 
            +
              version: 0.1.1
         | 
| 6 5 | 
             
            platform: ruby
         | 
| 7 6 | 
             
            authors:
         | 
| 8 7 | 
             
            - Nando Vieira
         | 
| 9 8 | 
             
            autorequire: 
         | 
| 10 9 | 
             
            bindir: bin
         | 
| 11 10 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2013-04- | 
| 11 | 
            +
            date: 2013-04-30 00:00:00.000000000 Z
         | 
| 13 12 | 
             
            dependencies:
         | 
| 14 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 14 | 
             
              name: bundler
         | 
| 16 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 17 | 
            -
                none: false
         | 
| 18 16 | 
             
                requirements:
         | 
| 19 | 
            -
                - -  | 
| 17 | 
            +
                - - '>='
         | 
| 20 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 21 19 | 
             
                    version: '0'
         | 
| 22 20 | 
             
              type: :development
         | 
| 23 21 | 
             
              prerelease: false
         | 
| 24 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            -
                none: false
         | 
| 26 23 | 
             
                requirements:
         | 
| 27 | 
            -
                - -  | 
| 24 | 
            +
                - - '>='
         | 
| 28 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 26 | 
             
                    version: '0'
         | 
| 30 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 31 28 | 
             
              name: rake
         | 
| 32 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            -
                none: false
         | 
| 34 30 | 
             
                requirements:
         | 
| 35 | 
            -
                - -  | 
| 31 | 
            +
                - - '>='
         | 
| 36 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 37 33 | 
             
                    version: '0'
         | 
| 38 34 | 
             
              type: :development
         | 
| 39 35 | 
             
              prerelease: false
         | 
| 40 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 | 
            -
                none: false
         | 
| 42 37 | 
             
                requirements:
         | 
| 43 | 
            -
                - -  | 
| 38 | 
            +
                - - '>='
         | 
| 44 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 45 40 | 
             
                    version: '0'
         | 
| 46 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 47 42 | 
             
              name: rspec
         | 
| 48 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 49 | 
            -
                none: false
         | 
| 50 44 | 
             
                requirements:
         | 
| 51 | 
            -
                - -  | 
| 45 | 
            +
                - - '>='
         | 
| 52 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 53 47 | 
             
                    version: '0'
         | 
| 54 48 | 
             
              type: :development
         | 
| 55 49 | 
             
              prerelease: false
         | 
| 56 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 | 
            -
                none: false
         | 
| 58 51 | 
             
                requirements:
         | 
| 59 | 
            -
                - -  | 
| 52 | 
            +
                - - '>='
         | 
| 60 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 54 | 
             
                    version: '0'
         | 
| 62 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 63 56 | 
             
              name: pry-meta
         | 
| 64 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 65 | 
            -
                none: false
         | 
| 66 58 | 
             
                requirements:
         | 
| 67 | 
            -
                - -  | 
| 59 | 
            +
                - - '>='
         | 
| 68 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 69 61 | 
             
                    version: '0'
         | 
| 70 62 | 
             
              type: :development
         | 
| 71 63 | 
             
              prerelease: false
         | 
| 72 64 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 73 | 
            -
                none: false
         | 
| 74 65 | 
             
                requirements:
         | 
| 75 | 
            -
                - -  | 
| 66 | 
            +
                - - '>='
         | 
| 76 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 77 68 | 
             
                    version: '0'
         | 
| 78 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 79 70 | 
             
              name: test_notifier
         | 
| 80 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 81 | 
            -
                none: false
         | 
| 82 72 | 
             
                requirements:
         | 
| 83 | 
            -
                - -  | 
| 73 | 
            +
                - - '>='
         | 
| 84 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 85 75 | 
             
                    version: '0'
         | 
| 86 76 | 
             
              type: :development
         | 
| 87 77 | 
             
              prerelease: false
         | 
| 88 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 89 | 
            -
                none: false
         | 
| 90 79 | 
             
                requirements:
         | 
| 91 | 
            -
                - -  | 
| 80 | 
            +
                - - '>='
         | 
| 92 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 93 82 | 
             
                    version: '0'
         | 
| 94 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 95 84 | 
             
              name: fakeweb
         | 
| 96 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 97 | 
            -
                none: false
         | 
| 98 86 | 
             
                requirements:
         | 
| 99 | 
            -
                - -  | 
| 87 | 
            +
                - - '>='
         | 
| 100 88 | 
             
                  - !ruby/object:Gem::Version
         | 
| 101 89 | 
             
                    version: '0'
         | 
| 102 90 | 
             
              type: :development
         | 
| 103 91 | 
             
              prerelease: false
         | 
| 104 92 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 105 | 
            -
                none: false
         | 
| 106 93 | 
             
                requirements:
         | 
| 107 | 
            -
                - -  | 
| 94 | 
            +
                - - '>='
         | 
| 108 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 109 96 | 
             
                    version: '0'
         | 
| 110 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 111 98 | 
             
              name: nokogiri
         | 
| 112 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 113 | 
            -
                none: false
         | 
| 114 100 | 
             
                requirements:
         | 
| 115 | 
            -
                - -  | 
| 101 | 
            +
                - - '>='
         | 
| 116 102 | 
             
                  - !ruby/object:Gem::Version
         | 
| 117 103 | 
             
                    version: '0'
         | 
| 118 104 | 
             
              type: :development
         | 
| 119 105 | 
             
              prerelease: false
         | 
| 120 106 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 | 
            -
                none: false
         | 
| 122 107 | 
             
                requirements:
         | 
| 123 | 
            -
                - -  | 
| 108 | 
            +
                - - '>='
         | 
| 124 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 125 110 | 
             
                    version: '0'
         | 
| 126 111 | 
             
            description: A simple HTTP client
         | 
| @@ -141,6 +126,7 @@ files: | |
| 141 126 | 
             
            - lib/aitch.rb
         | 
| 142 127 | 
             
            - lib/aitch/configuration.rb
         | 
| 143 128 | 
             
            - lib/aitch/errors.rb
         | 
| 129 | 
            +
            - lib/aitch/namespace.rb
         | 
| 144 130 | 
             
            - lib/aitch/redirect.rb
         | 
| 145 131 | 
             
            - lib/aitch/request.rb
         | 
| 146 132 | 
             
            - lib/aitch/response.rb
         | 
| @@ -150,6 +136,7 @@ files: | |
| 150 136 | 
             
            - lib/aitch/xml_parser.rb
         | 
| 151 137 | 
             
            - spec/aitch/aitch_spec.rb
         | 
| 152 138 | 
             
            - spec/aitch/configuration_spec.rb
         | 
| 139 | 
            +
            - spec/aitch/namespace_spec.rb
         | 
| 153 140 | 
             
            - spec/aitch/request_spec.rb
         | 
| 154 141 | 
             
            - spec/aitch/response_spec.rb
         | 
| 155 142 | 
             
            - spec/aitch/xml_parser_spec.rb
         | 
| @@ -157,31 +144,31 @@ files: | |
| 157 144 | 
             
            homepage: http://rubygems.org/gems/aitch
         | 
| 158 145 | 
             
            licenses:
         | 
| 159 146 | 
             
            - MIT
         | 
| 147 | 
            +
            metadata: {}
         | 
| 160 148 | 
             
            post_install_message: 
         | 
| 161 149 | 
             
            rdoc_options: []
         | 
| 162 150 | 
             
            require_paths:
         | 
| 163 151 | 
             
            - lib
         | 
| 164 152 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 165 | 
            -
              none: false
         | 
| 166 153 | 
             
              requirements:
         | 
| 167 | 
            -
              - -  | 
| 154 | 
            +
              - - '>='
         | 
| 168 155 | 
             
                - !ruby/object:Gem::Version
         | 
| 169 156 | 
             
                  version: '0'
         | 
| 170 157 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 171 | 
            -
              none: false
         | 
| 172 158 | 
             
              requirements:
         | 
| 173 | 
            -
              - -  | 
| 159 | 
            +
              - - '>='
         | 
| 174 160 | 
             
                - !ruby/object:Gem::Version
         | 
| 175 161 | 
             
                  version: '0'
         | 
| 176 162 | 
             
            requirements: []
         | 
| 177 163 | 
             
            rubyforge_project: 
         | 
| 178 | 
            -
            rubygems_version:  | 
| 164 | 
            +
            rubygems_version: 2.0.0
         | 
| 179 165 | 
             
            signing_key: 
         | 
| 180 | 
            -
            specification_version:  | 
| 166 | 
            +
            specification_version: 4
         | 
| 181 167 | 
             
            summary: A simple HTTP client
         | 
| 182 168 | 
             
            test_files:
         | 
| 183 169 | 
             
            - spec/aitch/aitch_spec.rb
         | 
| 184 170 | 
             
            - spec/aitch/configuration_spec.rb
         | 
| 171 | 
            +
            - spec/aitch/namespace_spec.rb
         | 
| 185 172 | 
             
            - spec/aitch/request_spec.rb
         | 
| 186 173 | 
             
            - spec/aitch/response_spec.rb
         | 
| 187 174 | 
             
            - spec/aitch/xml_parser_spec.rb
         |