ink_file_picker 0.0.2 → 0.0.3
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/.travis.yml +13 -0
- data/CHANGELOG.md +13 -0
- data/README.md +7 -1
- data/Rakefile +8 -0
- data/lib/ink_file_picker/client.rb +3 -1
- data/lib/ink_file_picker/errors.rb +18 -0
- data/lib/ink_file_picker/response.rb +7 -0
- data/lib/ink_file_picker/version.rb +1 -1
- data/spec/ink_file_picker/client_spec.rb +17 -0
- data/spec/ink_file_picker/response_spec.rb +16 -0
- metadata +20 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7a681af38820d24f5944958571caa2ec6e9a2a2
|
4
|
+
data.tar.gz: c689b7e0f95090e1563c3aa10de8bcd85e3e240b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 006cda13b071eaf270d6c99dde3423e21cc3506f297cdbbc44f66dfdd1478664633f10e6a634b6e15aeee76abea4571cc117bd9365d994864307c6e9ac581a84
|
7
|
+
data.tar.gz: ac22138a939849a2521d635178fdeeeef8b462290db9427bb039bcb1d63ddf8928875b05b9df1b88c96c4bef520b081e3858055a99013434a12fe71dfdf2519f
|
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
## 0.0.3
|
2
|
+
* Raise UnexpectedResponseError if we receive a 200 OK, but response body is neither "success", nor valid JSON.
|
3
|
+
This may happen if you ask File Picker to download a URL, but the server for the given URL fails to respond
|
4
|
+
within five(?) seconds. We will then have a 200 OK, but the body will reveal the timeout error in text and
|
5
|
+
the UnexpectedResponseError is raised. Other download errors may also be in the response, for instance
|
6
|
+
"Invalid response when trying to read from `http://some.url.com/here.jpg`.
|
7
|
+
|
8
|
+
|
9
|
+
## 0.0.2
|
10
|
+
* You can call to_hash on response objects.
|
11
|
+
|
12
|
+
## 0.0.1
|
13
|
+
* First release. Main functionality like store_url, store_file, remove, stat etc.
|
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
Ruby API client for Ink File Picker (known as filepicker.io).
|
4
4
|
|
5
|
+
[](https://travis-ci.org/Skalar/ink_file_picker)
|
5
6
|
|
6
7
|
|
7
8
|
## Installation
|
@@ -51,8 +52,9 @@ url = client.convert_url url_or_handle_name, w: 100, h: 100
|
|
51
52
|
url = client.convert_url url_or_handle_name, {w: 100, h: 100}, expiry: 10.minutes.from_now.to_i
|
52
53
|
|
53
54
|
# Adds policy and signature, if secret given when client was created.
|
55
|
+
get_params = {} # Get params we'll be adding to the request.
|
54
56
|
url = client.retrieve_url url_or_handle_name
|
55
|
-
url = client.retrieve_url url_or_handle_name, expiry: 10.minutes.from_now.to_i
|
57
|
+
url = client.retrieve_url url_or_handle_name, get_params, expiry: 10.minutes.from_now.to_i
|
56
58
|
|
57
59
|
|
58
60
|
# Get simple stat on a file, like the Javascript client
|
@@ -66,6 +68,10 @@ dimentions = client.stat url_or_handle_name, {width: true, height: true}
|
|
66
68
|
When making requests to the API errors may occur. `InkFilePicker::ClientError` or `InkFilePicker::ServerError` will
|
67
69
|
be raised if we are getting 4xx or 5xx responses back from File Picker. All errors inherits from `InkFilePicker::Error`.
|
68
70
|
|
71
|
+
We may also fail with a `InkFilePicker::UnexpectedResponseError`. This happens when for instance you ask File Picker
|
72
|
+
to download a URL, but the server for the given URL fails to respond within five(?) seconds. We will then get a 200 OK,
|
73
|
+
but the body will reveal the timeout error in text and the UnexpectedResponseError is raised.
|
74
|
+
Other download errors may also be in the response, for instance "Invalid response when trying to read from `http://some.url.com/here.jpg`.
|
69
75
|
|
70
76
|
## Contributing
|
71
77
|
|
data/Rakefile
CHANGED
@@ -170,7 +170,9 @@ module InkFilePicker
|
|
170
170
|
def wrap_response_or_fail_unless_success!(response)
|
171
171
|
case response.status
|
172
172
|
when 200...300
|
173
|
-
Response.new
|
173
|
+
Response.new(response).tap do |wrapped_response|
|
174
|
+
fail UnexpectedResponseError, response.body unless wrapped_response.valid?
|
175
|
+
end
|
174
176
|
when 400...500
|
175
177
|
fail ClientError.new response.body, response
|
176
178
|
when 500...600
|
@@ -33,4 +33,22 @@ module InkFilePicker
|
|
33
33
|
class ClientError < Error
|
34
34
|
include ErrorWithOriginal
|
35
35
|
end
|
36
|
+
|
37
|
+
# Public: When FilePicker returns 200 OK http status, but body is unexpected.
|
38
|
+
#
|
39
|
+
# These errors mainly comes from http status code 200, but at the same time the
|
40
|
+
# body is not 'success' neither a parsable JSON string.
|
41
|
+
#
|
42
|
+
# This seem to happen, for instance when you ask File Picker to store a URL
|
43
|
+
# and the remote server we want to download files from takes more than 5 seconds
|
44
|
+
# before it starts sending data. At this point FilePicker returns 200 OK, with a
|
45
|
+
# body like:
|
46
|
+
# "[uuid=D93D897C42254BFA] Invalid URL file http://www.example.com/slow-response.jpg - timeout"
|
47
|
+
#
|
48
|
+
# In stead of returning this response and get a JSON::ParserError down the road
|
49
|
+
# we fail as soon as we see something like this.
|
50
|
+
#
|
51
|
+
# As of writing this I don't know if this is the best solution to the situation.
|
52
|
+
class UnexpectedResponseError < Error
|
53
|
+
end
|
36
54
|
end
|
@@ -72,6 +72,23 @@ describe InkFilePicker::Client do
|
|
72
72
|
expect { subject.store_url url, expiry: 1394363896 }.to raise_error InkFilePicker::ClientError
|
73
73
|
end
|
74
74
|
|
75
|
+
it "handles timeout error on remote server correctly" do
|
76
|
+
response_body = "[uuid=D93D897C42254BFB] Invalid URL file http://vp.viseno.no/vp_image.php?type=create_project_letter_head&id=1378387&ts=20140413133631&source_mediatype_code=shoebox_hq&format=jpeg&resolution=300&relative=true&scale=bestfit - timeout"
|
77
|
+
|
78
|
+
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
|
79
|
+
store_path = subject.configuration.store_path + '?key=key&policy=eyJleHBpcnkiOjEzOTQzNjM4OTYsImNhbGwiOiJzdG9yZSJ9&signature=60cb43bb945543d7fdbd2662ae21d5c53e28529720263619cfebc3509e820807'
|
80
|
+
stub.post(store_path, {url: url}) { [200, {}, response_body] }
|
81
|
+
end
|
82
|
+
|
83
|
+
stubbed_connection = Faraday.new do |builder|
|
84
|
+
builder.adapter :test, stubs
|
85
|
+
end
|
86
|
+
|
87
|
+
subject.stub(:http_connection).and_return stubbed_connection
|
88
|
+
|
89
|
+
expect { subject.store_url url, expiry: 1394363896 }.to raise_error InkFilePicker::UnexpectedResponseError
|
90
|
+
end
|
91
|
+
|
75
92
|
it "handles server errors correctly" do
|
76
93
|
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
|
77
94
|
store_path = subject.configuration.store_path + '?key=key&policy=eyJleHBpcnkiOjEzOTQzNjM4OTYsImNhbGwiOiJzdG9yZSJ9&signature=60cb43bb945543d7fdbd2662ae21d5c53e28529720263619cfebc3509e820807'
|
@@ -37,4 +37,20 @@ describe InkFilePicker::Response do
|
|
37
37
|
expect(subject.public_send name).to eq 'an answer'
|
38
38
|
end
|
39
39
|
end
|
40
|
+
|
41
|
+
describe "#valid?" do
|
42
|
+
context "valid JSON as body" do
|
43
|
+
it "is true" do
|
44
|
+
expect(subject).to be_valid
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "invalid JSON as body" do
|
49
|
+
let(:http_response_body) { '[uuid=D93D897C42254BFB] Invalid URL file http://vp.viseno.no/vp_image.php?type=create_project_letter_head&id=1378387&ts=20140413133631&source_mediatype_code=shoebox_hq&format=jpeg&resolution=300&relative=true&scale=bestfit - timeout' }
|
50
|
+
|
51
|
+
it "is false" do
|
52
|
+
expect(subject).to_not be_valid
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
40
56
|
end
|
metadata
CHANGED
@@ -1,89 +1,89 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ink_file_picker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thorbjørn Hermansen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.2.14
|
20
|
-
- - <
|
20
|
+
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '5'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 3.2.14
|
30
|
-
- - <
|
30
|
+
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '5'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: faraday
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - ~>
|
37
|
+
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: 0.9.0
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- - ~>
|
44
|
+
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 0.9.0
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - ~>
|
51
|
+
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '1.5'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
|
-
- - ~>
|
58
|
+
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '1.5'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rake
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- -
|
65
|
+
- - ">="
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '0'
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
- -
|
72
|
+
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '0'
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: rspec
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- - ~>
|
79
|
+
- - "~>"
|
80
80
|
- !ruby/object:Gem::Version
|
81
81
|
version: 2.14.1
|
82
82
|
type: :development
|
83
83
|
prerelease: false
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
|
-
- - ~>
|
86
|
+
- - "~>"
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: 2.14.1
|
89
89
|
description:
|
@@ -93,7 +93,9 @@ executables: []
|
|
93
93
|
extensions: []
|
94
94
|
extra_rdoc_files: []
|
95
95
|
files:
|
96
|
-
- .gitignore
|
96
|
+
- ".gitignore"
|
97
|
+
- ".travis.yml"
|
98
|
+
- CHANGELOG.md
|
97
99
|
- Gemfile
|
98
100
|
- LICENSE.txt
|
99
101
|
- README.md
|
@@ -127,17 +129,17 @@ require_paths:
|
|
127
129
|
- lib
|
128
130
|
required_ruby_version: !ruby/object:Gem::Requirement
|
129
131
|
requirements:
|
130
|
-
- -
|
132
|
+
- - ">="
|
131
133
|
- !ruby/object:Gem::Version
|
132
134
|
version: '0'
|
133
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
136
|
requirements:
|
135
|
-
- -
|
137
|
+
- - ">="
|
136
138
|
- !ruby/object:Gem::Version
|
137
139
|
version: '0'
|
138
140
|
requirements: []
|
139
141
|
rubyforge_project:
|
140
|
-
rubygems_version: 2.
|
142
|
+
rubygems_version: 2.2.2
|
141
143
|
signing_key:
|
142
144
|
specification_version: 4
|
143
145
|
summary: Client for Ink File Picker
|