files.com 1.0.177 → 1.0.178
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/_VERSION +1 -1
- data/lib/files.com/api_client.rb +5 -0
- data/lib/files.com/models/file.rb +1 -1
- data/lib/files.com/sizable_io.rb +6 -1
- data/spec/models/file_spec.rb +36 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8314f06e051c0563d980fca94b325614b675d6c406ddc7e286ebf132251cbd0c
|
4
|
+
data.tar.gz: e7e4cce1b266a01b4afacfdca4bbca65ab6c46e87e3be7cf6b9b828db31082bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dde72ce18d054f8bd8c2ee9f0d2c0f0b99e5207663081c1d57b279640282ae42f07a2b77c88a5f42bef9198f24b61840deffe87edd77251fd97fba0c3a11bd5d
|
7
|
+
data.tar.gz: ee65038bc42cd105e3d89646d187b079be61244f049a63f5a363c0bf1ac165ed52492d16ce2c175a096e2bcdd71278d4789400d991802c78d9a35fefa24f7687
|
data/_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.178
|
data/lib/files.com/api_client.rb
CHANGED
@@ -154,7 +154,12 @@ module Files
|
|
154
154
|
http.request request do |response|
|
155
155
|
io.fulfill_content_length(response.content_length) if io.respond_to?(:fulfill_content_length)
|
156
156
|
response.read_body do |chunk|
|
157
|
+
response.error! if response.code.to_i >= 300
|
158
|
+
io.ready! if io.respond_to?(:ready!)
|
157
159
|
io << chunk
|
160
|
+
rescue => e
|
161
|
+
io.set_error(e) if io.respond_to?(:set_error)
|
162
|
+
io.close
|
158
163
|
end
|
159
164
|
end
|
160
165
|
end
|
data/lib/files.com/sizable_io.rb
CHANGED
@@ -18,13 +18,18 @@ module Files
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def close
|
21
|
+
raise @with_error if @with_error
|
21
22
|
super
|
22
23
|
read_io.content_length_promise.try_set(nil)
|
23
24
|
end
|
24
25
|
|
26
|
+
def set_error(e)
|
27
|
+
read_io.with_error = e
|
28
|
+
end
|
29
|
+
|
25
30
|
protected
|
26
31
|
|
27
|
-
attr_accessor :content_length
|
32
|
+
attr_accessor :content_length, :with_error
|
28
33
|
|
29
34
|
def content_length_promise
|
30
35
|
@content_length_promise ||= Concurrent::Promise.new { content_length }
|
data/spec/models/file_spec.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
require "tempfile"
|
3
3
|
|
4
|
-
RSpec.describe Files::File, :with_test_folder do
|
5
|
-
|
4
|
+
RSpec.describe Files::File, :with_test_folder, skip: ENV["GITLAB"] do
|
5
|
+
describe "#read" do
|
6
6
|
before do
|
7
7
|
Files::File.open(test_folder.join("[[strange stuff]]#yes.text").to_s, 'w', options) do |f|
|
8
8
|
f.write("contents")
|
@@ -13,9 +13,19 @@ RSpec.describe Files::File, :with_test_folder do
|
|
13
13
|
file = Files::File.find(test_folder.join("[[strange stuff]]#yes.text").to_s, {}, options)
|
14
14
|
expect(file.read).to eq("contents")
|
15
15
|
end
|
16
|
+
|
17
|
+
context "stream failure" do
|
18
|
+
let(:expired_download) { "https://s3.amazonaws.com/objects.brickftp.com/metadata/37868/52f55a21-1685-46aa-aaff-99ca8b172c00?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIEWLY3MN4YGZQOWA%2F20210621%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210621T202802Z&X-Amz-Expires=60&X-Amz-SignedHeaders=host&response-cache-control=no-cache%2C%20no-store&response-content-disposition=attachment%3B%20filename%3D%22write-as-io.txt%22&response-content-type=text%2Fplain&X-Amz-Signature=83d5b5789cbd2282bfea6e560e4319385135204dc0df3217930f96905c9cb18f" }
|
19
|
+
|
20
|
+
it "waits for io to be ready" do
|
21
|
+
file = Files::File.new
|
22
|
+
allow(file).to receive(:download_uri_with_load).and_return(expired_download)
|
23
|
+
expect { file.read_io }.to raise_error('403 "Forbidden"')
|
24
|
+
end
|
25
|
+
end
|
16
26
|
end
|
17
27
|
|
18
|
-
|
28
|
+
describe "#read_io" do
|
19
29
|
before do
|
20
30
|
Files::File.open(test_folder.join("read.txt").to_s, 'w', options) do |f|
|
21
31
|
f.write("contents")
|
@@ -28,9 +38,17 @@ RSpec.describe Files::File, :with_test_folder do
|
|
28
38
|
expect(file.read_io.read).to eq("contents")
|
29
39
|
expect(file.read_io.size).to eq("contents".length)
|
30
40
|
end
|
41
|
+
|
42
|
+
it "works for file with zero bytes" do
|
43
|
+
file = Files::File.open("zero-byte.txt", 'w', options)
|
44
|
+
file.write("")
|
45
|
+
file.close
|
46
|
+
file = Files::File.find("zero-byte.txt", {}, options)
|
47
|
+
expect(file.read_io.read).to eq("")
|
48
|
+
end
|
31
49
|
end
|
32
50
|
|
33
|
-
|
51
|
+
describe "#write" do
|
34
52
|
it "can take string" do
|
35
53
|
Files::File.open(test_folder.join("write-as-string.txt").to_s, 'w', options) do |f|
|
36
54
|
f.write("I am a string")
|
@@ -65,4 +83,18 @@ RSpec.describe Files::File, :with_test_folder do
|
|
65
83
|
temp_file.close
|
66
84
|
end
|
67
85
|
end
|
86
|
+
|
87
|
+
describe "#download_content" do
|
88
|
+
let(:file) {
|
89
|
+
Files::File.open(test_folder.join("write-as-string.txt").to_s, 'w', options) do |f|
|
90
|
+
f.write("I am a string")
|
91
|
+
end
|
92
|
+
}
|
93
|
+
|
94
|
+
it "can take arbitrary IO" do
|
95
|
+
file.download_content(io = StringIO.new)
|
96
|
+
|
97
|
+
expect(io.tap(&:rewind).read).to eq("I am a string")
|
98
|
+
end
|
99
|
+
end
|
68
100
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: files.com
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.178
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- files.com
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|