bootic_client 0.0.13 → 0.0.14
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/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
|