jaxx 0.0.15 → 0.0.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/jaxx/cli.rb +1 -0
- data/lib/jaxx/process.rb +1 -1
- data/lib/jaxx/upload.rb +40 -10
- data/lib/jaxx/version.rb +1 -1
- data/spec/lib/jaxx/upload_spec.rb +38 -14
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NWE4Njg1NTJkYjVlNzczODI4NDZiOWExZjRhMTQ5NDkyZjUzMWRjYQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MDI3NWMxNWJjODg5ZDk1MWIxNjBiNTExYTViZDRhOWQ4MjFmOTM4MA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZjkxNmI3M2I0YTMzZWQzNDdhMjY4MzM5MzNlZmE3ZmY4NWIxODQ4MzFmNTdj
|
10
|
+
MWU2YjdjNGM3NmVhMmNjMjI3OGMzOTcwM2JkNjQ1NWNmZDkxNjk0NzAyMmNk
|
11
|
+
MDBkODExNzUzYzVkODI5YjQwZDRiNWRiOGZlN2ZiYTQ1OTY3N2I=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NWQ3ZmVmMmI4Y2FjYzJjZGVkOGQ5ZTEzOTZhN2JlNzhiYjJhZGUwOWExOTg0
|
14
|
+
MWE1NGQ5Yjc2NjUyZDRjZTc1YWFkN2U0NmZlMDU4YmU5MjE4NzhiMjExNGVk
|
15
|
+
OTgzOTJkOTZmY2MzY2UwMGEyYTVkNjQ1NWU3NDU5YjcyMmYzZGY=
|
data/lib/jaxx/cli.rb
CHANGED
@@ -31,6 +31,7 @@ module Jaxx
|
|
31
31
|
o.on('-f', '--file [FILE]') { |f| options['file'] = f }
|
32
32
|
o.on('-n', '--name [name]') { |f| options['filename'] = f }
|
33
33
|
o.on('-p', '--privacy [privacy]') { |p| options['privacy'] = p }
|
34
|
+
o.on('-r', '--retries [retries]') { |r| options['retries'] = r }
|
34
35
|
o.on('-h', '--help') { o }
|
35
36
|
end
|
36
37
|
end
|
data/lib/jaxx/process.rb
CHANGED
@@ -40,7 +40,7 @@ module Jaxx
|
|
40
40
|
|
41
41
|
["Unable to process transaction: ", format_errors(errs)].flatten.each do |msg|
|
42
42
|
Jaxx.logger.write msg
|
43
|
-
end and raise(RuntimeError) unless errs.empty?
|
43
|
+
end and raise(RuntimeError, errs.inspect) unless errs.empty?
|
44
44
|
|
45
45
|
block.call(storage)
|
46
46
|
end
|
data/lib/jaxx/upload.rb
CHANGED
@@ -4,11 +4,14 @@ require 'mime/types'
|
|
4
4
|
module Jaxx
|
5
5
|
class Upload
|
6
6
|
|
7
|
-
|
7
|
+
DEFAULT_RETRIES = 3
|
8
|
+
|
9
|
+
attr_reader :process, :retries
|
8
10
|
|
9
11
|
def initialize args = {}
|
10
|
-
@process
|
12
|
+
@process = Process.new(args.merge('validations' => [:privacy, :file_exists, :file_presence]))
|
11
13
|
@filename = args['filename']
|
14
|
+
@retries = args['retries'] || DEFAULT_RETRIES
|
12
15
|
end
|
13
16
|
|
14
17
|
def filename
|
@@ -27,18 +30,45 @@ module Jaxx
|
|
27
30
|
|
28
31
|
def execute
|
29
32
|
process.start do |storage|
|
30
|
-
|
31
|
-
directory ||= storage.directories.create(:key => process.bucket, :public => process.public?)
|
33
|
+
dir, attempts = remote_directory(storage), 0
|
32
34
|
|
33
35
|
files.each do |file, name|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
stat, exc = false, nil
|
37
|
+
attempts += 1
|
38
|
+
|
39
|
+
begin
|
40
|
+
stat = create_file dir, file, name
|
41
|
+
rescue => ex
|
42
|
+
exc = ex
|
43
|
+
end
|
44
|
+
|
45
|
+
if !stat and attempts >= self.retries
|
46
|
+
raise("File process failed: #{file}:#{name} : #{exc.message rescue nil}")
|
47
|
+
elsif !stat
|
48
|
+
redo
|
49
|
+
end
|
50
|
+
|
51
|
+
attempts = 0
|
40
52
|
end
|
41
53
|
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def remote_directory storage
|
60
|
+
dir = storage.directories.get(process.bucket)
|
61
|
+
dir ||= storage.directories.create(:key => process.bucket, :public => process.public?)
|
62
|
+
dir
|
63
|
+
end
|
64
|
+
|
65
|
+
def create_file dir, file, name
|
66
|
+
dir.files.create(
|
67
|
+
:key => name || file,
|
68
|
+
:body => File.read(file),
|
69
|
+
:public => process.public?,
|
70
|
+
:content_type => MIME::Types.type_for(file).last
|
71
|
+
)
|
42
72
|
end
|
43
73
|
|
44
74
|
end
|
data/lib/jaxx/version.rb
CHANGED
@@ -1,25 +1,19 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'fog/aws/models/storage/directories'
|
2
3
|
|
3
4
|
module Jaxx
|
4
5
|
describe Upload do
|
5
6
|
|
6
7
|
describe "#process" do
|
7
|
-
let(:args) { ({
|
8
|
+
let(:args) { ({
|
9
|
+
'access_key' => 'foo',
|
10
|
+
'access_secret' => 'bar',
|
11
|
+
'file' => File.expand_path('../bar.txt', __FILE__),
|
12
|
+
'bucket' => 'temp'
|
13
|
+
}) }
|
8
14
|
|
9
15
|
subject { described_class.new(args) }
|
10
16
|
|
11
|
-
before :each do
|
12
|
-
Fog.mock!
|
13
|
-
end
|
14
|
-
|
15
|
-
it "sends file to storage" do
|
16
|
-
File.stub(:exist?).with(args['file']).and_return(true)
|
17
|
-
File.should_receive(:read).with(args['file']).and_return("")
|
18
|
-
File.should_receive(:basename).with(args['file']).and_return('bar.txt')
|
19
|
-
|
20
|
-
subject.execute
|
21
|
-
end
|
22
|
-
|
23
17
|
it "defaults filename to original filename" do
|
24
18
|
subject.filename.should eq('bar.txt')
|
25
19
|
end
|
@@ -28,7 +22,37 @@ module Jaxx
|
|
28
22
|
args['filename'] = 'foo.txt'
|
29
23
|
subject.filename.should eq('foo.txt')
|
30
24
|
end
|
31
|
-
end
|
32
25
|
|
26
|
+
describe "sending files" do
|
27
|
+
let(:files) { double('files', merge_attributes: {}, load: {}) }
|
28
|
+
|
29
|
+
before :each do
|
30
|
+
Fog.mock!
|
31
|
+
File.stub(:exist?).with(args['file']).and_return(true)
|
32
|
+
File.stub(:basename).with(args['file']).and_return('bar.txt')
|
33
|
+
Fog::Storage::AWS::Directory.any_instance.stub(:files).and_return(files)
|
34
|
+
File.stub(:read).with(args['file']).any_number_of_times.and_return("")
|
35
|
+
end
|
36
|
+
|
37
|
+
it "to storage" do
|
38
|
+
files.should_receive(:create).and_return(true)
|
39
|
+
|
40
|
+
subject.execute
|
41
|
+
end
|
42
|
+
|
43
|
+
it "with retries" do
|
44
|
+
files.should_receive(:create).exactly(subject.retries).times.and_return(false)
|
45
|
+
|
46
|
+
-> { subject.execute }.should raise_error(RuntimeError)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "with failed create" do
|
50
|
+
files.should_receive(:create).exactly(subject.retries).times.and_raise(RuntimeError)
|
51
|
+
|
52
|
+
-> { subject.execute }.should raise_error(RuntimeError)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
33
57
|
end
|
34
58
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jaxx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marc Watts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-03-
|
11
|
+
date: 2013-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog
|