file-manager 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/file-manager.gemspec +1 -1
- data/lib/file_manager.rb +4 -0
- data/lib/local_file_manager.rb +11 -0
- data/lib/memory_file_manager.rb +9 -0
- data/lib/s3_file_manager.rb +18 -0
- data/test/file_manager_test.rb +14 -0
- data/test/vcr_cassettes/test_downloading_to_temp_file.yml +207 -0
- data/test/vcr_cassettes/test_listing_files.yml +92 -84
- data/test/vcr_cassettes/test_listing_files_in_sub_dir.yml +91 -83
- data/test/vcr_cassettes/test_reading.yml +59 -54
- data/test/vcr_cassettes/test_reading_in_sub_dir.yml +59 -54
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b529caed3e2276f2f82062056cfbe2f3db1c46b
|
4
|
+
data.tar.gz: e58a5c7976cb19b329784fa34ef3ca6dc8ed2d18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33882e75cbe545f2b1282bf6bc4a788ce025b1ba64ab44cf8f6ed15fa6aef789ab4887ddef58ac6dd9c2914d997e98fc7b0b8a501fc1e0b2ecb176d0991bb6ae
|
7
|
+
data.tar.gz: 5cea2792c307170389e2fc39cf690f325016b92c5a94c5f8865104cc8e4c9ea3abd85d15c68342c3632d5d50d736221f452b6bb330fb4802cddbda24c87914f3
|
data/Gemfile.lock
CHANGED
data/file-manager.gemspec
CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = "file-manager"
|
6
|
-
spec.version = '0.
|
6
|
+
spec.version = '0.3.0'
|
7
7
|
spec.authors = ["Francisco Barroso / Marlus Saraiva"]
|
8
8
|
spec.email = ["franciscobarroso@grupofortes.com.br"]
|
9
9
|
spec.description = 'File manager, access S3 or local'
|
data/lib/file_manager.rb
CHANGED
data/lib/local_file_manager.rb
CHANGED
@@ -23,6 +23,17 @@ class LocalFileManager < FileManager
|
|
23
23
|
@logger.puts 'done.'
|
24
24
|
end
|
25
25
|
|
26
|
+
def download_to_temp_file(file_name)
|
27
|
+
@logger.print "Copying local file \"#{file_name}\" to folder \"#{root_path}\"..."
|
28
|
+
full_file_name = Pathname(File.join(root_path, file_name))
|
29
|
+
Dir.mktmpdir do |dir|
|
30
|
+
temp_file = "#{dir}/#{full_file_name.basename}"
|
31
|
+
FileUtils.cp(full_file_name, temp_file)
|
32
|
+
yield(temp_file)
|
33
|
+
end
|
34
|
+
@logger.puts 'done.'
|
35
|
+
end
|
36
|
+
|
26
37
|
def list_files(prefix = '', file_extension = '*')
|
27
38
|
FileUtils.mkdir_p(root_path)
|
28
39
|
@logger.print "Listing \"#{prefix}*.#{file_extension}\" from local folder \"#{root_path}\"..."
|
data/lib/memory_file_manager.rb
CHANGED
@@ -23,4 +23,13 @@ class MemoryFileManager < FileManager
|
|
23
23
|
@data.delete "#{file_name}"
|
24
24
|
end
|
25
25
|
|
26
|
+
def download_to_temp_file(file_name)
|
27
|
+
Dir.mktmpdir do |dir|
|
28
|
+
temp_file = "#{dir}/#{Pathname(file_name).basename}"
|
29
|
+
content = read_file(file_name)
|
30
|
+
File.open(temp_file, 'w') { |file| file.write(content) }
|
31
|
+
yield(temp_file)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
26
35
|
end
|
data/lib/s3_file_manager.rb
CHANGED
@@ -30,6 +30,19 @@ class S3FileManager < FileManager
|
|
30
30
|
logger.puts 'done.'
|
31
31
|
end
|
32
32
|
|
33
|
+
def download_to_temp_file(file_name)
|
34
|
+
Dir.mktmpdir do |dir|
|
35
|
+
@logger.print "Downloading file \"#{bucket_name}/#{file_name}\" to temp folder \"#{dir}\"..."
|
36
|
+
temp_file = "#{dir}/#{Pathname(file_name).basename}"
|
37
|
+
|
38
|
+
s3_client = connect_s3_client
|
39
|
+
s3_client.get_object({ bucket: bucket_name, key: file_name }, target: temp_file)
|
40
|
+
|
41
|
+
yield(temp_file)
|
42
|
+
end
|
43
|
+
logger.puts 'done.'
|
44
|
+
end
|
45
|
+
|
33
46
|
def list_files(prefix = '', file_extension = '*')
|
34
47
|
# objects = []
|
35
48
|
# last_key = nil
|
@@ -80,4 +93,9 @@ class S3FileManager < FileManager
|
|
80
93
|
service
|
81
94
|
end
|
82
95
|
|
96
|
+
def connect_s3_client
|
97
|
+
credentials = Aws::Credentials.new(options[:access_key_id], options[:secret_access_key])
|
98
|
+
Aws::S3::Client.new(region: options[:region], credentials: credentials)
|
99
|
+
end
|
100
|
+
|
83
101
|
end
|
data/test/file_manager_test.rb
CHANGED
@@ -48,8 +48,22 @@ module FileManagerTest
|
|
48
48
|
assert_empty @manager.list_files
|
49
49
|
end
|
50
50
|
|
51
|
+
|
51
52
|
def test_remove_not_existing_file_dont_raise
|
52
53
|
assert_empty @manager.list_files
|
53
54
|
@manager.delete_file 'sub_dir/saved.*'
|
54
55
|
end
|
56
|
+
|
57
|
+
def test_downloading_to_temp_file
|
58
|
+
@manager.save_file 'temp_file/saved', 'content'
|
59
|
+
assert_equal 'content', @manager.read_file('temp_file/saved')
|
60
|
+
|
61
|
+
@manager.download_to_temp_file('temp_file/saved') do |temp_file|
|
62
|
+
contents = File.open(temp_file) { |f| f.read }
|
63
|
+
assert_equal contents, 'content'
|
64
|
+
end
|
65
|
+
|
66
|
+
@manager.delete_file 'temp_file/saved'
|
67
|
+
end
|
68
|
+
|
55
69
|
end
|
@@ -0,0 +1,207 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: put
|
5
|
+
uri: https://file-manager-tests.s3-us-west-2.amazonaws.com/temp_file/saved
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: content
|
9
|
+
headers:
|
10
|
+
Content-Type:
|
11
|
+
- ''
|
12
|
+
Accept-Encoding:
|
13
|
+
- ''
|
14
|
+
User-Agent:
|
15
|
+
- aws-sdk-ruby2/2.2.13 ruby/2.2.3 x86_64-darwin14
|
16
|
+
Expect:
|
17
|
+
- 100-continue
|
18
|
+
Content-Md5:
|
19
|
+
- mgNkuembtIDdJeHwKEyFVQ==
|
20
|
+
X-Amz-Date:
|
21
|
+
- 20170905T193111Z
|
22
|
+
Host:
|
23
|
+
- file-manager-tests.s3-us-west-2.amazonaws.com
|
24
|
+
X-Amz-Content-Sha256:
|
25
|
+
- ed7002b439e9ac845f22357d822bac1444730fbdb6016d3ec9432297b9ec9f73
|
26
|
+
Authorization:
|
27
|
+
- AWS4-HMAC-SHA256 Credential=AKIAJ73G6IOWSUPCKP5A/20170905/us-west-2/s3/aws4_request,
|
28
|
+
SignedHeaders=content-md5;host;x-amz-content-sha256;x-amz-date, Signature=77b5ca0c733dca9e50fa94641c075eb003cc5f48828806021d91383003b121c2
|
29
|
+
Content-Length:
|
30
|
+
- '7'
|
31
|
+
Accept:
|
32
|
+
- "*/*"
|
33
|
+
response:
|
34
|
+
status:
|
35
|
+
code: 200
|
36
|
+
message: OK
|
37
|
+
headers:
|
38
|
+
X-Amz-Id-2:
|
39
|
+
- ThrCrHLPq67iKa3zU+BSgqEJ9qqNz636LiISvezfUKVARKmV+3mE400nDn0IEVEKdrB5CKgKBIg=
|
40
|
+
X-Amz-Request-Id:
|
41
|
+
- EA7AABC0E1F7C52C
|
42
|
+
Date:
|
43
|
+
- Tue, 05 Sep 2017 19:31:12 GMT
|
44
|
+
Etag:
|
45
|
+
- '"9a0364b9e99bb480dd25e1f0284c8555"'
|
46
|
+
Content-Length:
|
47
|
+
- '0'
|
48
|
+
Server:
|
49
|
+
- AmazonS3
|
50
|
+
body:
|
51
|
+
encoding: UTF-8
|
52
|
+
string: ''
|
53
|
+
http_version:
|
54
|
+
recorded_at: Tue, 05 Sep 2017 19:31:12 GMT
|
55
|
+
- request:
|
56
|
+
method: get
|
57
|
+
uri: https://file-manager-tests.s3-us-west-2.amazonaws.com/temp_file/saved
|
58
|
+
body:
|
59
|
+
encoding: ASCII-8BIT
|
60
|
+
string: ''
|
61
|
+
headers:
|
62
|
+
Content-Type:
|
63
|
+
- ''
|
64
|
+
Accept-Encoding:
|
65
|
+
- ''
|
66
|
+
User-Agent:
|
67
|
+
- aws-sdk-ruby2/2.2.13 ruby/2.2.3 x86_64-darwin14
|
68
|
+
X-Amz-Date:
|
69
|
+
- 20170905T193112Z
|
70
|
+
Host:
|
71
|
+
- file-manager-tests.s3-us-west-2.amazonaws.com
|
72
|
+
X-Amz-Content-Sha256:
|
73
|
+
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
|
74
|
+
Authorization:
|
75
|
+
- AWS4-HMAC-SHA256 Credential=AKIAJ73G6IOWSUPCKP5A/20170905/us-west-2/s3/aws4_request,
|
76
|
+
SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=d77b195464c76daf6a4e0c2d081e9011886a7fe30d5e9eba1fb80bb77568a8fe
|
77
|
+
Content-Length:
|
78
|
+
- '0'
|
79
|
+
Accept:
|
80
|
+
- "*/*"
|
81
|
+
response:
|
82
|
+
status:
|
83
|
+
code: 200
|
84
|
+
message: OK
|
85
|
+
headers:
|
86
|
+
X-Amz-Id-2:
|
87
|
+
- 9UJ3/6AVPXQ6SLEYwc/+TMoZq0yszEhK1qi8ACLAvyeC8jSy9fBFoWOcvEKwBuLiYPVs8hrOdow=
|
88
|
+
X-Amz-Request-Id:
|
89
|
+
- 0BE11CB38DBAE349
|
90
|
+
Date:
|
91
|
+
- Tue, 05 Sep 2017 19:31:14 GMT
|
92
|
+
Last-Modified:
|
93
|
+
- Tue, 05 Sep 2017 19:31:12 GMT
|
94
|
+
Etag:
|
95
|
+
- '"9a0364b9e99bb480dd25e1f0284c8555"'
|
96
|
+
Accept-Ranges:
|
97
|
+
- bytes
|
98
|
+
Content-Type:
|
99
|
+
- ''
|
100
|
+
Content-Length:
|
101
|
+
- '7'
|
102
|
+
Server:
|
103
|
+
- AmazonS3
|
104
|
+
body:
|
105
|
+
encoding: UTF-8
|
106
|
+
string: content
|
107
|
+
http_version:
|
108
|
+
recorded_at: Tue, 05 Sep 2017 19:31:13 GMT
|
109
|
+
- request:
|
110
|
+
method: get
|
111
|
+
uri: https://file-manager-tests.s3-us-west-2.amazonaws.com/temp_file/saved
|
112
|
+
body:
|
113
|
+
encoding: ASCII-8BIT
|
114
|
+
string: ''
|
115
|
+
headers:
|
116
|
+
Content-Type:
|
117
|
+
- ''
|
118
|
+
Accept-Encoding:
|
119
|
+
- ''
|
120
|
+
User-Agent:
|
121
|
+
- aws-sdk-ruby2/2.2.13 ruby/2.2.3 x86_64-darwin14
|
122
|
+
X-Amz-Date:
|
123
|
+
- 20170905T193113Z
|
124
|
+
Host:
|
125
|
+
- file-manager-tests.s3-us-west-2.amazonaws.com
|
126
|
+
X-Amz-Content-Sha256:
|
127
|
+
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
|
128
|
+
Authorization:
|
129
|
+
- AWS4-HMAC-SHA256 Credential=AKIAJ73G6IOWSUPCKP5A/20170905/us-west-2/s3/aws4_request,
|
130
|
+
SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=1256dea399728044ac726831903c6881d13fe35e9b2df7815668a3fb7df1e49c
|
131
|
+
Content-Length:
|
132
|
+
- '0'
|
133
|
+
Accept:
|
134
|
+
- "*/*"
|
135
|
+
response:
|
136
|
+
status:
|
137
|
+
code: 200
|
138
|
+
message: OK
|
139
|
+
headers:
|
140
|
+
X-Amz-Id-2:
|
141
|
+
- lvcN93Sm1hCQ8hL5G/FVyDs1jBrMBGPLcZ1XFwT8S1LGok6LATTuf7ECp/JdRlsruqynqEPBq/w=
|
142
|
+
X-Amz-Request-Id:
|
143
|
+
- 776F417270F33D9C
|
144
|
+
Date:
|
145
|
+
- Tue, 05 Sep 2017 19:31:14 GMT
|
146
|
+
Last-Modified:
|
147
|
+
- Tue, 05 Sep 2017 19:31:12 GMT
|
148
|
+
Etag:
|
149
|
+
- '"9a0364b9e99bb480dd25e1f0284c8555"'
|
150
|
+
Accept-Ranges:
|
151
|
+
- bytes
|
152
|
+
Content-Type:
|
153
|
+
- ''
|
154
|
+
Content-Length:
|
155
|
+
- '7'
|
156
|
+
Server:
|
157
|
+
- AmazonS3
|
158
|
+
body:
|
159
|
+
encoding: UTF-8
|
160
|
+
string: content
|
161
|
+
http_version:
|
162
|
+
recorded_at: Tue, 05 Sep 2017 19:31:13 GMT
|
163
|
+
- request:
|
164
|
+
method: delete
|
165
|
+
uri: https://file-manager-tests.s3-us-west-2.amazonaws.com/temp_file/saved
|
166
|
+
body:
|
167
|
+
encoding: ASCII-8BIT
|
168
|
+
string: ''
|
169
|
+
headers:
|
170
|
+
Content-Type:
|
171
|
+
- ''
|
172
|
+
Accept-Encoding:
|
173
|
+
- ''
|
174
|
+
User-Agent:
|
175
|
+
- aws-sdk-ruby2/2.2.13 ruby/2.2.3 x86_64-darwin14
|
176
|
+
X-Amz-Date:
|
177
|
+
- 20170905T193113Z
|
178
|
+
Host:
|
179
|
+
- file-manager-tests.s3-us-west-2.amazonaws.com
|
180
|
+
X-Amz-Content-Sha256:
|
181
|
+
- e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
|
182
|
+
Authorization:
|
183
|
+
- AWS4-HMAC-SHA256 Credential=AKIAJ73G6IOWSUPCKP5A/20170905/us-west-2/s3/aws4_request,
|
184
|
+
SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=0f4da92980176e880b3d5c8f837d270c17d4c1a9849aa905650dc073bcb994ac
|
185
|
+
Content-Length:
|
186
|
+
- '0'
|
187
|
+
Accept:
|
188
|
+
- "*/*"
|
189
|
+
response:
|
190
|
+
status:
|
191
|
+
code: 204
|
192
|
+
message: No Content
|
193
|
+
headers:
|
194
|
+
X-Amz-Id-2:
|
195
|
+
- RGyAFzIbtaWZ6tWxwpay0kziUm4lUDVuopRLLHrwOl79h+IaCit61Q6J2KO3YEtHuPpjaQ2hP54=
|
196
|
+
X-Amz-Request-Id:
|
197
|
+
- DFEAEC74800C8768
|
198
|
+
Date:
|
199
|
+
- Tue, 05 Sep 2017 19:31:15 GMT
|
200
|
+
Server:
|
201
|
+
- AmazonS3
|
202
|
+
body:
|
203
|
+
encoding: UTF-8
|
204
|
+
string: ''
|
205
|
+
http_version:
|
206
|
+
recorded_at: Tue, 05 Sep 2017 19:31:14 GMT
|
207
|
+
recorded_with: VCR 3.0.1
|