chimera_http_client 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 809d90aabfcf20ff5823e4adfba61a39c377e334ad42821c6f8f89a09decf4c8
4
- data.tar.gz: 1c809df7392bd1a353b34641ae810c2f884fc72873ad917792b37455f77303bc
3
+ metadata.gz: f53a50a92fd82daebeae2cad2156dd5a0eef366d4aec27d2ecb13fffe8f771f3
4
+ data.tar.gz: ef515b583ba8cbbd76286e626dfbe34cf06662710c04e441f9d4e926577962cb
5
5
  SHA512:
6
- metadata.gz: 7e4cc3b3ed6e228f8fd1a2efb31bbcc0223e53f1f66839b669dccf6dd0f44b35f1a8e6431ed9a3f831e12f088b012d6f7abd275e820c2ef4096f4d6c7ea74c8b
7
- data.tar.gz: 4fffd616c32fb55a098c5044cc7941517eb5c847420ee6d84010750dbf0f56a579a903f0f4ba55afe2f1c57dd8a9f0fd8d4d7706678da2935944981d52536287
6
+ metadata.gz: fa715d6646f2f924a67bd0049598156eaacee8b60a81d28858cddf86f8a7e42c2ae50097fd7be824d8d7ff91fd0bc1569713cb014b7e3a1859a634bf9c3d4568
7
+ data.tar.gz: '069987a5e71950ba299b313a93f9cb6533adfe275bbda057a076614aeb8d053fc1e574a7db588d75dfc36a7611d10260c6b0ebde9fac274474e5ef85603fe356'
data/README.markdown CHANGED
@@ -1,10 +1,10 @@
1
1
  # ChimeraHttpClient
2
2
 
3
- When starting to split monolithic apps into smaller services, you need an easy way to access the remote data from the other apps. This chimera_http_client gem should serve as a unified way to access endpoints from other apps. And what works for the internal communication between your own apps, will also work to work with external APIs that do not offer a client for simplified access.
3
+ When starting to split monolithic apps into smaller services, you need an easy way to access the remote data from the other apps. This chimera_http_client gem should serve as a unified way to access endpoints from other apps. And what works for the internal communication between your own apps, will also work for external APIs that do not offer a client for simplified access.
4
4
 
5
5
  ## Dependencies
6
6
 
7
- The `chimera_http_client` gem is using the _libcurl_ wrapper [**Typhoeus**](https://typhoeus.github.io/). This allows for fast requests, for caching, and for queueing requests to run them in parallel (queueing and parallel requests are not implemented in the gem yet).
7
+ The `chimera_http_client` gem is using the _libcurl_ wrapper [**Typhoeus**](https://typhoeus.github.io/). This allows for fast requests, for caching, and for queueing requests to run them in parallel (not all features are implemented in the gem yet).
8
8
 
9
9
  It does not have any other runtime dependencies.
10
10
 
@@ -25,7 +25,8 @@ response = connection.get!(endpoint, params: params)
25
25
  `base_url: 'http://localhost:3000/v1'`.
26
26
 
27
27
  On this connection object, you can call methods like `#get!` or `#post!` with an endpoint and an options hash as parameters, e.g.
28
- `connection.get!("users/#{id}")` or
28
+ `connection.get!("users/#{id}")`
29
+ or
29
30
  `connection.get(['users', id], options: { headers: { ' Accept-Charset' => 'utf-8' })`
30
31
 
31
32
  Please take note that _the endpoint can be given as a String, a Symbol, or as an Array._
@@ -33,6 +34,8 @@ While they do no harm, there is _no need to pass leading or trailing `/` in endp
33
34
  When passing the endpoint as an Array, _it's elements are converted to Strings and concatenated with `/`._
34
35
  On each request _the http-headers can be amended or overwritten_ completely or partially.
35
36
 
37
+ ### Basic auth
38
+
36
39
  In case you need to use an API that is protected by **basic_auth** just pass the credentials in the options hash:
37
40
  `options: { username: 'admin', password: 'secret' }`
38
41
 
@@ -46,6 +49,12 @@ If you want to use a different timeout, you can pass the key `timeout` when init
46
49
 
47
50
  By default no logging is happening. If you need request logging, you can pass your custom Logger to the key `logger` when initializing the `Connection`. It will write to `logger.info` when starting and when completing a request.
48
51
 
52
+ ### Caching responses
53
+
54
+ To cache all the reponses of a connection, just pass the optional parameter `cache` to its initializer. You can also overwrite the connection's cache configuration by passing the parameter `cache` to any `get` call.
55
+
56
+ Read more about how to use it: https://github.com/typhoeus/typhoeus#caching
57
+
49
58
  ### Example usage
50
59
 
51
60
  To use the gem, it is recommended to write wrapper classes for the endpoints used. While it would be possible to use the `get, get!, post, post!, put, put!, patch, patch!, delete, delete!` or also the bare `request.run` methods directly, wrapper classes will unify the usage pattern and be very convenient to use by veterans and newcomers to the team. A wrapper class could look like this:
@@ -58,6 +67,8 @@ class Users
58
67
  @base_url = base_url
59
68
  end
60
69
 
70
+ # GET one user by id and instantiate a User
71
+ #
61
72
  def find(id:)
62
73
  response = connection.get!(['users', id])
63
74
 
@@ -68,6 +79,8 @@ class Users
68
79
  # handle / log / raise error
69
80
  end
70
81
 
82
+ # GET a list of users and instantiate an Array of Users
83
+ #
71
84
  def all(filter: nil, page: nil)
72
85
  params = {}
73
86
  params[:filter] = filter
@@ -82,6 +95,8 @@ class Users
82
95
  # handle / log / raise error
83
96
  end
84
97
 
98
+ # CREATE a new user by sending attributes in a JSON body and instantiate the new User
99
+ #
85
100
  def create(body:)
86
101
  response = connection.post!('users', body: body.to_json) # body.to_json (!!)
87
102
 
@@ -120,7 +135,9 @@ Usually it does not have to be used directly. It is the class that executes the
120
135
 
121
136
  The `body` which it receives from the `Connection` class has to be in the in the (serialized) form in which the endpoint expects it. Usually this means you have to pass a JSON string to the `body` (it will **not** be serialized automatically).
122
137
 
123
- It will be expanded by a `.queue` method, that will queue (sic) calls and run them in parallel and not run every call directly, like the `.run` method does.
138
+ > Upcoming feature:
139
+ >
140
+ > It will be expanded by a `.queue` method, that will queue (sic) calls and run them in parallel and not run every call directly, like the `.run` method does.
124
141
 
125
142
  ## The Response class
126
143
 
@@ -167,7 +184,7 @@ The error classes and their corresponding http error codes:
167
184
 
168
185
  Add this line to your application's Gemfile:
169
186
 
170
- gem 'chimera_http_client', '~> 0.2'
187
+ gem 'chimera_http_client', '~> 0.3'
171
188
 
172
189
  And then execute:
173
190
 
@@ -5,7 +5,7 @@ module ChimeraHttpClient
5
5
  class Connection
6
6
  USER_AGENT = "ChimeraHttpClient (by mediafinger)".freeze
7
7
 
8
- def initialize(base_url:, logger: nil, timeout: nil, user_agent: USER_AGENT, verbose: false)
8
+ def initialize(base_url:, logger: nil, timeout: nil, user_agent: USER_AGENT, verbose: false, cache: nil)
9
9
  fail(ChimeraHttpClient::ParameterMissingError, "base_url expected, but not given") if base_url.nil?
10
10
 
11
11
  @base_url = base_url
@@ -17,7 +17,7 @@ module ChimeraHttpClient
17
17
  Typhoeus::Config.user_agent = user_agent
18
18
  Typhoeus::Config.verbose = verbose
19
19
  Typhoeus::Config.memoize = false
20
- # Typhoeus::Config.cache
20
+ Typhoeus::Config.cache = cache
21
21
  end
22
22
 
23
23
  def request
@@ -14,6 +14,7 @@ module ChimeraHttpClient
14
14
  headers: headers,
15
15
  timeout: options[:timeout] || TIMEOUT_SECONDS,
16
16
  accept_encoding: "gzip",
17
+ cache: options[:cache],
17
18
  }
18
19
 
19
20
  # Basic-auth support:
@@ -1,3 +1,3 @@
1
1
  module ChimeraHttpClient
2
- VERSION = "0.3.0".freeze
2
+ VERSION = "0.4.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chimera_http_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Finger
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-18 00:00:00.000000000 Z
11
+ date: 2019-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: typhoeus