ezclient 0.10.0 → 0.11.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a33b8998ea8d1bc9064fe5756119e298e054e27fc521cac42a0d9260e59b924
4
- data.tar.gz: b18b2ea63f170e11753e516615834775facfac462084c689f3ec1d7d3467da5c
3
+ metadata.gz: 6d9f110bfae1ffb37a3ed9bdeb162487717a243178175822b9e0152df2533288
4
+ data.tar.gz: 7f1380b423969a1101648fa5017f3e70c3ffbff774156068337fb839cab5854d
5
5
  SHA512:
6
- metadata.gz: 8357a3071ed41858d52f27639fb6c72c90915d5fe46a10da91ec59bd711ef577f8b2e2970d2e6d364276321c1502f6b768ad557bd8a2f1ff52e283ce323e9c6d
7
- data.tar.gz: dd8116c2553ee074b89b9a18d3595899f3e54a4adaf8e65dec8384a011a2b8de3a783277eb066dd5ccdb5059786e2cfaa580c9269374006f8b6fe0b79f2fbde4
6
+ metadata.gz: d2bf1f8d239320d4bc4b8a57b0d23208ec3700922eb4b2fe00cac386efb69ecc0961da46695697f2b9fc3aaa642f3f8fe47992f9cfa545a4aa971db4253b69d4
7
+ data.tar.gz: 49fb747c452aff9168492439f94324f911e8389ead521037f54e9480971394aeeca8ef90867542e8ee448ec6289c896be2bcd22b2a33ab0f332916b8eb795d8c
data/.travis.yml CHANGED
@@ -3,9 +3,9 @@ language: ruby
3
3
  sudo: false
4
4
 
5
5
  rvm:
6
- - 2.3.5
7
- - 2.4.2
8
- - 2.5.0
6
+ - 2.3
7
+ - 2.4
8
+ - 2.5
9
9
  - ruby-head
10
10
 
11
11
  before_install: gem install bundler
@@ -18,10 +18,9 @@ matrix:
18
18
  fast_finish: true
19
19
  # Only run RuboCop on the latest Ruby
20
20
  include:
21
- - rvm: 2.5.0
21
+ - rvm: 2.5
22
22
  env: SUITE="rubocop"
23
23
  allow_failures:
24
24
  - rvm: ruby-head
25
- - rvm: jruby-head
26
25
 
27
26
  cache: bundler
data/README.md CHANGED
@@ -1,45 +1,124 @@
1
- # EzClient
2
-
1
+ # EzClient   [![Gem Version](https://badge.fury.io/rb/ezclient.svg)](https://badge.fury.io/rb/ezclient) [![Build Status](https://travis-ci.org/umbrellio/ezclient.svg?branch=master)](https://travis-ci.org/umbrellio/ezclient) [![Coverage Status](https://coveralls.io/repos/github/umbrellio/ezclient/badge.svg?branch=master)](https://coveralls.io/github/umbrellio/ezclient?branch=master)
3
2
  EzClient is [HTTP gem](https://github.com/httprb/http) wrapper for easy persistent connections and more.
4
3
 
5
4
  ## Installation
6
-
7
- Add this line to your application's Gemfile:
5
+ Add this lines to your application's Gemfile:
8
6
 
9
7
  ```ruby
10
8
  gem "ezclient"
11
- gem "http", github: "httprb/http"
9
+ gem "http", github: "httprb/http" # version 3 is not supported for now
12
10
  ```
13
11
 
14
12
  ## Usage
15
13
  ```ruby
16
- client = EzClient.new(client_options)
17
- client.perform!(:get, "https://example.com", params: { a: 1 })
14
+ url = "http://example.com"
15
+
16
+ client_options = { timeout: 10 }
17
+ client = EzClient.new(client_options) # => EzClient::Client object
18
+
19
+ request_options = { params: { a: 1 } }
20
+ request = client.request(:get, url, request_options) # => EzClient::Request object
21
+
18
22
  # Performs a GET request to https://example.com/?a=1
23
+ response = request.perform # => EzClient::Response object
24
+
25
+ # Same request but will raise EzClient::ResponseStatusError in case of 4xx or 5xx response code
26
+ response = request.perform!
27
+
28
+ # Alternatively, you can just do:
29
+ response = client.perform!(:get, url, request_options) # => EzClient::Response object
19
30
  ```
20
31
 
21
32
  Valid client options are:
22
33
  - `api_auth` – arguments for `ApiAuth.sign!`
23
- - `keep_alive` – timeout for persitent connection
24
- - `max_retries` – max number of retries in case of errors
34
+ - `basic_auth` – arguments for basic authentication (either a hash with `:user` and `:pass` keys or a two-element array)
35
+ - `headers` – a hash of headers for requests
36
+ - `keep_alive` – timeout for persistent connection in seconds
37
+ - `max_retries` – maximum number of retries in case `retry_exceptions` option is provided
25
38
  - `on_complete` – callback called on request completion
26
39
  - `on_error` – callback called on request exception
27
- - `retry_exceptions` – exception classes to retry
28
- - `ssl_context` – ssl context for requests
29
- - `timeout` – timeout for requests
40
+ - `on_retry` – callback called on request retry
41
+ - `retry_exceptions` – an array of exception classes to retry
42
+ - `ssl_context` – ssl context for requests (an `OpenSSL::SSL::SSLContext` instance)
43
+ - `timeout` – timeout for requests in seconds
44
+
45
+ All these options are passed to each request made by this client but can be overriden on per-request basis.
30
46
 
31
- Extra request options are:
47
+ Extra per-request only options are:
48
+ - `body` – raw request body
49
+ - `form` – hash for urlencoded body
50
+ - `json` – data for json (also adds `application/json` content-type header)
51
+ - `metadata` – metadata for request (passed in callbacks)
32
52
  - `params` – becomes `query` for GET and `form` for other requests
33
53
  - `query` – hash for uri query
34
- - `form` – hash for urlencoded body
35
- - `body` – raw body
36
- - `json` – data for json
37
- - `headers` – headers for request
38
54
 
39
- ## Contributing
55
+ ## Persistent connections
56
+ If you provide `keep_alive` option to the client or particular request, the connection will be stored in the client and then
57
+ reused for all following requests to the same origin within specified amount of time.
58
+
59
+ Note that, as of now, EzClient will
60
+ automatically retry the request on any `HTTP::ConnectionError` exception in this case which may possibly result in two requests
61
+ received by a server (see https://github.com/httprb/http/issues/459).
62
+
63
+ ## Callbacks and retrying
64
+ You can provide `on_complete`, `on_error` and `on_retry` callbacks like this:
65
+
66
+ ```ruby
67
+ on_complete = -> (request, response, metadata) { ... }
68
+ on_error = -> (request, error, metadata) { ... }
69
+ on_retry = -> (request, error, metadata) { ... }
40
70
 
71
+ client = EzClient.new(
72
+ on_complete: on_complete,
73
+ on_error: on_error,
74
+ on_retry: on_retry,
75
+ retry_exceptions: [StandardError],
76
+ max_retries: 2,
77
+ )
78
+
79
+ response = client.perform!(:get, url, metadata: :hello)
80
+ ```
81
+
82
+ The arguments passed into callbacks are:
83
+ - `request` – an `EzClient::Request` instance
84
+ - `response` – an `EzClient::Response` instance
85
+ - `error` – an exception instance
86
+ - `metadata` - the `metadata` option passed into a request
87
+
88
+ ## Request object
89
+ ```ruby
90
+ request = client.request(:post, "http://example.com", json: { a: 1 }, timeout: 15)
91
+
92
+ request.verb # => "POST"
93
+ request.url # => "http://example.com"
94
+ request.body # => '{"a": 1}'
95
+ request.headers # => { "Content-Type" => "application/json; charset=UTF-8", ... }
96
+ ```
97
+
98
+ ## Response object
99
+ ```ruby
100
+ response = request.perform(...)
101
+
102
+ response.body # => String
103
+ response.headers # => Hash
104
+ response.code # => Integer
105
+
106
+ response.ok? # Returns if request was 2xx status
107
+ response.redirect? # Returns if request was 3xx status
108
+ response.client_error? # Returns if request was 4xx status
109
+ response.server_error? # Returns if request was 5xx status
110
+ response.error? # Returns if request was 4xx or 5xx status
111
+ ```
112
+
113
+ ## Contributing
41
114
  Bug reports and pull requests are welcome on GitHub at https://github.com/umbrellio/ezclient.
42
115
 
43
116
  ## License
117
+ Released under MIT License.
118
+
119
+ ## Authors
120
+ Created by Yuri Smirnov.
44
121
 
45
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
122
+ <a href="https://github.com/umbrellio/">
123
+ <img style="float: left;" src="https://umbrellio.github.io/Umbrellio/supported_by_umbrellio.svg" alt="Supported by Umbrellio" width="439" height="72">
124
+ </a>
@@ -2,8 +2,10 @@
2
2
 
3
3
  module EzClient::CheckOptions
4
4
  def self.call(options, allowed_keys)
5
- if (options.keys - allowed_keys).any?
6
- raise ArgumentError, "Unrecognized options: #{options.keys.map(&:inspect).join(", ")}"
5
+ unknown_keys = options.keys - allowed_keys
6
+
7
+ if unknown_keys.any?
8
+ raise ArgumentError, "Unrecognized options: #{unknown_keys.map(&:inspect).join(", ")}"
7
9
  end
8
10
 
9
11
  options
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EzClient
4
- VERSION = "0.10.0"
4
+ VERSION = "0.11.0"
5
5
  end
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: 0.10.0
4
+ version: 0.11.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: 2018-02-21 00:00:00.000000000 Z
11
+ date: 2018-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http