saviour 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74f1d7faa90b8712dbf65f86ce592db60c296ac3
|
4
|
+
data.tar.gz: 680a73e0bb124fc7de9ca66ea09e1ee486088731
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a152333b01f299de797c04ab0d76a07401ebdf673cb2e2d93f02151b495b4d8d18bafbec884b9ddb53aaf12ae94bf409d0e1769ae60e0e06fa939be14486a2ea
|
7
|
+
data.tar.gz: eabe42debcdc6c8caf0e48f8fbb4645964bb848329198844607ef0b7b3cd93bd41855bfdf5ccb71aaaac717921c10b6c6203203ad203d3eb1c03236fced79860
|
data/README.md
CHANGED
@@ -267,6 +267,30 @@ on a path that already exists. This behaviour in enabled by default, but you can
|
|
267
267
|
argument when instantiating the storage: `overwrite_protection: false`. This feature requires an additional HEAD request
|
268
268
|
to verify existence for every write.
|
269
269
|
|
270
|
+
NOTE: Be aware that S3 has a limit of 1024 bytes for the keys (paths) used. Be sure to truncate to that maximum length
|
271
|
+
if you're using an s3 storage, for example with a processor like this:
|
272
|
+
|
273
|
+
```ruby
|
274
|
+
# http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html
|
275
|
+
# Max 1024 bytes for keys in S3
|
276
|
+
def truncate_at_max_key_size(contents, filename)
|
277
|
+
# Left 20 bytes of margin (up to 1024) to have some room for a name
|
278
|
+
if store_dir.bytesize > 1004
|
279
|
+
raise "The store_dir used is already bigger than 1004 bytes, must be reduced!"
|
280
|
+
end
|
281
|
+
|
282
|
+
key = "#{store_dir}#{filename}"
|
283
|
+
new_filename = if key > 1024
|
284
|
+
# note mb_chars is an active support's method
|
285
|
+
filename.mb_chars.limit(1024 - store_dir.bytesize).to_s
|
286
|
+
else
|
287
|
+
filename
|
288
|
+
end
|
289
|
+
|
290
|
+
[contents, new_filename]
|
291
|
+
end
|
292
|
+
```
|
293
|
+
|
270
294
|
|
271
295
|
## Source abstraction
|
272
296
|
|
@@ -384,6 +408,8 @@ When using `process_with_file`, the last file instance you return from your last
|
|
384
408
|
`process_with_file` will be automatically deleted by Saviour. Be aware of this if you return
|
385
409
|
some File instance different than the one you received pointing to a file.
|
386
410
|
|
411
|
+
From inside a process you can also access the current store dir with `store_dir`.
|
412
|
+
|
387
413
|
Finally, processors can be disabled entirely via a configuration parameter. Example:
|
388
414
|
|
389
415
|
```
|
@@ -20,7 +20,6 @@ module Saviour
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def write(contents, filename)
|
23
|
-
store_dir = Uploader::StoreDirExtractor.new(self).store_dir
|
24
23
|
raise RuntimeError, "Please use `store_dir` before trying to write" unless store_dir
|
25
24
|
|
26
25
|
if Config.processing_enabled
|
@@ -32,6 +31,10 @@ module Saviour
|
|
32
31
|
path
|
33
32
|
end
|
34
33
|
|
34
|
+
def store_dir
|
35
|
+
@store_dir ||= Uploader::StoreDirExtractor.new(self).store_dir
|
36
|
+
end
|
37
|
+
|
35
38
|
class << self
|
36
39
|
def store_dirs
|
37
40
|
@store_dirs ||= []
|
data/lib/saviour/s3_storage.rb
CHANGED
@@ -19,6 +19,12 @@ module Saviour
|
|
19
19
|
raise(RuntimeError, "The path you're trying to write already exists!") if @overwrite_protection && exists?(path)
|
20
20
|
|
21
21
|
path = sanitize_leading_slash(path)
|
22
|
+
|
23
|
+
# http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html
|
24
|
+
if path.bytesize > 1024
|
25
|
+
raise(RuntimeError, "The key in S3 must be at max 1024 bytes, this key is too big: #{path}")
|
26
|
+
end
|
27
|
+
|
22
28
|
directory.files.create({
|
23
29
|
key: path,
|
24
30
|
body: contents,
|
data/lib/saviour/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "
|
3
|
+
describe "processor's API" do
|
4
4
|
before { allow(Saviour::Config).to receive(:storage).and_return(Saviour::LocalStorage.new(local_prefix: @tmpdir, public_url_prefix: "http://domain.com")) }
|
5
5
|
|
6
6
|
let(:uploader) {
|
@@ -22,7 +22,7 @@ describe "access to model data from uploaders" do
|
|
22
22
|
klass
|
23
23
|
}
|
24
24
|
|
25
|
-
describe "
|
25
|
+
describe "can access to model and attached_as" do
|
26
26
|
it do
|
27
27
|
with_test_file("example.xml") do |example, name|
|
28
28
|
a = klass.new
|
@@ -34,4 +34,25 @@ describe "access to model data from uploaders" do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
describe "can access store_dir" do
|
39
|
+
let(:uploader) {
|
40
|
+
Class.new(Saviour::BaseUploader) do
|
41
|
+
store_dir { "/store/dir/#{model.id}" }
|
42
|
+
process { |contents, name| ["FAKE: #{store_dir}", name] }
|
43
|
+
end
|
44
|
+
}
|
45
|
+
|
46
|
+
it do
|
47
|
+
with_test_file("example.xml") do |example, name|
|
48
|
+
a = klass.new
|
49
|
+
a.file = example
|
50
|
+
path = a.file.write
|
51
|
+
|
52
|
+
contents = Saviour::Config.storage.read(path)
|
53
|
+
expect(Saviour::Config.storage.exists?(path)).to be_truthy
|
54
|
+
expect(contents).to eq "FAKE: /store/dir/87"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
37
58
|
end
|
@@ -27,6 +27,11 @@ describe Saviour::S3Storage do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
it "raises exception if key > 1024 bytes" do
|
31
|
+
key = "a" * 1025
|
32
|
+
expect { subject.write("contents", key) }.to raise_error.with_message(/The key in S3 must be at max 1024 bytes, this key is too big/)
|
33
|
+
end
|
34
|
+
|
30
35
|
describe "overwritting" do
|
31
36
|
context "without overwrite protection" do
|
32
37
|
subject {
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: saviour
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roger Campos
|
@@ -173,12 +173,12 @@ files:
|
|
173
173
|
- lib/saviour/validator.rb
|
174
174
|
- lib/saviour/version.rb
|
175
175
|
- saviour.gemspec
|
176
|
-
- spec/feature/access_to_model_and_mounted_as_spec.rb
|
177
176
|
- spec/feature/allow_overriding_attached_as_method.rb
|
178
177
|
- spec/feature/crud_workflows_spec.rb
|
179
178
|
- spec/feature/dirty_spec.rb
|
180
179
|
- spec/feature/follow_file_spec.rb
|
181
180
|
- spec/feature/persisted_path_spec.rb
|
181
|
+
- spec/feature/processors_api.rb
|
182
182
|
- spec/feature/reload_model_spec.rb
|
183
183
|
- spec/feature/rewind_source_before_read.rb
|
184
184
|
- spec/feature/uploader_declaration.rb
|