bootic_client 0.0.13 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +12 -1
- data/lib/bootic_client/client.rb +18 -3
- data/lib/bootic_client/version.rb +1 -1
- data/spec/client_spec.rb +34 -0
- data/spec/fixtures/file.gif +0 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7bd5c38b36abf80f522f33986103d5d2d94c2ba0
|
4
|
+
data.tar.gz: 5f11c6edb651d08e49cbbf1e8bd2a89037cfd3e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8afbb75506aa39f78af563d6aa7b926f4fe9993554f9a79288d606af3bf11002423bc9bcfd1a66d633006ee37c8b69a3bb9987d1551d12b41f6c14941f7b77cc
|
7
|
+
data.tar.gz: fda4d8271434e14c7502329f8b3448f95a570628fed0ac6afb8dd6b380927a95fc4a39b26a77d77ae8d95c33b01a32523af784798c5e37507c03ccc1d7daa04d
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## [v0.0.13](https://github.com/bootic/bootic_client.rb/tree/v0.0.13) (2016-01-12)
|
4
|
+
[Full Changelog](https://github.com/bootic/bootic_client.rb/compare/v0.0.12...v0.0.13)
|
5
|
+
|
6
|
+
**Merged pull requests:**
|
7
|
+
|
8
|
+
- Faraday HTTP Cache expects memcache store must respond to \#delete [\#5](https://github.com/bootic/bootic_client.rb/pull/5) ([ismasan](https://github.com/ismasan))
|
9
|
+
|
3
10
|
## [v0.0.12](https://github.com/bootic/bootic_client.rb/tree/v0.0.12) (2016-01-11)
|
4
11
|
[Full Changelog](https://github.com/bootic/bootic_client.rb/compare/v0.0.11...v0.0.12)
|
5
12
|
|
data/README.md
CHANGED
@@ -165,6 +165,17 @@ if shop.can?(:create_product)
|
|
165
165
|
end
|
166
166
|
```
|
167
167
|
|
168
|
+
### Working with Files and IO instances
|
169
|
+
|
170
|
+
Instances of `File` and other readable `IO` objects will be base64-encoded internally before JSON-encoding payloads for `POST`, `PUT` and `PATCH` requests.
|
171
|
+
|
172
|
+
```ruby
|
173
|
+
asset = product.create_product_asset(
|
174
|
+
filename: 'foo.jpg',
|
175
|
+
data: File.new('/path/to/foo.jpg') # this will base64-encode the file data in the `data` field.
|
176
|
+
)
|
177
|
+
```
|
178
|
+
|
168
179
|
## Relation docs
|
169
180
|
|
170
181
|
All resource link relations include a "docs" URL so you can learn more about that particular resource.
|
@@ -187,7 +198,7 @@ BooticClient.configure do |c|
|
|
187
198
|
end
|
188
199
|
```
|
189
200
|
|
190
|
-
Outside of Rails, BooticClient ships with a wrapper around the [Dalli](https://github.com/mperham/dalli) memcache client.
|
201
|
+
Outside of Rails, BooticClient ships with a wrapper around the [Dalli](https://github.com/mperham/dalli) memcache client.
|
191
202
|
You must include Dalli in your Gemfile and require the wrapper explicitely.
|
192
203
|
|
193
204
|
```ruby
|
data/lib/bootic_client/client.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'base64'
|
1
2
|
require 'faraday'
|
2
3
|
require 'faraday_middleware'
|
3
4
|
require 'faraday-http-cache'
|
@@ -33,21 +34,21 @@ module BooticClient
|
|
33
34
|
def post(href, payload = {}, headers = {})
|
34
35
|
validated_request!(:post, href) do |req|
|
35
36
|
req.headers.update headers
|
36
|
-
req.body = JSON.dump(payload)
|
37
|
+
req.body = JSON.dump(sanitized(payload))
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
40
41
|
def put(href, payload = {}, headers = {})
|
41
42
|
validated_request!(:put, href) do |req|
|
42
43
|
req.headers.update headers
|
43
|
-
req.body = JSON.dump(payload)
|
44
|
+
req.body = JSON.dump(sanitized(payload))
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
47
48
|
def patch(href, payload = {}, headers = {})
|
48
49
|
validated_request!(:patch, href) do |req|
|
49
50
|
req.headers.update headers
|
50
|
-
req.body = JSON.dump(payload)
|
51
|
+
req.body = JSON.dump(sanitized(payload))
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
@@ -97,6 +98,20 @@ module BooticClient
|
|
97
98
|
raise UnauthorizedError, "Unauthorized request" if resp.status == 401
|
98
99
|
raise AccessForbiddenError, "Access Forbidden" if resp.status == 403
|
99
100
|
end
|
101
|
+
|
102
|
+
def sanitized(payload)
|
103
|
+
return payload unless payload.kind_of?(Hash)
|
104
|
+
payload.each_with_object({}) do |(k, v), memo|
|
105
|
+
memo[k] = case v
|
106
|
+
when IO
|
107
|
+
Base64.encode64 v.read
|
108
|
+
when Hash
|
109
|
+
sanitized v
|
110
|
+
else
|
111
|
+
v
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
100
115
|
end
|
101
116
|
|
102
117
|
end
|
data/spec/client_spec.rb
CHANGED
@@ -4,6 +4,10 @@ require 'json'
|
|
4
4
|
describe BooticClient::Client do
|
5
5
|
require 'webmock/rspec'
|
6
6
|
|
7
|
+
def fixture_path(filename)
|
8
|
+
File.join File.dirname(File.expand_path(__FILE__)), 'fixtures', filename
|
9
|
+
end
|
10
|
+
|
7
11
|
describe 'valid response' do
|
8
12
|
let(:root_url) { 'https://api.bootic.net/v1' }
|
9
13
|
let(:client) { BooticClient::Client.new }
|
@@ -187,6 +191,21 @@ describe BooticClient::Client do
|
|
187
191
|
end
|
188
192
|
end
|
189
193
|
|
194
|
+
describe 'with file data' do
|
195
|
+
let(:base64_data) { Base64.encode64(File.read(fixture_path('file.gif'))) }
|
196
|
+
let(:file) { File.new(fixture_path('file.gif')) }
|
197
|
+
|
198
|
+
before do
|
199
|
+
stub_request(:post, root_url)
|
200
|
+
.with(body: JSON.dump({foo: 'bar', data: base64_data}), headers: request_headers)
|
201
|
+
.to_return(status: 201, body: JSON.dump(root_data), headers: response_headers)
|
202
|
+
end
|
203
|
+
|
204
|
+
it 'POSTs request with base64-encoded file and parses response' do
|
205
|
+
expect(client.post(root_url, {foo: 'bar', data: file}, request_headers).body['message']).to eql('Hello!')
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
190
209
|
[:put, :patch].each do |verb|
|
191
210
|
describe verb.to_s.upcase do
|
192
211
|
before do
|
@@ -199,6 +218,21 @@ describe BooticClient::Client do
|
|
199
218
|
expect(client.send(verb, root_url, {foo: 'bar'}, request_headers).body['message']).to eql('Hello!')
|
200
219
|
end
|
201
220
|
end
|
221
|
+
|
222
|
+
describe "#{verb.to_s.upcase} with file data" do
|
223
|
+
let(:base64_data) { Base64.encode64(File.read(fixture_path('file.gif'))) }
|
224
|
+
let(:file) { File.new(fixture_path('file.gif')) }
|
225
|
+
|
226
|
+
before do
|
227
|
+
stub_request(verb, root_url)
|
228
|
+
.with(body: JSON.dump({foo: 'bar', data: {name: 'la', file: base64_data}}), headers: request_headers)
|
229
|
+
.to_return(status: 200, body: JSON.dump(root_data), headers: response_headers)
|
230
|
+
end
|
231
|
+
|
232
|
+
it "#{verb.to_s.upcase}s request with base64-encoded file data and parses response" do
|
233
|
+
expect(client.send(verb, root_url, {foo: 'bar', data: {name: 'la', file: file}}, request_headers).body['message']).to eql('Hello!')
|
234
|
+
end
|
235
|
+
end
|
202
236
|
end
|
203
237
|
|
204
238
|
context 'DELETE' do
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bootic_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ismael Celis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -198,6 +198,7 @@ files:
|
|
198
198
|
- spec/client_credentials_strategy_spec.rb
|
199
199
|
- spec/client_spec.rb
|
200
200
|
- spec/entity_spec.rb
|
201
|
+
- spec/fixtures/file.gif
|
201
202
|
- spec/memcache_storage_spec.rb
|
202
203
|
- spec/relation_spec.rb
|
203
204
|
- spec/spec_helper.rb
|
@@ -232,6 +233,7 @@ test_files:
|
|
232
233
|
- spec/client_credentials_strategy_spec.rb
|
233
234
|
- spec/client_spec.rb
|
234
235
|
- spec/entity_spec.rb
|
236
|
+
- spec/fixtures/file.gif
|
235
237
|
- spec/memcache_storage_spec.rb
|
236
238
|
- spec/relation_spec.rb
|
237
239
|
- spec/spec_helper.rb
|