hyperclient 0.1.0 → 0.2.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.
- data/.rvmrc +1 -1
- data/Readme.md +15 -4
- data/hyperclient.gemspec +4 -2
- data/lib/hyperclient/collection.rb +7 -0
- data/lib/hyperclient/http.rb +68 -22
- data/lib/hyperclient/version.rb +1 -1
- data/test/hyperclient/collection_test.rb +6 -0
- data/test/hyperclient/http_test.rb +80 -3
- metadata +62 -30
    
        data/.rvmrc
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            rvm use --create 1.9.3@hyperclient
         | 
| 1 | 
            +
            rvm use --create 1.9.3-p125@hyperclient
         | 
    
        data/Readme.md
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 | 
            -
            # Hyperclient | 
| 2 | 
            -
            [](http://travis-ci.org/codegram/hyperclient) | 
| 1 | 
            +
            # Hyperclient
         | 
| 2 | 
            +
            [](http://travis-ci.org/codegram/hyperclient)
         | 
| 3 3 | 
             
            [](http://gemnasium.com/codegram/hyperclient)
         | 
| 4 4 | 
             
            [](https://codeclimate.com/github/codegram/hyperclient)
         | 
| 5 5 |  | 
| @@ -30,7 +30,7 @@ Hyperclient only works with JSON HAL friendly APIs. [Learn about JSON HAL][hal]. | |
| 30 30 |  | 
| 31 31 | 
             
            ## Resources
         | 
| 32 32 |  | 
| 33 | 
            -
            Hyperclient will try to fetch and discover the resources from your API. | 
| 33 | 
            +
            Hyperclient will try to fetch and discover the resources from your API.
         | 
| 34 34 |  | 
| 35 35 | 
             
            ### Links
         | 
| 36 36 |  | 
| @@ -111,6 +111,17 @@ posts = api.links.posts | |
| 111 111 | 
             
            posts.post({title: "I'm a blogger!", body: 'Wohoo!!'})
         | 
| 112 112 | 
             
            ````
         | 
| 113 113 |  | 
| 114 | 
            +
            If you have a templated link you can expand it like so:
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            ````ruby
         | 
| 117 | 
            +
            api.links.post.expand(:id => 3).first
         | 
| 118 | 
            +
            # => #<Resource ...>
         | 
| 119 | 
            +
            ````
         | 
| 120 | 
            +
             | 
| 121 | 
            +
            ## Other
         | 
| 122 | 
            +
             | 
| 123 | 
            +
            There's also a PHP library named [HyperClient](https://github.com/FoxyCart/HyperClient), if that's what you were looking for :)
         | 
| 124 | 
            +
             | 
| 114 125 | 
             
            ## TODO
         | 
| 115 126 |  | 
| 116 127 | 
             
            * Resource permissions: Using the `Allow` header Hyperclient should be able to
         | 
| @@ -143,4 +154,4 @@ MIT License. Copyright 2012 [Codegram Technologies][codegram] | |
| 143 154 | 
             
            [httparty]: http://github.com/jnunemaker/httparty
         | 
| 144 155 | 
             
            [examples]: http://github.com/codegram/hyperclient/tree/master/examples
         | 
| 145 156 | 
             
            [enumerable]: http://ruby-doc.org/core-1.9.3/Enumerable.html
         | 
| 146 | 
            -
            [rdoc]: http://rubydoc.org/github/codegram/hyperclient/master/frames
         | 
| 157 | 
            +
            [rdoc]: http://rubydoc.org/github/codegram/hyperclient/master/frames
         | 
    
        data/hyperclient.gemspec
    CHANGED
    
    | @@ -14,11 +14,13 @@ Gem::Specification.new do |gem| | |
| 14 14 | 
             
              gem.require_paths = ["lib"]
         | 
| 15 15 | 
             
              gem.version       = Hyperclient::VERSION
         | 
| 16 16 |  | 
| 17 | 
            -
              gem.add_dependency ' | 
| 17 | 
            +
              gem.add_dependency 'faraday'
         | 
| 18 18 | 
             
              gem.add_dependency 'uri_template'
         | 
| 19 | 
            +
              gem.add_dependency 'net-http-digest_auth'
         | 
| 19 20 |  | 
| 20 | 
            -
              gem.add_development_dependency 'minitest'
         | 
| 21 | 
            +
              gem.add_development_dependency 'minitest', '~> 3.4.0'
         | 
| 21 22 | 
             
              gem.add_development_dependency 'turn'
         | 
| 22 23 | 
             
              gem.add_development_dependency 'webmock'
         | 
| 23 24 | 
             
              gem.add_development_dependency 'mocha'
         | 
| 25 | 
            +
              gem.add_development_dependency 'rack-test'
         | 
| 24 26 | 
             
            end
         | 
| @@ -34,6 +34,13 @@ module Hyperclient | |
| 34 34 | 
             
                  @collection[name.to_s]
         | 
| 35 35 | 
             
                end
         | 
| 36 36 |  | 
| 37 | 
            +
                # Public: Returns the wrapped collection as a hash.
         | 
| 38 | 
            +
                #
         | 
| 39 | 
            +
                # Returns a Hash.
         | 
| 40 | 
            +
                def to_hash
         | 
| 41 | 
            +
                  @collection.to_hash
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 37 44 | 
             
                # Public: Provides method access to the collection values.
         | 
| 38 45 | 
             
                #
         | 
| 39 46 | 
             
                # It allows accessing a value as `collection.name` instead of
         | 
    
        data/lib/hyperclient/http.rb
    CHANGED
    
    | @@ -1,18 +1,12 @@ | |
| 1 | 
            -
            require ' | 
| 1 | 
            +
            require 'faraday'
         | 
| 2 2 | 
             
            require 'json'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            # Public: A parser for HTTParty that understand the mime application/hal+json.
         | 
| 5 | 
            -
            class JSONHalParser < HTTParty::Parser
         | 
| 6 | 
            -
              SupportedFormats.merge!({'application/hal+json' => :json})
         | 
| 7 | 
            -
            end
         | 
| 3 | 
            +
            require 'net/http/digest_auth'
         | 
| 8 4 |  | 
| 9 5 | 
             
            module Hyperclient
         | 
| 10 6 | 
             
              # Internal: This class wrapps HTTParty and performs the HTTP requests for a
         | 
| 11 7 | 
             
              # resource.
         | 
| 12 8 | 
             
              class HTTP
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                parser JSONHalParser
         | 
| 15 | 
            -
             | 
| 9 | 
            +
                attr_writer :faraday
         | 
| 16 10 | 
             
                # Public: Initializes the HTTP agent.
         | 
| 17 11 | 
             
                #
         | 
| 18 12 | 
             
                # url    - A String to send the HTTP requests.
         | 
| @@ -24,16 +18,19 @@ module Hyperclient | |
| 24 18 | 
             
                #            :user     - A String with the user.
         | 
| 25 19 | 
             
                #            :password - A String with the user.
         | 
| 26 20 | 
             
                #          :debug   - The flag (true/false) to debug the HTTP connections.
         | 
| 21 | 
            +
                #          :faraday_options - A Hash that will be passed to Faraday.new (optional).
         | 
| 22 | 
            +
                #                             Can additionally include a :block => <Proc> that is also
         | 
| 23 | 
            +
                #                             passed to Faraday.
         | 
| 27 24 | 
             
                #
         | 
| 28 25 | 
             
                def initialize(url, config)
         | 
| 29 26 | 
             
                  @url      = url
         | 
| 30 27 | 
             
                  @config   = config
         | 
| 31 28 | 
             
                  @base_uri = config.fetch(:base_uri)
         | 
| 29 | 
            +
                  @faraday_options = (config[:faraday_options] || {}).dup
         | 
| 30 | 
            +
                  @faraday_block = @faraday_options.delete(:block)
         | 
| 32 31 |  | 
| 33 32 | 
             
                  authenticate!
         | 
| 34 33 | 
             
                  toggle_debug! if @config[:debug]
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                  self.class.headers(@config[:headers]) if @config.include?(:headers)
         | 
| 37 34 | 
             
                end
         | 
| 38 35 |  | 
| 39 36 | 
             
                def url
         | 
| @@ -48,7 +45,11 @@ module Hyperclient | |
| 48 45 | 
             
                #
         | 
| 49 46 | 
             
                # Returns: The parsed response.
         | 
| 50 47 | 
             
                def get
         | 
| 51 | 
            -
                   | 
| 48 | 
            +
                  response = process_request :get
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  if body = response.body
         | 
| 51 | 
            +
                    JSON.parse(body)
         | 
| 52 | 
            +
                  end
         | 
| 52 53 | 
             
                end
         | 
| 53 54 |  | 
| 54 55 | 
             
                # Public: Sends a POST request the the resource url.
         | 
| @@ -57,7 +58,7 @@ module Hyperclient | |
| 57 58 | 
             
                #
         | 
| 58 59 | 
             
                # Returns: A HTTParty::Response
         | 
| 59 60 | 
             
                def post(params)
         | 
| 60 | 
            -
                   | 
| 61 | 
            +
                  wrap_response process_request(:post, params)
         | 
| 61 62 | 
             
                end
         | 
| 62 63 |  | 
| 63 64 | 
             
                # Public: Sends a PUT request the the resource url.
         | 
| @@ -66,31 +67,59 @@ module Hyperclient | |
| 66 67 | 
             
                #
         | 
| 67 68 | 
             
                # Returns: A HTTParty::Response
         | 
| 68 69 | 
             
                def put(params)
         | 
| 69 | 
            -
                   | 
| 70 | 
            +
                  wrap_response process_request(:put, params)
         | 
| 70 71 | 
             
                end
         | 
| 71 72 |  | 
| 72 73 | 
             
                # Public: Sends an OPTIONS request the the resource url.
         | 
| 73 74 | 
             
                #
         | 
| 74 75 | 
             
                # Returns: A HTTParty::Response
         | 
| 75 76 | 
             
                def options
         | 
| 76 | 
            -
                   | 
| 77 | 
            +
                  wrap_response process_request(:options)
         | 
| 77 78 | 
             
                end
         | 
| 78 79 |  | 
| 79 80 | 
             
                # Public: Sends a HEAD request the the resource url.
         | 
| 80 81 | 
             
                #
         | 
| 81 82 | 
             
                # Returns: A HTTParty::Response
         | 
| 82 83 | 
             
                def head
         | 
| 83 | 
            -
                   | 
| 84 | 
            +
                  wrap_response process_request(:head)
         | 
| 84 85 | 
             
                end
         | 
| 85 86 |  | 
| 86 87 | 
             
                # Public: Sends a DELETE request the the resource url.
         | 
| 87 88 | 
             
                #
         | 
| 88 89 | 
             
                # Returns: A HTTParty::Response
         | 
| 89 90 | 
             
                def delete
         | 
| 90 | 
            -
                   | 
| 91 | 
            +
                  wrap_response process_request(:delete)
         | 
| 91 92 | 
             
                end
         | 
| 92 93 |  | 
| 93 94 | 
             
                private
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                def faraday
         | 
| 97 | 
            +
                  default_block = lambda do |faraday|
         | 
| 98 | 
            +
                      faraday.request  :url_encoded
         | 
| 99 | 
            +
                      faraday.adapter :net_http
         | 
| 100 | 
            +
                  end
         | 
| 101 | 
            +
                  @faraday ||= Faraday.new({:url => @base_uri, :headers => @config[:headers] || {}
         | 
| 102 | 
            +
                    }.merge(@faraday_options), &(@faraday_block || default_block))
         | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                def wrap_response(faraday_response)
         | 
| 106 | 
            +
                  def faraday_response.code
         | 
| 107 | 
            +
                    status
         | 
| 108 | 
            +
                  end
         | 
| 109 | 
            +
                  faraday_response
         | 
| 110 | 
            +
                end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                def process_request(method, params = nil)
         | 
| 113 | 
            +
                  response = faraday.run_request method, url, params, faraday.headers
         | 
| 114 | 
            +
                  if response.status == 401 && @digest_auth
         | 
| 115 | 
            +
                    response = faraday.run_request method, url, nil, faraday.headers do |request|
         | 
| 116 | 
            +
                      request.headers['Authorization'] = digest_auth_header(
         | 
| 117 | 
            +
                        url,  response.headers['www-authenticate'], method)
         | 
| 118 | 
            +
                    end
         | 
| 119 | 
            +
                  end
         | 
| 120 | 
            +
                  response
         | 
| 121 | 
            +
                end
         | 
| 122 | 
            +
             | 
| 94 123 | 
             
                # Internal: Sets the authentication method for HTTParty.
         | 
| 95 124 | 
             
                #
         | 
| 96 125 | 
             
                # options - An options Hash to set the authentication options.
         | 
| @@ -98,21 +127,38 @@ module Hyperclient | |
| 98 127 | 
             
                # Returns nothing.
         | 
| 99 128 | 
             
                def authenticate!
         | 
| 100 129 | 
             
                  if (options = @config[:auth])
         | 
| 101 | 
            -
                    auth_method = options. | 
| 102 | 
            -
                     | 
| 130 | 
            +
                    auth_method = options.fetch(:type).to_s + '_auth'
         | 
| 131 | 
            +
                    send auth_method, options
         | 
| 103 132 | 
             
                  end
         | 
| 104 133 | 
             
                end
         | 
| 105 134 |  | 
| 135 | 
            +
                def basic_auth(options)
         | 
| 136 | 
            +
                  faraday.basic_auth options[:user], options[:password]
         | 
| 137 | 
            +
                end
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                def digest_auth(options)
         | 
| 140 | 
            +
                  @digest_auth = options
         | 
| 141 | 
            +
                end
         | 
| 142 | 
            +
             | 
| 143 | 
            +
                def digest_auth_header(url, realm, method)
         | 
| 144 | 
            +
                  uri = URI.parse(url)
         | 
| 145 | 
            +
                  uri.user = @digest_auth[:user]
         | 
| 146 | 
            +
                  uri.password = @digest_auth[:password]
         | 
| 147 | 
            +
                  digest_auth = Net::HTTP::DigestAuth.new
         | 
| 148 | 
            +
                  digest_auth.auth_header uri, realm, method.upcase
         | 
| 149 | 
            +
                end
         | 
| 150 | 
            +
             | 
| 106 151 | 
             
                # Internal: Enables HTTP debugging.
         | 
| 107 152 | 
             
                #
         | 
| 108 | 
            -
                # stream - An object to stream the HTTP out to or just a truthy value. | 
| 153 | 
            +
                # stream - An object to stream the HTTP out to or just a truthy value.
         | 
| 109 154 | 
             
                def toggle_debug!
         | 
| 110 155 | 
             
                  stream = @config[:debug]
         | 
| 156 | 
            +
                  require 'logger'
         | 
| 111 157 |  | 
| 112 158 | 
             
                  if stream.respond_to?(:<<)
         | 
| 113 | 
            -
                     | 
| 159 | 
            +
                    faraday.response :logger, ::Logger.new(stream)
         | 
| 114 160 | 
             
                  else
         | 
| 115 | 
            -
                     | 
| 161 | 
            +
                    faraday.response :logger, ::Logger.new($stderr)
         | 
| 116 162 | 
             
                  end
         | 
| 117 163 | 
             
                end
         | 
| 118 164 | 
             
              end
         | 
    
        data/lib/hyperclient/version.rb
    CHANGED
    
    
| @@ -34,6 +34,12 @@ module Hyperclient | |
| 34 34 |  | 
| 35 35 | 
             
                  names.must_equal ['_links', 'title', 'description', 'permitted', '_embedded']
         | 
| 36 36 | 
             
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                describe '#to_hash' do
         | 
| 39 | 
            +
                  it 'returns the wrapped collection as a hash' do
         | 
| 40 | 
            +
                    collection.to_hash.must_be_kind_of Hash
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
                end
         | 
| 37 43 | 
             
              end
         | 
| 38 44 | 
             
            end
         | 
| 39 45 |  | 
| @@ -14,6 +14,48 @@ module Hyperclient | |
| 14 14 | 
             
                  HTTP.new(url, config)
         | 
| 15 15 | 
             
                end
         | 
| 16 16 |  | 
| 17 | 
            +
                describe 'initialize' do
         | 
| 18 | 
            +
                  it 'passes options to faraday' do
         | 
| 19 | 
            +
                    Faraday.expects(:new).with(:headers => {}, :url => config[:base_uri],
         | 
| 20 | 
            +
                      :x => :y).returns(stub('faraday', :headers => {},
         | 
| 21 | 
            +
                        :run_request => stub(:body => '{}', :status => 200)))
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    HTTP.new(url, config.merge(:faraday_options => {:x => :y})).get
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  it 'passes the options to faraday again when initializing it again' do
         | 
| 27 | 
            +
                    Faraday.expects(:new).with(:headers => {}, :url => config[:base_uri],
         | 
| 28 | 
            +
                      :x => :y).returns(stub('faraday', :headers => {},
         | 
| 29 | 
            +
                        :run_request => stub(:body => '{}', :status => 200))).times(2)
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    full_config = config.merge(:faraday_options => {:x => :y})
         | 
| 32 | 
            +
                    2.times { HTTP.new(url, full_config).get }
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  it 'passes a block to faraday' do
         | 
| 36 | 
            +
                    app = stub('app')
         | 
| 37 | 
            +
                    http = HTTP.new(url, config.merge(
         | 
| 38 | 
            +
                      :faraday_options => {:block => lambda{|f| f.adapter :rack, app}}))
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                    app.expects(:call).returns([200, {}, '{}'] )
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                    http.get
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  it 'passes a block to faraday again when initializing again' do
         | 
| 46 | 
            +
                    app = stub('app')
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    app.expects(:call).returns([200, {}, '{}'] ).times(2)
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                    full_config = config.merge(:faraday_options => {:block => lambda{|f|
         | 
| 51 | 
            +
                      f.adapter :rack, app}})
         | 
| 52 | 
            +
                    2.times {
         | 
| 53 | 
            +
                      http = HTTP.new(url, full_config)
         | 
| 54 | 
            +
                      http.get
         | 
| 55 | 
            +
                    }
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 17 59 | 
             
                describe 'url' do
         | 
| 18 60 | 
             
                  it 'merges the resource url with the base uri' do
         | 
| 19 61 | 
             
                    http.url.to_s.must_equal 'http://api.example.org/productions/1'
         | 
| @@ -27,7 +69,7 @@ module Hyperclient | |
| 27 69 | 
             
                end
         | 
| 28 70 |  | 
| 29 71 | 
             
                describe 'authentication' do
         | 
| 30 | 
            -
                  it 'sets the authentication options' do
         | 
| 72 | 
            +
                  it 'sets the basic authentication options' do
         | 
| 31 73 | 
             
                    stub_request(:get, 'http://user:pass@api.example.org/productions/1').
         | 
| 32 74 | 
             
                      to_return(body: '{"resource": "This is the resource"}')
         | 
| 33 75 |  | 
| @@ -35,6 +77,19 @@ module Hyperclient | |
| 35 77 |  | 
| 36 78 | 
             
                    http.get.must_equal({'resource' => 'This is the resource'})
         | 
| 37 79 | 
             
                  end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  it 'sets the digest authentication options' do
         | 
| 82 | 
            +
                    stub_request(:get, 'http://api.example.org/productions/1').
         | 
| 83 | 
            +
                      to_return(status: 401, headers: {'www-authenticate' => 'private area'})
         | 
| 84 | 
            +
                    stub_request(:get, 'http://api.example.org/productions/1').
         | 
| 85 | 
            +
                      with(headers: {'Authorization' =>
         | 
| 86 | 
            +
                        %r{Digest username="user", realm="", algorithm=MD5, uri="/productions/1"}}).
         | 
| 87 | 
            +
                      to_return(body: '{"resource": "This is the resource"}')
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                    config.update({auth: {type: :digest, user: 'user', password: 'pass'}})
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                    http.get.must_equal({'resource' => 'This is the resource'})
         | 
| 92 | 
            +
                  end
         | 
| 38 93 | 
             
                end
         | 
| 39 94 |  | 
| 40 95 | 
             
                describe 'headers' do
         | 
| @@ -50,17 +105,32 @@ module Hyperclient | |
| 50 105 | 
             
                end
         | 
| 51 106 |  | 
| 52 107 | 
             
                describe 'debug' do
         | 
| 108 | 
            +
                  before(:each) do
         | 
| 109 | 
            +
                    @stderr = $stderr
         | 
| 110 | 
            +
                    stub_request(:get, 'http://api.example.org/productions/1').
         | 
| 111 | 
            +
                      to_return(body: '{"resource": "This is the resource"}')
         | 
| 112 | 
            +
                  end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                  after(:each) do
         | 
| 115 | 
            +
                    $stderr = @stderr
         | 
| 116 | 
            +
                  end
         | 
| 117 | 
            +
             | 
| 53 118 | 
             
                  it 'enables debugging' do
         | 
| 119 | 
            +
                    $stderr = StringIO.new
         | 
| 54 120 | 
             
                    config.update({debug: true})
         | 
| 55 121 |  | 
| 56 | 
            -
                    http. | 
| 122 | 
            +
                    http.get
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                    $stderr.string.must_include('get http://api.example.org/productions/1')
         | 
| 57 125 | 
             
                  end
         | 
| 58 126 |  | 
| 59 127 | 
             
                  it 'uses a custom stream' do
         | 
| 60 128 | 
             
                    stream = StringIO.new
         | 
| 61 129 | 
             
                    config.update({debug: stream})
         | 
| 62 130 |  | 
| 63 | 
            -
                    http. | 
| 131 | 
            +
                    http.get
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                    stream.string.must_include('get http://api.example.org/productions/1')
         | 
| 64 134 | 
             
                  end
         | 
| 65 135 | 
             
                end
         | 
| 66 136 |  | 
| @@ -78,6 +148,13 @@ module Hyperclient | |
| 78 148 |  | 
| 79 149 | 
             
                    http.get.must_equal({'some_json' => 12345})
         | 
| 80 150 | 
             
                  end
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                  it 'returns nil if the response body is nil' do
         | 
| 153 | 
            +
                    stub_request(:get, 'http://api.example.org/productions/1').
         | 
| 154 | 
            +
                      to_return(body: nil)
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                    http.get.must_equal(nil)
         | 
| 157 | 
            +
                  end
         | 
| 81 158 | 
             
                end
         | 
| 82 159 |  | 
| 83 160 | 
             
                describe 'post' do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,112 +1,144 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: hyperclient
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1.0
         | 
| 5 4 | 
             
              prerelease: 
         | 
| 5 | 
            +
              version: 0.2.0
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| 8 8 | 
             
            - Oriol Gual
         | 
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012- | 
| 12 | 
            +
            date: 2012-12-14 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            -
               | 
| 16 | 
            -
             | 
| 15 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ! '>='
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '0'
         | 
| 17 20 | 
             
                none: false
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              name: faraday
         | 
| 23 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 18 24 | 
             
                requirements:
         | 
| 19 25 | 
             
                - - ! '>='
         | 
| 20 26 | 
             
                  - !ruby/object:Gem::Version
         | 
| 21 27 | 
             
                    version: '0'
         | 
| 28 | 
            +
                none: false
         | 
| 22 29 | 
             
              type: :runtime
         | 
| 23 | 
            -
             | 
| 30 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 24 31 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            -
                none: false
         | 
| 26 32 | 
             
                requirements:
         | 
| 27 33 | 
             
                - - ! '>='
         | 
| 28 34 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 35 | 
             
                    version: '0'
         | 
| 30 | 
            -
             | 
| 36 | 
            +
                none: false
         | 
| 37 | 
            +
              prerelease: false
         | 
| 31 38 | 
             
              name: uri_template
         | 
| 32 39 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            -
                none: false
         | 
| 34 40 | 
             
                requirements:
         | 
| 35 41 | 
             
                - - ! '>='
         | 
| 36 42 | 
             
                  - !ruby/object:Gem::Version
         | 
| 37 43 | 
             
                    version: '0'
         | 
| 44 | 
            +
                none: false
         | 
| 38 45 | 
             
              type: :runtime
         | 
| 39 | 
            -
             | 
| 46 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 40 47 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 48 | 
            +
                requirements:
         | 
| 49 | 
            +
                - - ! '>='
         | 
| 50 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 51 | 
            +
                    version: '0'
         | 
| 41 52 | 
             
                none: false
         | 
| 53 | 
            +
              prerelease: false
         | 
| 54 | 
            +
              name: net-http-digest_auth
         | 
| 55 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 42 56 | 
             
                requirements:
         | 
| 43 57 | 
             
                - - ! '>='
         | 
| 44 58 | 
             
                  - !ruby/object:Gem::Version
         | 
| 45 59 | 
             
                    version: '0'
         | 
| 60 | 
            +
                none: false
         | 
| 61 | 
            +
              type: :runtime
         | 
| 46 62 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 63 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 64 | 
            +
                requirements:
         | 
| 65 | 
            +
                - - ~>
         | 
| 66 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 67 | 
            +
                    version: 3.4.0
         | 
| 68 | 
            +
                none: false
         | 
| 69 | 
            +
              prerelease: false
         | 
| 47 70 | 
             
              name: minitest
         | 
| 48 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 49 | 
            -
                none: false
         | 
| 50 72 | 
             
                requirements:
         | 
| 51 | 
            -
                - -  | 
| 73 | 
            +
                - - ~>
         | 
| 52 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 53 | 
            -
                    version:  | 
| 75 | 
            +
                    version: 3.4.0
         | 
| 76 | 
            +
                none: false
         | 
| 54 77 | 
             
              type: :development
         | 
| 55 | 
            -
             | 
| 78 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 79 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 | 
            -
                none: false
         | 
| 58 80 | 
             
                requirements:
         | 
| 59 81 | 
             
                - - ! '>='
         | 
| 60 82 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 83 | 
             
                    version: '0'
         | 
| 62 | 
            -
             | 
| 84 | 
            +
                none: false
         | 
| 85 | 
            +
              prerelease: false
         | 
| 63 86 | 
             
              name: turn
         | 
| 64 87 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 65 | 
            -
                none: false
         | 
| 66 88 | 
             
                requirements:
         | 
| 67 89 | 
             
                - - ! '>='
         | 
| 68 90 | 
             
                  - !ruby/object:Gem::Version
         | 
| 69 91 | 
             
                    version: '0'
         | 
| 92 | 
            +
                none: false
         | 
| 70 93 | 
             
              type: :development
         | 
| 71 | 
            -
             | 
| 94 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 72 95 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 73 | 
            -
                none: false
         | 
| 74 96 | 
             
                requirements:
         | 
| 75 97 | 
             
                - - ! '>='
         | 
| 76 98 | 
             
                  - !ruby/object:Gem::Version
         | 
| 77 99 | 
             
                    version: '0'
         | 
| 78 | 
            -
             | 
| 100 | 
            +
                none: false
         | 
| 101 | 
            +
              prerelease: false
         | 
| 79 102 | 
             
              name: webmock
         | 
| 80 103 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 81 | 
            -
                none: false
         | 
| 82 104 | 
             
                requirements:
         | 
| 83 105 | 
             
                - - ! '>='
         | 
| 84 106 | 
             
                  - !ruby/object:Gem::Version
         | 
| 85 107 | 
             
                    version: '0'
         | 
| 108 | 
            +
                none: false
         | 
| 86 109 | 
             
              type: :development
         | 
| 87 | 
            -
             | 
| 110 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 88 111 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 89 | 
            -
                none: false
         | 
| 90 112 | 
             
                requirements:
         | 
| 91 113 | 
             
                - - ! '>='
         | 
| 92 114 | 
             
                  - !ruby/object:Gem::Version
         | 
| 93 115 | 
             
                    version: '0'
         | 
| 94 | 
            -
             | 
| 116 | 
            +
                none: false
         | 
| 117 | 
            +
              prerelease: false
         | 
| 95 118 | 
             
              name: mocha
         | 
| 96 119 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 97 | 
            -
                none: false
         | 
| 98 120 | 
             
                requirements:
         | 
| 99 121 | 
             
                - - ! '>='
         | 
| 100 122 | 
             
                  - !ruby/object:Gem::Version
         | 
| 101 123 | 
             
                    version: '0'
         | 
| 124 | 
            +
                none: false
         | 
| 102 125 | 
             
              type: :development
         | 
| 103 | 
            -
             | 
| 126 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 104 127 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 128 | 
            +
                requirements:
         | 
| 129 | 
            +
                - - ! '>='
         | 
| 130 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 131 | 
            +
                    version: '0'
         | 
| 105 132 | 
             
                none: false
         | 
| 133 | 
            +
              prerelease: false
         | 
| 134 | 
            +
              name: rack-test
         | 
| 135 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 106 136 | 
             
                requirements:
         | 
| 107 137 | 
             
                - - ! '>='
         | 
| 108 138 | 
             
                  - !ruby/object:Gem::Version
         | 
| 109 139 | 
             
                    version: '0'
         | 
| 140 | 
            +
                none: false
         | 
| 141 | 
            +
              type: :development
         | 
| 110 142 | 
             
            description: HyperClient is a Ruby Hypermedia API client.
         | 
| 111 143 | 
             
            email:
         | 
| 112 144 | 
             
            - oriol.gual@gmail.com
         | 
| @@ -156,26 +188,26 @@ rdoc_options: [] | |
| 156 188 | 
             
            require_paths:
         | 
| 157 189 | 
             
            - lib
         | 
| 158 190 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 159 | 
            -
              none: false
         | 
| 160 191 | 
             
              requirements:
         | 
| 161 192 | 
             
              - - ! '>='
         | 
| 162 193 | 
             
                - !ruby/object:Gem::Version
         | 
| 163 194 | 
             
                  version: '0'
         | 
| 164 195 | 
             
                  segments:
         | 
| 165 196 | 
             
                  - 0
         | 
| 166 | 
            -
                  hash: - | 
| 167 | 
            -
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 197 | 
            +
                  hash: -3503842849478118704
         | 
| 168 198 | 
             
              none: false
         | 
| 199 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 169 200 | 
             
              requirements:
         | 
| 170 201 | 
             
              - - ! '>='
         | 
| 171 202 | 
             
                - !ruby/object:Gem::Version
         | 
| 172 203 | 
             
                  version: '0'
         | 
| 173 204 | 
             
                  segments:
         | 
| 174 205 | 
             
                  - 0
         | 
| 175 | 
            -
                  hash: - | 
| 206 | 
            +
                  hash: -3503842849478118704
         | 
| 207 | 
            +
              none: false
         | 
| 176 208 | 
             
            requirements: []
         | 
| 177 209 | 
             
            rubyforge_project: 
         | 
| 178 | 
            -
            rubygems_version: 1.8. | 
| 210 | 
            +
            rubygems_version: 1.8.24
         | 
| 179 211 | 
             
            signing_key: 
         | 
| 180 212 | 
             
            specification_version: 3
         | 
| 181 213 | 
             
            summary: ''
         |