ezclient 1.2.0 → 1.3.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +9 -1
- data/.travis.yml +6 -14
- data/LICENSE.txt +1 -1
- data/README.md +31 -1
- data/bin/console +8 -0
- data/ezclient.gemspec +11 -9
- data/lib/ezclient/client.rb +1 -0
- data/lib/ezclient/request.rb +19 -4
- data/lib/ezclient/version.rb +1 -1
- metadata +6 -5
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 9bbefbed2ebd4c6b412246062c09bf178b39b10b54631963e559fbb6d6150023
         | 
| 4 | 
            +
              data.tar.gz: 586fa332053ce325be892e05fb7eabfc7daecaf9c60a4aeae607d0fbb646366c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d4e2142b3f825390f39dde75b2145da1485ba1211e2202639a0d88d5785373bbbf97e2dd4d8c12c0a4c7d4e0f57c927eec12300152ea757fd11ae6d33c019812
         | 
| 7 | 
            +
              data.tar.gz: bc99bcb243ea9c4c70e4916e8252fac60cdefbdbd136193a6b6db0611b5bfbb6609233ba3d5c0fa21f6775ada8354e07aa6e4c0bff488eec9516bbeb14a62e3e
         | 
    
        data/.rubocop.yml
    CHANGED
    
    | @@ -3,7 +3,15 @@ inherit_gem: | |
| 3 3 |  | 
| 4 4 | 
             
            AllCops:
         | 
| 5 5 | 
             
              DisplayCopNames: true
         | 
| 6 | 
            -
              TargetRubyVersion: 2. | 
| 6 | 
            +
              TargetRubyVersion: 2.3
         | 
| 7 | 
            +
              Include:
         | 
| 8 | 
            +
                - bin/console
         | 
| 9 | 
            +
                - Gemfile
         | 
| 10 | 
            +
                - ezclient.gemspec
         | 
| 11 | 
            +
                - Rakefile
         | 
| 12 | 
            +
                - lib/**/*
         | 
| 13 | 
            +
                - spec/**/*
         | 
| 14 | 
            +
                - gemfile/**/*
         | 
| 7 15 | 
             
              Exclude:
         | 
| 8 16 | 
             
                - vendor/**/*
         | 
| 9 17 | 
             
                - gemfiles/**/*
         | 
    
        data/.travis.yml
    CHANGED
    
    | @@ -1,26 +1,18 @@ | |
| 1 1 | 
             
            language: ruby
         | 
| 2 | 
            -
             | 
| 3 2 | 
             
            sudo: false
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            rvm:
         | 
| 6 | 
            -
              - 2.3
         | 
| 7 | 
            -
              - 2.4
         | 
| 8 | 
            -
              - 2.5
         | 
| 9 | 
            -
              - ruby-head
         | 
| 10 | 
            -
             | 
| 3 | 
            +
            cache: bundler
         | 
| 11 4 | 
             
            before_install: gem install bundler
         | 
| 12 | 
            -
             | 
| 13 5 | 
             
            env: SUITE="rspec"
         | 
| 14 | 
            -
             | 
| 15 6 | 
             
            script: bundle exec $SUITE
         | 
| 16 | 
            -
             | 
| 17 7 | 
             
            matrix:
         | 
| 18 8 | 
             
              fast_finish: true
         | 
| 19 | 
            -
              # Only run RuboCop on the latest Ruby
         | 
| 20 9 | 
             
              include:
         | 
| 10 | 
            +
                - rvm: 2.3
         | 
| 11 | 
            +
                - rvm: 2.4
         | 
| 21 12 | 
             
                - rvm: 2.5
         | 
| 13 | 
            +
                - rvm: 2.6
         | 
| 14 | 
            +
                - rvm: ruby-head
         | 
| 15 | 
            +
                - rvm: 2.6
         | 
| 22 16 | 
             
                  env: SUITE="rubocop"
         | 
| 23 17 | 
             
              allow_failures:
         | 
| 24 18 | 
             
                - rvm: ruby-head
         | 
| 25 | 
            -
             | 
| 26 | 
            -
            cache: bundler
         | 
    
        data/LICENSE.txt
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,7 +1,9 @@ | |
| 1 1 | 
             
            # EzClient   [](https://badge.fury.io/rb/ezclient) [](https://travis-ci.org/umbrellio/ezclient) [](https://coveralls.io/github/umbrellio/ezclient?branch=master)
         | 
| 2 | 
            +
             | 
| 2 3 | 
             
            EzClient is [HTTP gem](https://github.com/httprb/http) wrapper for easy persistent connections and more.
         | 
| 3 4 |  | 
| 4 5 | 
             
            ## Installation
         | 
| 6 | 
            +
             | 
| 5 7 | 
             
            Add this line to your application's Gemfile:
         | 
| 6 8 |  | 
| 7 9 | 
             
            ```ruby
         | 
| @@ -9,6 +11,7 @@ gem "ezclient" | |
| 9 11 | 
             
            ```
         | 
| 10 12 |  | 
| 11 13 | 
             
            ## Usage
         | 
| 14 | 
            +
             | 
| 12 15 | 
             
            ```ruby
         | 
| 13 16 | 
             
            url = "http://example.com"
         | 
| 14 17 |  | 
| @@ -29,6 +32,7 @@ response = client.perform!(:get, url, request_options) # => EzClient::Response o | |
| 29 32 | 
             
            ```
         | 
| 30 33 |  | 
| 31 34 | 
             
            Valid client options are:
         | 
| 35 | 
            +
             | 
| 32 36 | 
             
            - `api_auth` – arguments for `ApiAuth.sign!` (see https://github.com/mgomes/api_auth)
         | 
| 33 37 | 
             
            - `basic_auth` – arguments for basic authentication (either a hash with `:user` and `:pass` keys or a two-element array)
         | 
| 34 38 | 
             
            - `headers` – a hash of headers for requests
         | 
| @@ -40,10 +44,12 @@ Valid client options are: | |
| 40 44 | 
             
            - `retry_exceptions` – an array of exception classes to retry
         | 
| 41 45 | 
             
            - `ssl_context` – ssl context for requests (an `OpenSSL::SSL::SSLContext` instance)
         | 
| 42 46 | 
             
            - `timeout` – timeout for requests in seconds
         | 
| 47 | 
            +
            - `follow` - enable following redirects (`true` or hash with options – e.g. `{ max_hops: 1, strict: false}`)
         | 
| 43 48 |  | 
| 44 49 | 
             
            All these options are passed to each request made by this client but can be overriden on per-request basis.
         | 
| 45 50 |  | 
| 46 51 | 
             
            Extra per-request only options are:
         | 
| 52 | 
            +
             | 
| 47 53 | 
             
            - `body` – raw request body
         | 
| 48 54 | 
             
            - `form` – hash for urlencoded body
         | 
| 49 55 | 
             
            - `json` – data for json (also adds `application/json` content-type header)
         | 
| @@ -52,14 +58,32 @@ Extra per-request only options are: | |
| 52 58 | 
             
            - `query` – hash for uri query
         | 
| 53 59 |  | 
| 54 60 | 
             
            ## Persistent connections
         | 
| 61 | 
            +
             | 
| 55 62 | 
             
            If you provide `keep_alive` option to the client or particular request, the connection will be stored in the client and then
         | 
| 56 63 | 
             
            reused for all following requests to the same origin within specified amount of time.
         | 
| 57 64 |  | 
| 58 | 
            -
            Note that | 
| 65 | 
            +
            Note that if you are using persistent connections, you shouldn't store your client in a variable that is accessable by different threads. See the example:
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            ```ruby
         | 
| 68 | 
            +
            module MyApp
         | 
| 69 | 
            +
              # Bad: multiple threads will use the same socket
         | 
| 70 | 
            +
              def self.bad_client
         | 
| 71 | 
            +
                @ezclient ||= EzClient.new(keep_alive: 100)
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
              # Good: each thread has it's own socket
         | 
| 75 | 
            +
              def self.good_client
         | 
| 76 | 
            +
                Thread.current[:ezclient] ||= EzClient.new(keep_alive: 100)
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
            end
         | 
| 79 | 
            +
            ```
         | 
| 80 | 
            +
             | 
| 81 | 
            +
            Alose note that, as of now, EzClient will
         | 
| 59 82 | 
             
            automatically retry the request on any `HTTP::ConnectionError` exception in this case which may possibly result in two requests
         | 
| 60 83 | 
             
            received by a server (see https://github.com/httprb/http/issues/459).
         | 
| 61 84 |  | 
| 62 85 | 
             
            ## Callbacks and retrying
         | 
| 86 | 
            +
             | 
| 63 87 | 
             
            You can provide `on_complete`, `on_error` and `on_retry` callbacks like this:
         | 
| 64 88 |  | 
| 65 89 | 
             
            ```ruby
         | 
| @@ -79,12 +103,14 @@ response = client.perform!(:get, url, metadata: :hello) | |
| 79 103 | 
             
            ```
         | 
| 80 104 |  | 
| 81 105 | 
             
            The arguments passed into callbacks are:
         | 
| 106 | 
            +
             | 
| 82 107 | 
             
            - `request` – an `EzClient::Request` instance
         | 
| 83 108 | 
             
            - `response` – an `EzClient::Response` instance
         | 
| 84 109 | 
             
            - `error` – an exception instance
         | 
| 85 110 | 
             
            - `metadata` - the `metadata` option passed into a request
         | 
| 86 111 |  | 
| 87 112 | 
             
            ## Request object
         | 
| 113 | 
            +
             | 
| 88 114 | 
             
            ```ruby
         | 
| 89 115 | 
             
            request = client.request(:post, "http://example.com", json: { a: 1 }, timeout: 15)
         | 
| 90 116 |  | 
| @@ -95,6 +121,7 @@ request.headers # => { "Content-Type" => "application/json; charset=UTF-8", ... | |
| 95 121 | 
             
            ```
         | 
| 96 122 |  | 
| 97 123 | 
             
            ## Response object
         | 
| 124 | 
            +
             | 
| 98 125 | 
             
            ```ruby
         | 
| 99 126 | 
             
            response = request.perform(...)
         | 
| 100 127 |  | 
| @@ -110,12 +137,15 @@ response.error? # Returns if request was 4xx or 5xx status | |
| 110 137 | 
             
            ```
         | 
| 111 138 |  | 
| 112 139 | 
             
            ## Contributing
         | 
| 140 | 
            +
             | 
| 113 141 | 
             
            Bug reports and pull requests are welcome on GitHub at https://github.com/umbrellio/ezclient.
         | 
| 114 142 |  | 
| 115 143 | 
             
            ## License
         | 
| 144 | 
            +
             | 
| 116 145 | 
             
            Released under MIT License.
         | 
| 117 146 |  | 
| 118 147 | 
             
            ## Authors
         | 
| 148 | 
            +
             | 
| 119 149 | 
             
            Created by Yuri Smirnov.
         | 
| 120 150 |  | 
| 121 151 | 
             
            <a href="https://github.com/umbrellio/">
         | 
    
        data/bin/console
    ADDED
    
    
    
        data/ezclient.gemspec
    CHANGED
    
    | @@ -1,20 +1,22 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            lib = File.expand_path(" | 
| 3 | 
            +
            lib = File.expand_path("lib", __dir__)
         | 
| 4 4 | 
             
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 5 5 | 
             
            require "ezclient/version"
         | 
| 6 6 |  | 
| 7 7 | 
             
            Gem::Specification.new do |spec|
         | 
| 8 | 
            -
              spec. | 
| 9 | 
            -
              spec.version       = EzClient::VERSION
         | 
| 10 | 
            -
              spec.authors       = ["Yuri Smirnov"]
         | 
| 11 | 
            -
              spec.email         = ["tycooon@yandex.ru"]
         | 
| 8 | 
            +
              spec.required_ruby_version = ">= 2.3.8"
         | 
| 12 9 |  | 
| 13 | 
            -
              spec. | 
| 14 | 
            -
              spec. | 
| 15 | 
            -
              spec. | 
| 10 | 
            +
              spec.name    = "ezclient"
         | 
| 11 | 
            +
              spec.version = EzClient::VERSION
         | 
| 12 | 
            +
              spec.authors = ["Yuri Smirnov"]
         | 
| 13 | 
            +
              spec.email   = ["tycooon@yandex.ru", "oss@umbrellio.biz"]
         | 
| 16 14 |  | 
| 17 | 
            -
              spec. | 
| 15 | 
            +
              spec.summary  = "An HTTP gem wrapper for easy persistent connections and more."
         | 
| 16 | 
            +
              spec.homepage = "https://github.com/umbrellio/ezclient"
         | 
| 17 | 
            +
              spec.license  = "MIT"
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^spec/}) }
         | 
| 18 20 | 
             
              spec.require_paths = ["lib"]
         | 
| 19 21 |  | 
| 20 22 | 
             
              spec.add_runtime_dependency "http", ">= 4"
         | 
    
        data/lib/ezclient/client.rb
    CHANGED
    
    
    
        data/lib/ezclient/request.rb
    CHANGED
    
    | @@ -101,13 +101,23 @@ class EzClient::Request | |
| 101 101 | 
             
              end
         | 
| 102 102 |  | 
| 103 103 | 
             
              def perform_request
         | 
| 104 | 
            +
                with_retry do
         | 
| 105 | 
            +
                  # Use original client so that connection can be reused
         | 
| 106 | 
            +
                  # client.perform(http_request, http_options)
         | 
| 107 | 
            +
                  res = client.perform(http_request, http_options)
         | 
| 108 | 
            +
                  return res unless follow
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                  HTTP::Redirector.new(follow).perform(http_request, res) do |request|
         | 
| 111 | 
            +
                    client.perform(request, http_options)
         | 
| 112 | 
            +
                  end
         | 
| 113 | 
            +
                end
         | 
| 114 | 
            +
              end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
              def with_retry(&block)
         | 
| 104 117 | 
             
                retries = 0
         | 
| 105 118 |  | 
| 106 119 | 
             
                begin
         | 
| 107 | 
            -
                  retry_on_connection_error | 
| 108 | 
            -
                    # Use original client so that connection can be reused
         | 
| 109 | 
            -
                    client.perform(http_request, http_options)
         | 
| 110 | 
            -
                  end
         | 
| 120 | 
            +
                  retry_on_connection_error(&block)
         | 
| 111 121 | 
             
                rescue *retried_exceptions => error
         | 
| 112 122 | 
             
                  if retries < max_retries.to_i
         | 
| 113 123 | 
             
                    retries += 1
         | 
| @@ -152,6 +162,11 @@ class EzClient::Request | |
| 152 162 | 
             
                options[:max_retries] || 1
         | 
| 153 163 | 
             
              end
         | 
| 154 164 |  | 
| 165 | 
            +
              def follow
         | 
| 166 | 
            +
                return unless options[:follow]
         | 
| 167 | 
            +
                options[:follow].is_a?(Hash) ? options[:follow] : {}
         | 
| 168 | 
            +
              end
         | 
| 169 | 
            +
             | 
| 155 170 | 
             
              def prepare_headers(headers)
         | 
| 156 171 | 
             
                headers = HTTP::Headers.coerce(headers)
         | 
| 157 172 | 
             
                headers[:user_agent] ||= "ezclient/#{EzClient::VERSION}"
         | 
    
        data/lib/ezclient/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ezclient
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Yuri Smirnov
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2019-06-26 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: http
         | 
| @@ -139,6 +139,7 @@ dependencies: | |
| 139 139 | 
             
            description: 
         | 
| 140 140 | 
             
            email:
         | 
| 141 141 | 
             
            - tycooon@yandex.ru
         | 
| 142 | 
            +
            - oss@umbrellio.biz
         | 
| 142 143 | 
             
            executables: []
         | 
| 143 144 | 
             
            extensions: []
         | 
| 144 145 | 
             
            extra_rdoc_files: []
         | 
| @@ -151,6 +152,7 @@ files: | |
| 151 152 | 
             
            - LICENSE.txt
         | 
| 152 153 | 
             
            - README.md
         | 
| 153 154 | 
             
            - Rakefile
         | 
| 155 | 
            +
            - bin/console
         | 
| 154 156 | 
             
            - ezclient.gemspec
         | 
| 155 157 | 
             
            - gemfiles/http3.gemfile
         | 
| 156 158 | 
             
            - lib/ezclient.rb
         | 
| @@ -172,15 +174,14 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 172 174 | 
             
              requirements:
         | 
| 173 175 | 
             
              - - ">="
         | 
| 174 176 | 
             
                - !ruby/object:Gem::Version
         | 
| 175 | 
            -
                  version:  | 
| 177 | 
            +
                  version: 2.3.8
         | 
| 176 178 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 177 179 | 
             
              requirements:
         | 
| 178 180 | 
             
              - - ">="
         | 
| 179 181 | 
             
                - !ruby/object:Gem::Version
         | 
| 180 182 | 
             
                  version: '0'
         | 
| 181 183 | 
             
            requirements: []
         | 
| 182 | 
            -
             | 
| 183 | 
            -
            rubygems_version: 2.7.6
         | 
| 184 | 
            +
            rubygems_version: 3.0.3
         | 
| 184 185 | 
             
            signing_key: 
         | 
| 185 186 | 
             
            specification_version: 4
         | 
| 186 187 | 
             
            summary: An HTTP gem wrapper for easy persistent connections and more.
         |