lobber 0.0.4 → 0.0.5
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/.gitignore +2 -1
- data/.travis.yml +9 -2
- data/Gemfile +4 -0
- data/README.md +15 -3
- data/bin/lob +1 -1
- data/lib/lobber/cli.rb +4 -2
- data/lib/lobber/uploader.rb +29 -6
- data/lib/lobber/version.rb +1 -1
- data/lobber.gemspec +1 -2
- data/spec/lib/lobber/cli_spec.rb +19 -14
- data/spec/lib/lobber/uploader_spec.rb +102 -39
- data/spec/lib/lobber_spec.rb +5 -5
- data/spec/support/matchers/exit_with_code.rb +2 -2
- metadata +3 -18
- data/Gemfile.lock +0 -74
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3e4b64ac5a67f442ad4d770cae92ddd01fc6011
|
4
|
+
data.tar.gz: 430acda44cd0438a5e276d046d50dd928d5f98c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a070ef094573df7e5d0e6a10cbff9db833771326926aad4e23862a17847b70af0c0f5a0dd2f1f988e043c0bd162860eece847d02dad0896d073ce4073ada93f
|
7
|
+
data.tar.gz: 688940cac81074d6abd126d2abcacb632ded2efbf7d4c3724720dfb145e004f78fa819cd9fe1feaf78115b26faa847ab22ef463f58f6b7ee9aac4e006b2e34ad
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
[](https://travis-ci.org/mdb/lobber)
|
2
|
+
[](https://codeclimate.com/github/mdb/lobber)
|
2
3
|
|
3
4
|
# Lobber
|
4
5
|
|
@@ -10,11 +11,22 @@ Quickly toss a directory to Amazon S3 from the command line.
|
|
10
11
|
|
11
12
|
## Usage
|
12
13
|
|
13
|
-
lob some_directory
|
14
|
+
$ lob some_directory
|
15
|
+
some_directory/index.html -> index.html
|
16
|
+
some_directory/stylesheets/application.css -> stylesheets/application.css
|
14
17
|
|
15
|
-
|
18
|
+
Pass in a bucket name to substitute your $FOG_DIRECTORY env variable:
|
19
|
+
|
20
|
+
$ lob some_directory --bucket some_aws_bucket
|
21
|
+
|
22
|
+
Set `--dry-run` to just see what files would be uploaded:
|
23
|
+
|
24
|
+
$ log some_directory --dry-run
|
25
|
+
|
26
|
+
Set `--no-verbose` to suppress printing filenames while uploading:
|
27
|
+
|
28
|
+
$ log some_directory --no-verbose
|
16
29
|
|
17
|
-
lob some_directory --bucket some_aws_bucket
|
18
30
|
|
19
31
|
## Required Environment Variables
|
20
32
|
|
data/bin/lob
CHANGED
data/lib/lobber/cli.rb
CHANGED
@@ -5,7 +5,9 @@ module Lobber
|
|
5
5
|
default_task :lob
|
6
6
|
|
7
7
|
desc "DIRECTORY", "Upload a directory to Amazon S3"
|
8
|
-
|
8
|
+
method_option :bucket, type: :string
|
9
|
+
method_option :dry_run, default: false, type: :boolean
|
10
|
+
method_option :verbose, default: true, type: :boolean
|
9
11
|
def lob(directory = nil)
|
10
12
|
return usage unless directory
|
11
13
|
|
@@ -14,7 +16,7 @@ module Lobber
|
|
14
16
|
exit 1
|
15
17
|
end
|
16
18
|
|
17
|
-
Lobber.upload(directory, options
|
19
|
+
Lobber.upload(directory, options)
|
18
20
|
|
19
21
|
say "Successfully uploaded #{directory}", "\033[32m"
|
20
22
|
end
|
data/lib/lobber/uploader.rb
CHANGED
@@ -3,11 +3,14 @@ require 'rake'
|
|
3
3
|
|
4
4
|
module Lobber
|
5
5
|
class Uploader
|
6
|
-
attr_reader :directory, :bucket_name
|
6
|
+
attr_reader :directory, :bucket_name, :dry_run, :verbose
|
7
7
|
|
8
|
-
def initialize(directory,
|
9
|
-
@bucket_name = bucket_name
|
8
|
+
def initialize(directory, options = {})
|
10
9
|
@directory = sanitize(directory)
|
10
|
+
|
11
|
+
@bucket_name = options.fetch('bucket', nil)
|
12
|
+
@dry_run = options.fetch('dry_run', false)
|
13
|
+
@verbose = options.fetch('verbose', true)
|
11
14
|
end
|
12
15
|
|
13
16
|
def upload
|
@@ -44,18 +47,29 @@ module Lobber
|
|
44
47
|
end
|
45
48
|
|
46
49
|
def create_directory directory
|
50
|
+
return if dry_run
|
47
51
|
bucket.files.create(key: directory, public: true)
|
48
52
|
end
|
49
53
|
|
50
54
|
def create_file file
|
51
|
-
|
55
|
+
key = Pathname.new(file).relative_path_from(Pathname.new(directory)).to_s
|
56
|
+
|
57
|
+
if already_identical?(file, key)
|
58
|
+
log "#{file} identical"
|
59
|
+
return
|
60
|
+
end
|
61
|
+
|
62
|
+
log file, key
|
63
|
+
return if dry_run
|
64
|
+
bucket.files.create(key: key, public: true, body: File.open(file))
|
52
65
|
end
|
53
66
|
|
54
67
|
def s3
|
55
68
|
@s3 ||= Fog::Storage.new(
|
56
69
|
provider: :aws,
|
57
70
|
aws_access_key_id: aws_access_key,
|
58
|
-
aws_secret_access_key: aws_secret_key
|
71
|
+
aws_secret_access_key: aws_secret_key,
|
72
|
+
path_style: fog_directory.include?(?.)
|
59
73
|
)
|
60
74
|
end
|
61
75
|
|
@@ -80,11 +94,20 @@ module Lobber
|
|
80
94
|
end
|
81
95
|
|
82
96
|
def fog_directory
|
83
|
-
|
97
|
+
bucket_name || ENV['FOG_DIRECTORY']
|
84
98
|
end
|
85
99
|
|
86
100
|
private
|
87
101
|
|
102
|
+
def already_identical?(file, key)
|
103
|
+
remote_file = bucket.files.head(key)
|
104
|
+
remote_file && Digest::MD5.hexdigest(File.read(file)) == remote_file.etag
|
105
|
+
end
|
106
|
+
|
107
|
+
def log(*strings)
|
108
|
+
puts strings.join(' -> ') if verbose
|
109
|
+
end
|
110
|
+
|
88
111
|
def sanitize(directory_path)
|
89
112
|
if directory_path.match(/\/$/)
|
90
113
|
directory_path.chop
|
data/lib/lobber/version.rb
CHANGED
data/lobber.gemspec
CHANGED
@@ -21,8 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency "fog"
|
22
22
|
spec.add_dependency "thor"
|
23
23
|
|
24
|
-
spec.add_development_dependency "bundler"
|
25
|
-
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency "bundler"
|
26
25
|
spec.add_development_dependency "rspec"
|
27
26
|
spec.add_development_dependency "simplecov"
|
28
27
|
end
|
data/spec/lib/lobber/cli_spec.rb
CHANGED
@@ -14,7 +14,7 @@ describe Lobber::CLI do
|
|
14
14
|
before do
|
15
15
|
Fog.mock!
|
16
16
|
File.open(input_filename, 'w') {|file| file.write some_file }
|
17
|
-
cli.
|
17
|
+
allow(cli).to receive :say
|
18
18
|
end
|
19
19
|
|
20
20
|
after do
|
@@ -25,33 +25,38 @@ describe Lobber::CLI do
|
|
25
25
|
describe "#lob" do
|
26
26
|
context "it's not passed any arguments" do
|
27
27
|
it "returns usage details" do
|
28
|
-
cli.
|
28
|
+
expect(cli).to receive(:usage).exactly(1).times
|
29
29
|
cli.lob
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
33
|
context "it's passed a directory that does not exist" do
|
34
34
|
it "reports that it was passed an invalid directory and exits with an exit code of 1" do
|
35
|
-
Kernel.
|
36
|
-
File.
|
37
|
-
cli.
|
38
|
-
|
35
|
+
allow(Kernel).to receive(:exit).and_return true
|
36
|
+
allow(File).to receive(:directory?).and_return false
|
37
|
+
expect(cli).to receive(:error).with("foo is not a valid directory")
|
38
|
+
|
39
|
+
begin
|
40
|
+
cli.lob('foo')
|
41
|
+
rescue SystemExit => e
|
42
|
+
expect(e.status).to eq(1)
|
43
|
+
end
|
39
44
|
end
|
40
45
|
end
|
41
46
|
|
42
47
|
context "when it's passed a valid directory" do
|
43
48
|
before :each do
|
44
|
-
ENV.
|
45
|
-
File.
|
49
|
+
allow(ENV).to receive(:[]).and_return true
|
50
|
+
allow(File).to receive(:directory?).and_return true
|
46
51
|
end
|
47
52
|
|
48
53
|
it "uploads" do
|
49
|
-
Lobber.
|
54
|
+
expect(Lobber).to receive(:upload).with("foo", {})
|
50
55
|
cli.lob "foo"
|
51
56
|
end
|
52
57
|
|
53
58
|
it "reports that the directory has been successfully uploaded" do
|
54
|
-
cli.
|
59
|
+
expect(cli).to receive(:say).with("Successfully uploaded foo", "\e[32m")
|
55
60
|
cli.lob "foo"
|
56
61
|
end
|
57
62
|
end
|
@@ -61,10 +66,10 @@ describe Lobber::CLI do
|
|
61
66
|
subject(:usage) { cli.usage }
|
62
67
|
|
63
68
|
it "displays version info, GitHub info, and help" do
|
64
|
-
cli.
|
65
|
-
cli.
|
66
|
-
cli.
|
67
|
-
cli.
|
69
|
+
expect(cli).to receive(:say).with('Lobber 0.0.5')
|
70
|
+
expect(cli).to receive(:say).with('https://github.com/mdb/lob')
|
71
|
+
expect(cli).to receive(:say).with("\n")
|
72
|
+
expect(cli).to receive(:help)
|
68
73
|
|
69
74
|
usage
|
70
75
|
end
|
@@ -1,14 +1,18 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Lobber::Uploader do
|
4
|
+
subject(:uploader) { Lobber::Uploader.new(directory_name, options) }
|
5
|
+
|
4
6
|
let(:directory_name) { 'spec' }
|
5
|
-
let(:
|
7
|
+
let(:options) { {} }
|
6
8
|
|
7
9
|
before :each do
|
8
10
|
Fog.mock!
|
9
|
-
uploader.
|
10
|
-
uploader.
|
11
|
-
uploader.
|
11
|
+
allow(uploader).to receive(:aws_access_key).and_return 'fake key'
|
12
|
+
allow(uploader).to receive(:aws_secret_key).and_return 'fake key'
|
13
|
+
allow(uploader).to receive(:verbose).and_return false
|
14
|
+
allow(ENV).to receive(:[])
|
15
|
+
allow(ENV).to receive(:[]).with('FOG_DIRECTORY').and_return directory_name
|
12
16
|
end
|
13
17
|
|
14
18
|
after :each do
|
@@ -16,31 +20,31 @@ describe Lobber::Uploader do
|
|
16
20
|
end
|
17
21
|
|
18
22
|
it "exists as a class within the Lob module" do
|
19
|
-
Lobber::Uploader.class.
|
23
|
+
expect(Lobber::Uploader.class).to eq Class
|
20
24
|
end
|
21
25
|
|
22
26
|
describe "#upload" do
|
23
27
|
before :each do
|
24
|
-
uploader.
|
28
|
+
allow(uploader).to receive(:verify_env_variables).and_return(true)
|
25
29
|
end
|
26
30
|
|
27
31
|
it "verifies necessary environment variables" do
|
28
|
-
uploader.
|
32
|
+
expect(uploader).to receive :verify_env_variables
|
29
33
|
uploader.upload
|
30
34
|
end
|
31
35
|
|
32
36
|
it "calls #create_file_or_directory with each file or directory in the directory" do
|
33
|
-
uploader.
|
34
|
-
uploader.
|
35
|
-
uploader.
|
37
|
+
allow(uploader).to receive(:directory_content).and_return 'foo' => 'bar', 'baz' => 'bim'
|
38
|
+
expect(uploader).to receive(:create_file_or_directory).with('foo', 'bar')
|
39
|
+
expect(uploader).to receive(:create_file_or_directory).with('baz', 'bim')
|
36
40
|
uploader.upload
|
37
41
|
end
|
38
42
|
end
|
39
43
|
|
40
44
|
describe "#directory_content" do
|
41
45
|
it "returns the content for the directory it's passed" do
|
42
|
-
File.
|
43
|
-
uploader.directory_content.
|
46
|
+
allow(File).to receive(:read).and_return 'content'
|
47
|
+
expect(uploader.directory_content).to eq(
|
44
48
|
"spec/lib/" => :directory,
|
45
49
|
"spec/lib/lobber/" => :directory,
|
46
50
|
"spec/lib/lobber/uploader_spec.rb" => "content",
|
@@ -56,22 +60,22 @@ describe Lobber::Uploader do
|
|
56
60
|
|
57
61
|
describe "#bucket" do
|
58
62
|
it "creates a bucket of the same name" do
|
59
|
-
uploader.bucket.class.
|
60
|
-
uploader.bucket.key.
|
63
|
+
expect(uploader.bucket.class).to eq Fog::Storage::AWS::Directory
|
64
|
+
expect(uploader.bucket.key).to eq 'spec'
|
61
65
|
end
|
62
66
|
end
|
63
67
|
|
64
68
|
describe "#create_file_or_directory" do
|
65
69
|
context "when it is called with the directory flag" do
|
66
70
|
it "calls #create_directory" do
|
67
|
-
uploader.
|
71
|
+
expect(uploader).to receive(:create_directory).with 'foo'
|
68
72
|
uploader.create_file_or_directory 'foo', :directory
|
69
73
|
end
|
70
74
|
end
|
71
75
|
|
72
76
|
context "when it is called without the directory flag" do
|
73
77
|
it "calls #create_directory" do
|
74
|
-
uploader.
|
78
|
+
expect(uploader).to receive(:create_file).with 'foo'
|
75
79
|
uploader.create_file_or_directory 'foo', 'some_content'
|
76
80
|
end
|
77
81
|
end
|
@@ -79,48 +83,109 @@ describe Lobber::Uploader do
|
|
79
83
|
|
80
84
|
describe "#create_directory" do
|
81
85
|
it "creates an s3 directory" do
|
82
|
-
uploader.bucket.files.
|
86
|
+
expect(uploader.bucket.files).to receive(:create).with(key: 'foo', public: true)
|
83
87
|
uploader.create_directory "foo"
|
84
88
|
end
|
85
89
|
end
|
86
90
|
|
87
91
|
describe "#create_file" do
|
92
|
+
before do
|
93
|
+
allow(File).to receive(:open).and_return 'content'
|
94
|
+
end
|
95
|
+
|
96
|
+
let(:filename) { File.join(directory_name, 'foo.bar') }
|
97
|
+
|
88
98
|
it "creates an s3 file" do
|
89
|
-
|
90
|
-
|
91
|
-
|
99
|
+
expect(uploader.bucket.files)
|
100
|
+
.to receive(:create)
|
101
|
+
.with(key: 'foo.bar', public: true, body: 'content')
|
102
|
+
uploader.create_file filename
|
103
|
+
end
|
104
|
+
|
105
|
+
it "logs each file to the screen" do
|
106
|
+
expect(uploader).to receive(:log).with(filename, 'foo.bar')
|
107
|
+
uploader.create_file filename
|
108
|
+
end
|
109
|
+
|
110
|
+
context "when the local and remote file are identical" do
|
111
|
+
before do
|
112
|
+
allow(uploader).to receive(:already_identical?).and_return(true)
|
113
|
+
end
|
114
|
+
|
115
|
+
it "does not upload the file again" do
|
116
|
+
expect(uploader.bucket.files).to_not receive(:create)
|
117
|
+
uploader.create_file filename
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context "with --dry-run" do
|
122
|
+
let(:options) { { 'dry_run' => true } }
|
123
|
+
|
124
|
+
it "does not create directories" do
|
125
|
+
expect(uploader.bucket.files).to_not receive(:create)
|
126
|
+
uploader.create_directory directory_name
|
127
|
+
end
|
128
|
+
|
129
|
+
it "does not upload files" do
|
130
|
+
expect(uploader.bucket.files).to_not receive(:create)
|
131
|
+
uploader.create_file filename
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context "with a directory outside of the working path" do
|
136
|
+
let(:directory_name) { '/home/' }
|
137
|
+
let(:filename) { '/home/foo/bar.baz' }
|
138
|
+
|
139
|
+
it "strips the directory name from the upload key" do
|
140
|
+
expect(uploader.bucket.files)
|
141
|
+
.to receive(:create)
|
142
|
+
.with(key: 'foo/bar.baz', public: true, body: 'content')
|
143
|
+
uploader.create_file filename
|
144
|
+
end
|
92
145
|
end
|
93
146
|
end
|
94
147
|
|
95
148
|
describe "#s3" do
|
96
149
|
before :each do
|
97
|
-
uploader.
|
98
|
-
uploader.
|
150
|
+
allow(uploader).to receive(:aws_access_key).and_return('aws_access_key')
|
151
|
+
allow(uploader).to receive(:aws_secret_key).and_return('aws_secret_key')
|
99
152
|
end
|
100
153
|
|
101
154
|
it "it instantiates a new Fog::Storage class with the proper arguments" do
|
102
|
-
Fog::Storage.
|
155
|
+
expect(Fog::Storage).to receive(:new).with(
|
103
156
|
provider: :aws,
|
104
157
|
aws_access_key_id: 'aws_access_key',
|
105
|
-
aws_secret_access_key: 'aws_secret_key'
|
158
|
+
aws_secret_access_key: 'aws_secret_key',
|
159
|
+
path_style: false
|
106
160
|
)
|
107
161
|
uploader.s3
|
108
162
|
end
|
163
|
+
|
164
|
+
context "with a fog directory that includes a period" do
|
165
|
+
let(:directory_name) { "foo.bar" }
|
166
|
+
|
167
|
+
it "sets path style to true to silence warnings" do
|
168
|
+
expect(Fog::Storage).to receive(:new) do |options|
|
169
|
+
expect(options[:path_style]).to eq(true)
|
170
|
+
end
|
171
|
+
uploader.s3
|
172
|
+
end
|
173
|
+
end
|
109
174
|
end
|
110
175
|
|
111
176
|
describe "#verify_env_variables" do
|
112
177
|
context "when one of the required environment variables is absent" do
|
113
178
|
it "raises an error reporting that the missing environment variable is required" do
|
114
|
-
uploader.
|
179
|
+
allow(uploader).to receive(:aws_access_key).and_return nil
|
115
180
|
expect { uploader.verify_env_variables }.to raise_error(RuntimeError, 'Required environment variables missing: ["AWS_ACCESS_KEY"]')
|
116
181
|
end
|
117
182
|
end
|
118
183
|
|
119
184
|
context "when all of the required environment variables are defined" do
|
120
185
|
before :each do
|
121
|
-
uploader.
|
122
|
-
uploader.
|
123
|
-
uploader.
|
186
|
+
allow(uploader).to receive(:aws_access_key).and_return true
|
187
|
+
allow(uploader).to receive(:aws_secret_key).and_return true
|
188
|
+
allow(uploader).to receive(:fog_directory).and_return true
|
124
189
|
end
|
125
190
|
|
126
191
|
it "it does not raise an error" do
|
@@ -128,7 +193,7 @@ describe Lobber::Uploader do
|
|
128
193
|
end
|
129
194
|
|
130
195
|
it "returns true" do
|
131
|
-
uploader.verify_env_variables.
|
196
|
+
expect(uploader.verify_env_variables).to eq true
|
132
197
|
end
|
133
198
|
end
|
134
199
|
end
|
@@ -136,8 +201,8 @@ describe Lobber::Uploader do
|
|
136
201
|
describe "#aws_access_key" do
|
137
202
|
it "returns the value of the AWS_ACCESS_KEY environment variable" do
|
138
203
|
some_uploader = Lobber::Uploader.new 'foo'
|
139
|
-
ENV.
|
140
|
-
ENV.
|
204
|
+
allow(ENV).to receive(:[])
|
205
|
+
expect(ENV).to receive(:[]).with 'AWS_ACCESS_KEY'
|
141
206
|
some_uploader.aws_access_key
|
142
207
|
end
|
143
208
|
end
|
@@ -145,8 +210,8 @@ describe Lobber::Uploader do
|
|
145
210
|
describe "#aws_secret_key" do
|
146
211
|
it "returns the value of the AWS_ACCESS_KEY environment variable" do
|
147
212
|
some_uploader = Lobber::Uploader.new 'foo'
|
148
|
-
ENV.
|
149
|
-
ENV.
|
213
|
+
allow(ENV).to receive(:[])
|
214
|
+
expect(ENV).to receive(:[]).with 'AWS_SECRET_KEY'
|
150
215
|
some_uploader.aws_secret_key
|
151
216
|
end
|
152
217
|
end
|
@@ -154,17 +219,15 @@ describe Lobber::Uploader do
|
|
154
219
|
describe "#fog_directory" do
|
155
220
|
context "the uploader is not instantiated with a bucket name parameter" do
|
156
221
|
it "returns the value of the FOG_DIRECTORY environment variable" do
|
157
|
-
|
158
|
-
ENV.stub(:[])
|
159
|
-
ENV.should_receive(:[]).with 'FOG_DIRECTORY'
|
160
|
-
some_uploader.fog_directory
|
222
|
+
expect(uploader.fog_directory).to eq(directory_name)
|
161
223
|
end
|
162
224
|
end
|
163
225
|
|
164
226
|
context "the uploader is instantiated with a bucket name parameter" do
|
227
|
+
let(:options) { { 'bucket' => 'bar' } }
|
228
|
+
|
165
229
|
it "returns the value of the bucket name it was passed on instantiation" do
|
166
|
-
|
167
|
-
some_uploader.fog_directory.should eq 'bar'
|
230
|
+
expect(uploader.fog_directory).to eq('bar')
|
168
231
|
end
|
169
232
|
end
|
170
233
|
end
|
data/spec/lib/lobber_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Lobber do
|
4
4
|
it "exists as a module" do
|
5
|
-
Lobber.class.
|
5
|
+
expect(Lobber.class).to eq Module
|
6
6
|
end
|
7
7
|
|
8
8
|
describe ".upload" do
|
@@ -12,8 +12,8 @@ describe Lobber do
|
|
12
12
|
|
13
13
|
context "it is only passed a directory name, and not an S3 bucket name" do
|
14
14
|
it "verifies environment variables and uploads the directory and its contents to S3" do
|
15
|
-
Lobber::Uploader.
|
16
|
-
@uploader_double.
|
15
|
+
expect(Lobber::Uploader).to receive(:new).with('foo', nil).and_return(@uploader_double)
|
16
|
+
expect(@uploader_double).to receive(:upload)
|
17
17
|
|
18
18
|
Lobber.upload 'foo'
|
19
19
|
end
|
@@ -21,8 +21,8 @@ describe Lobber do
|
|
21
21
|
|
22
22
|
context "it is passed a directory name and an S3 bucket name" do
|
23
23
|
it "verifies environment variables and uploads the directory and its contents to the specified S3 bucket" do
|
24
|
-
Lobber::Uploader.
|
25
|
-
@uploader_double.
|
24
|
+
expect(Lobber::Uploader).to receive(:new).with('foo', 'bar').and_return(@uploader_double)
|
25
|
+
expect(@uploader_double).to receive(:upload)
|
26
26
|
|
27
27
|
Lobber.upload 'foo', 'bar'
|
28
28
|
end
|
@@ -8,11 +8,11 @@ RSpec::Matchers.define :exit_with_code do |exp_code|
|
|
8
8
|
end
|
9
9
|
actual and actual == exp_code
|
10
10
|
end
|
11
|
-
|
11
|
+
failure_message do |block|
|
12
12
|
"expected block to call exit(#{exp_code}) but exit" +
|
13
13
|
(actual.nil? ? " not called" : "(#{actual}) was called")
|
14
14
|
end
|
15
|
-
|
15
|
+
failure_message_when_negated do |block|
|
16
16
|
"expected block not to call exit(#{exp_code})"
|
17
17
|
end
|
18
18
|
description do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lobber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Ball
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog
|
@@ -40,20 +40,6 @@ dependencies:
|
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ~>
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.3'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '1.3'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rake
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - '>='
|
@@ -107,7 +93,6 @@ files:
|
|
107
93
|
- .ruby-version
|
108
94
|
- .travis.yml
|
109
95
|
- Gemfile
|
110
|
-
- Gemfile.lock
|
111
96
|
- LICENSE.txt
|
112
97
|
- README.md
|
113
98
|
- Rakefile
|
@@ -142,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
127
|
version: '0'
|
143
128
|
requirements: []
|
144
129
|
rubyforge_project:
|
145
|
-
rubygems_version: 2.
|
130
|
+
rubygems_version: 2.2.2
|
146
131
|
signing_key:
|
147
132
|
specification_version: 4
|
148
133
|
summary: Toss a directory to AWS S3
|
data/Gemfile.lock
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
lobber (0.0.4)
|
5
|
-
fog
|
6
|
-
thor
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
builder (3.2.2)
|
12
|
-
coderay (1.0.9)
|
13
|
-
diff-lcs (1.2.4)
|
14
|
-
excon (0.25.3)
|
15
|
-
ffi (1.9.0-java)
|
16
|
-
fog (1.15.0)
|
17
|
-
builder
|
18
|
-
excon (~> 0.25.0)
|
19
|
-
formatador (~> 0.2.0)
|
20
|
-
mime-types
|
21
|
-
multi_json (~> 1.0)
|
22
|
-
net-scp (~> 1.1)
|
23
|
-
net-ssh (>= 2.1.3)
|
24
|
-
nokogiri (~> 1.5)
|
25
|
-
ruby-hmac
|
26
|
-
formatador (0.2.4)
|
27
|
-
method_source (0.8.2)
|
28
|
-
mime-types (1.25)
|
29
|
-
mini_portile (0.5.1)
|
30
|
-
multi_json (1.7.9)
|
31
|
-
net-scp (1.1.2)
|
32
|
-
net-ssh (>= 2.6.5)
|
33
|
-
net-ssh (2.6.8)
|
34
|
-
nokogiri (1.6.0)
|
35
|
-
mini_portile (~> 0.5.0)
|
36
|
-
pry (0.9.12.2)
|
37
|
-
coderay (~> 1.0.5)
|
38
|
-
method_source (~> 0.8)
|
39
|
-
slop (~> 3.4)
|
40
|
-
pry (0.9.12.2-java)
|
41
|
-
coderay (~> 1.0.5)
|
42
|
-
method_source (~> 0.8)
|
43
|
-
slop (~> 3.4)
|
44
|
-
spoon (~> 0.0)
|
45
|
-
rake (10.1.0)
|
46
|
-
rspec (2.14.1)
|
47
|
-
rspec-core (~> 2.14.0)
|
48
|
-
rspec-expectations (~> 2.14.0)
|
49
|
-
rspec-mocks (~> 2.14.0)
|
50
|
-
rspec-core (2.14.5)
|
51
|
-
rspec-expectations (2.14.2)
|
52
|
-
diff-lcs (>= 1.1.3, < 2.0)
|
53
|
-
rspec-mocks (2.14.3)
|
54
|
-
ruby-hmac (0.4.0)
|
55
|
-
simplecov (0.7.1)
|
56
|
-
multi_json (~> 1.0)
|
57
|
-
simplecov-html (~> 0.7.1)
|
58
|
-
simplecov-html (0.7.1)
|
59
|
-
slop (3.4.6)
|
60
|
-
spoon (0.0.4)
|
61
|
-
ffi
|
62
|
-
thor (0.18.1)
|
63
|
-
|
64
|
-
PLATFORMS
|
65
|
-
java
|
66
|
-
ruby
|
67
|
-
|
68
|
-
DEPENDENCIES
|
69
|
-
bundler (~> 1.3)
|
70
|
-
lobber!
|
71
|
-
pry
|
72
|
-
rake
|
73
|
-
rspec
|
74
|
-
simplecov
|