asset_cloud 2.5.3 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/.rubocop_todo.yml +326 -0
- data/History.md +6 -0
- data/README.rdoc +8 -0
- data/Rakefile +5 -2
- data/asset_cloud.gemspec +2 -2
- data/lib/asset_cloud/asset.rb +4 -0
- data/lib/asset_cloud/metadata.rb +10 -3
- data/spec/active_record_bucket_spec.rb +27 -27
- data/spec/asset_cloud/metadata_spec.rb +31 -0
- data/spec/asset_extension_spec.rb +21 -18
- data/spec/asset_spec.rb +47 -56
- data/spec/base_spec.rb +60 -62
- data/spec/blackhole_bucket_spec.rb +6 -5
- data/spec/bucket_chain_spec.rb +50 -50
- data/spec/bucket_spec.rb +5 -4
- data/spec/callbacks_spec.rb +31 -31
- data/spec/file_system_spec.rb +15 -16
- data/spec/find_free_key_spec.rb +17 -19
- data/spec/gcs_bucket_remote_spec.rb +18 -19
- data/spec/gcs_bucket_spec.rb +29 -28
- data/spec/memory_bucket_spec.rb +8 -9
- data/spec/mock_s3_interface.rb +4 -3
- data/spec/remote_s3_bucket_spec.rb +17 -16
- data/spec/s3_bucket_spec.rb +12 -12
- data/spec/spec_helper.rb +2 -1
- data/spec/validations_spec.rb +18 -16
- data/spec/versioned_memory_bucket_spec.rb +6 -6
- metadata +9 -5
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
class BlackholeCloud < AssetCloud::Base
|
@@ -8,7 +9,7 @@ describe BlackholeCloud do
|
|
8
9
|
directory = File.dirname(__FILE__) + '/files'
|
9
10
|
|
10
11
|
before do
|
11
|
-
@fs = BlackholeCloud.new(directory
|
12
|
+
@fs = BlackholeCloud.new(directory, 'http://assets/files')
|
12
13
|
end
|
13
14
|
|
14
15
|
it "should allow access to files using the [] operator" do
|
@@ -16,12 +17,12 @@ describe BlackholeCloud do
|
|
16
17
|
end
|
17
18
|
|
18
19
|
it "should return nil for non existent files" do
|
19
|
-
@fs['tmp/image.jpg'].exist
|
20
|
+
expect(@fs['tmp/image.jpg'].exist?).to(eq(false))
|
20
21
|
end
|
21
22
|
|
22
23
|
it "should still return nil, even if you wrote something there" do
|
23
24
|
@fs['tmp/image.jpg'] = 'test'
|
24
|
-
@fs['tmp/image.jpg'].exist
|
25
|
+
expect(@fs['tmp/image.jpg'].exist?).to(eq(false))
|
25
26
|
end
|
26
27
|
|
27
28
|
describe "when using a sub path" do
|
@@ -30,12 +31,12 @@ describe BlackholeCloud do
|
|
30
31
|
end
|
31
32
|
|
32
33
|
it "should return nil for non existent files" do
|
33
|
-
@fs['tmp/image.jpg'].exist
|
34
|
+
expect(@fs['tmp/image.jpg'].exist?).to(eq(false))
|
34
35
|
end
|
35
36
|
|
36
37
|
it "should still return nil, even if you wrote something there" do
|
37
38
|
@fs['tmp/image.jpg'] = 'test'
|
38
|
-
@fs['tmp/image.jpg'].exist
|
39
|
+
expect(@fs['tmp/image.jpg'].exist?).to(eq(false))
|
39
40
|
end
|
40
41
|
end
|
41
42
|
end
|
data/spec/bucket_chain_spec.rb
CHANGED
@@ -1,58 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
class ChainedCloud < AssetCloud::Base
|
4
|
-
bucket :stuff, AssetCloud::BucketChain.chain(
|
5
|
+
bucket :stuff, AssetCloud::BucketChain.chain(AssetCloud::MemoryBucket,
|
5
6
|
AssetCloud::MemoryBucket,
|
6
|
-
AssetCloud::FileSystemBucket
|
7
|
+
AssetCloud::FileSystemBucket)
|
7
8
|
|
8
|
-
bucket :versioned_stuff, AssetCloud::BucketChain.chain(
|
9
|
+
bucket :versioned_stuff, AssetCloud::BucketChain.chain(AssetCloud::FileSystemBucket,
|
9
10
|
AssetCloud::VersionedMemoryBucket,
|
10
|
-
AssetCloud::MemoryBucket
|
11
|
+
AssetCloud::MemoryBucket)
|
11
12
|
end
|
12
13
|
|
13
14
|
describe AssetCloud::BucketChain do
|
14
15
|
directory = File.dirname(__FILE__) + '/files'
|
15
16
|
|
16
17
|
before(:each) do
|
17
|
-
@cloud = ChainedCloud.new(directory
|
18
|
+
@cloud = ChainedCloud.new(directory, 'http://assets/files')
|
18
19
|
@bucket_chain = @cloud.buckets[:stuff]
|
19
20
|
@chained_buckets = @bucket_chain.chained_buckets
|
20
|
-
@chained_buckets.each {|b| b.ls('stuff').each
|
21
|
+
@chained_buckets.each { |b| b.ls('stuff').each(&:delete) }
|
21
22
|
|
22
23
|
@versioned_stuff = @cloud.buckets[:versioned_stuff]
|
23
24
|
end
|
24
25
|
|
25
26
|
describe ".chain" do
|
26
27
|
it 'should take multiple Bucket classes and return a new Bucket class' do
|
27
|
-
@bucket_chain.
|
28
|
+
expect(@bucket_chain).to(be_a_kind_of(AssetCloud::BucketChain))
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
31
32
|
describe "#write" do
|
32
33
|
it 'should write to each sub-bucket when everything is kosher and return the result of the first write' do
|
33
34
|
@chained_buckets.each do |bucket|
|
34
|
-
bucket.
|
35
|
+
expect(bucket).to(receive(:write).with('stuff/foo', 'successful creation').and_return('successful creation'))
|
35
36
|
end
|
36
37
|
|
37
|
-
@bucket_chain.write('stuff/foo', 'successful creation').
|
38
|
+
expect(@bucket_chain.write('stuff/foo', 'successful creation')).to(eq('successful creation'))
|
38
39
|
end
|
39
40
|
it 'should roll back creation-writes and re-raise an error when a bucket raises one' do
|
40
|
-
@chained_buckets.last.
|
41
|
+
expect(@chained_buckets.last).to(receive(:write).with('stuff/foo', 'unsuccessful creation').and_raise('hell'))
|
41
42
|
@chained_buckets[0..-2].each do |bucket|
|
42
|
-
bucket.
|
43
|
-
bucket.
|
43
|
+
expect(bucket).to(receive(:write).with('stuff/foo', 'unsuccessful creation').and_return(true))
|
44
|
+
expect(bucket).to(receive(:delete).with('stuff/foo').and_return(true))
|
44
45
|
end
|
45
46
|
|
46
|
-
|
47
|
+
expect { @bucket_chain.write('stuff/foo', 'unsuccessful creation') }.to(raise_error(RuntimeError))
|
47
48
|
end
|
48
49
|
it 'should roll back update-writes and re-raise an error when a bucket raises one' do
|
49
50
|
@bucket_chain.write('stuff/foo', "original value")
|
50
51
|
|
51
|
-
@chained_buckets.last.
|
52
|
+
expect(@chained_buckets.last).to(receive(:write).with('stuff/foo', 'new value').and_raise('hell'))
|
52
53
|
|
53
|
-
|
54
|
+
expect { @bucket_chain.write('stuff/foo', 'new value') }.to(raise_error(RuntimeError))
|
54
55
|
@chained_buckets.each do |bucket|
|
55
|
-
bucket.read('stuff/foo').
|
56
|
+
expect(bucket.read('stuff/foo')).to(eq('original value'))
|
56
57
|
end
|
57
58
|
end
|
58
59
|
end
|
@@ -62,7 +63,7 @@ describe AssetCloud::BucketChain do
|
|
62
63
|
@bucket_chain.write('stuff/foo', "successful deletion comin' up")
|
63
64
|
|
64
65
|
@chained_buckets.each do |bucket|
|
65
|
-
bucket.
|
66
|
+
expect(bucket).to(receive(:delete).with('stuff/foo').and_return(true))
|
66
67
|
end
|
67
68
|
|
68
69
|
@bucket_chain.delete('stuff/foo')
|
@@ -70,47 +71,46 @@ describe AssetCloud::BucketChain do
|
|
70
71
|
it 'should roll back deletions and re-raise an error when a bucket raises one' do
|
71
72
|
@bucket_chain.write('stuff/foo', "this deletion will fail")
|
72
73
|
|
73
|
-
@chained_buckets.last.
|
74
|
+
expect(@chained_buckets.last).to(receive(:delete).with('stuff/foo').and_raise('hell'))
|
74
75
|
@chained_buckets[0..-2].each do |bucket|
|
75
|
-
bucket.
|
76
|
-
bucket.
|
76
|
+
expect(bucket).to(receive(:delete).with('stuff/foo').and_return(true))
|
77
|
+
expect(bucket).to(receive(:write).with('stuff/foo', 'this deletion will fail').and_return(true))
|
77
78
|
end
|
78
79
|
|
79
|
-
|
80
|
+
expect { @bucket_chain.delete('stuff/foo') }.to(raise_error(RuntimeError))
|
80
81
|
end
|
81
82
|
end
|
82
83
|
|
83
84
|
describe "#read" do
|
84
85
|
it 'should read from only the first available sub-bucket' do
|
85
|
-
@chained_buckets[0].
|
86
|
-
@chained_buckets[0].
|
87
|
-
@chained_buckets[0].
|
86
|
+
expect(@chained_buckets[0]).to(receive(:read).with('stuff/foo').and_raise(NotImplementedError))
|
87
|
+
expect(@chained_buckets[0]).to(receive(:ls).with(nil).and_raise(NoMethodError))
|
88
|
+
expect(@chained_buckets[0]).to(receive(:stat).and_return(:metadata))
|
88
89
|
|
89
|
-
@chained_buckets[1].
|
90
|
-
@chained_buckets[1].
|
91
|
-
@chained_buckets[1].
|
90
|
+
expect(@chained_buckets[1]).to(receive(:read).with('stuff/foo').and_return('bar'))
|
91
|
+
expect(@chained_buckets[1]).to(receive(:ls).with(nil).and_return(:some_assets))
|
92
|
+
expect(@chained_buckets[1]).not_to(receive(:stat))
|
92
93
|
|
93
94
|
@chained_buckets[2..-1].each do |bucket|
|
94
|
-
bucket.
|
95
|
-
bucket.
|
96
|
-
bucket.
|
95
|
+
expect(bucket).not_to(receive(:read))
|
96
|
+
expect(bucket).not_to(receive(:ls))
|
97
|
+
expect(bucket).not_to(receive(:stat))
|
97
98
|
end
|
98
99
|
|
99
|
-
@bucket_chain.read('stuff/foo').
|
100
|
-
@bucket_chain.ls.
|
101
|
-
@bucket_chain.stat.
|
100
|
+
expect(@bucket_chain.read('stuff/foo')).to(eq('bar'))
|
101
|
+
expect(@bucket_chain.ls).to(eq(:some_assets))
|
102
|
+
expect(@bucket_chain.stat).to(eq(:metadata))
|
102
103
|
end
|
103
104
|
end
|
104
105
|
|
105
|
-
|
106
106
|
describe "#read_version" do
|
107
107
|
it 'should read from only the first available sub-bucket' do
|
108
108
|
buckets = @versioned_stuff.chained_buckets
|
109
109
|
|
110
|
-
buckets[1].
|
111
|
-
buckets.last.
|
110
|
+
expect(buckets[1]).to(receive(:read_version).with('stuff/foo', 3).and_return('bar'))
|
111
|
+
expect(buckets.last).not_to(receive(:read_version))
|
112
112
|
|
113
|
-
@versioned_stuff.read_version('stuff/foo', 3).
|
113
|
+
expect(@versioned_stuff.read_version('stuff/foo', 3)).to(eq('bar'))
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
@@ -118,10 +118,10 @@ describe AssetCloud::BucketChain do
|
|
118
118
|
it 'should read from only the first available sub-bucket' do
|
119
119
|
buckets = @versioned_stuff.chained_buckets
|
120
120
|
|
121
|
-
buckets[1].
|
122
|
-
buckets.last.
|
121
|
+
expect(buckets[1]).to(receive(:versions).with('versioned_stuff/foo').and_return([1, 2, 3]))
|
122
|
+
expect(buckets.last).not_to(receive(:versions))
|
123
123
|
|
124
|
-
@versioned_stuff.versions('versioned_stuff/foo').
|
124
|
+
expect(@versioned_stuff.versions('versioned_stuff/foo')).to(eq([1, 2, 3]))
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
@@ -131,28 +131,28 @@ describe AssetCloud::BucketChain do
|
|
131
131
|
@cloud['versioned_stuff/foo'] = content
|
132
132
|
end
|
133
133
|
asset = @cloud['versioned_stuff/foo']
|
134
|
-
asset.value.
|
135
|
-
asset.rollback(1).value.
|
136
|
-
asset.versions.
|
134
|
+
expect(asset.value).to(eq('three'))
|
135
|
+
expect(asset.rollback(1).value).to(eq('one'))
|
136
|
+
expect(asset.versions).to(eq([1, 2, 3]))
|
137
137
|
asset.value = 'four'
|
138
138
|
asset.store
|
139
|
-
asset.versions.
|
139
|
+
expect(asset.versions).to(eq([1, 2, 3, 4]))
|
140
140
|
end
|
141
141
|
end
|
142
142
|
|
143
143
|
describe '#respond_to?' do
|
144
144
|
it 'should return true if any chained buckets respond to the given method' do
|
145
|
-
@bucket_chain.respond_to?(:foo).
|
146
|
-
@chained_buckets[1].
|
147
|
-
@bucket_chain.respond_to?(:bar).
|
145
|
+
expect(@bucket_chain.respond_to?(:foo)).to(eq(false))
|
146
|
+
expect(@chained_buckets[1]).to(receive(:respond_to?).with(:bar).and_return(true))
|
147
|
+
expect(@bucket_chain.respond_to?(:bar)).to(eq(true))
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
151
151
|
describe '#method_missing' do
|
152
152
|
it 'should try each bucket' do
|
153
|
-
@chained_buckets[1].
|
154
|
-
@chained_buckets[2].
|
155
|
-
@bucket_chain.buzz.
|
153
|
+
expect(@chained_buckets[1]).to(receive(:buzz).and_return(true))
|
154
|
+
expect(@chained_buckets[2]).not_to(receive(:buzz))
|
155
|
+
expect(@bucket_chain.buzz).to(eq(true))
|
156
156
|
end
|
157
157
|
end
|
158
158
|
end
|
data/spec/bucket_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe AssetCloud::Bucket do
|
@@ -7,19 +8,19 @@ describe AssetCloud::Bucket do
|
|
7
8
|
|
8
9
|
describe "operations not supported" do
|
9
10
|
it "#ls not supported" do
|
10
|
-
expect { @bucket.ls('foo')}.to
|
11
|
+
expect { @bucket.ls('foo') }.to(raise_error(NotImplementedError))
|
11
12
|
end
|
12
13
|
|
13
14
|
it "#read(key) not supported" do
|
14
|
-
expect { @bucket.read('foo')}.to
|
15
|
+
expect { @bucket.read('foo') }.to(raise_error(NotImplementedError))
|
15
16
|
end
|
16
17
|
|
17
18
|
it "#write(key, data) not supported" do
|
18
|
-
expect { @bucket.write('foo', 'bar')}.to
|
19
|
+
expect { @bucket.write('foo', 'bar') }.to(raise_error(NotImplementedError))
|
19
20
|
end
|
20
21
|
|
21
22
|
it "#delete(key) not supported" do
|
22
|
-
expect { @bucket.delete('foo')}.to
|
23
|
+
expect { @bucket.delete('foo') }.to(raise_error(NotImplementedError))
|
23
24
|
end
|
24
25
|
end
|
25
26
|
end
|
data/spec/callbacks_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
class CallbackAsset < AssetCloud::Asset
|
@@ -21,12 +22,12 @@ class CallbackAsset < AssetCloud::Asset
|
|
21
22
|
end
|
22
23
|
|
23
24
|
def valid_value
|
24
|
-
add_error
|
25
|
+
add_error('value is not "valid"') unless value == 'valid'
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
28
29
|
class BasicCloud < AssetCloud::Base
|
29
|
-
bucket :callback_assets, AssetCloud::MemoryBucket, :
|
30
|
+
bucket :callback_assets, AssetCloud::MemoryBucket, asset_class: CallbackAsset
|
30
31
|
end
|
31
32
|
|
32
33
|
class CallbackCloud < AssetCloud::Base
|
@@ -39,6 +40,7 @@ class CallbackCloud < AssetCloud::Base
|
|
39
40
|
before_write :callback_before_write
|
40
41
|
|
41
42
|
def callback_before_write(*args); end
|
43
|
+
|
42
44
|
def callback_after_write(*args); end
|
43
45
|
end
|
44
46
|
|
@@ -50,7 +52,7 @@ class MethodRecordingCloud < AssetCloud::Base
|
|
50
52
|
before_write :callback_before_write
|
51
53
|
after_write :callback_before_write
|
52
54
|
|
53
|
-
def method_missing(method, *
|
55
|
+
def method_missing(method, *_args)
|
54
56
|
@run_callbacks << method.to_sym
|
55
57
|
end
|
56
58
|
end
|
@@ -62,38 +64,36 @@ describe CallbackCloud do
|
|
62
64
|
end
|
63
65
|
|
64
66
|
it "should invoke callbacks after store" do
|
65
|
-
@fs.
|
66
|
-
@fs.
|
67
|
-
|
67
|
+
expect(@fs).to(receive(:callback_before_write).with('tmp/file.txt', 'text').and_return(true))
|
68
|
+
expect(@fs).to(receive(:callback_after_write).with('tmp/file.txt', 'text').and_return(true))
|
68
69
|
|
69
|
-
@fs.write('tmp/file.txt', 'text').
|
70
|
-
@fs.read('tmp/file.txt').
|
70
|
+
expect(@fs.write('tmp/file.txt', 'text')).to(eq(true))
|
71
|
+
expect(@fs.read('tmp/file.txt')).to(eq('text'))
|
71
72
|
end
|
72
73
|
|
73
74
|
it "should invoke callbacks after delete" do
|
74
|
-
@fs.
|
75
|
-
@fs.
|
75
|
+
expect(@fs).to(receive(:callback_before_delete).with('tmp/file.txt').and_return(true))
|
76
|
+
expect(@fs).to(receive(:callback_after_delete).with('tmp/file.txt').and_return(true))
|
76
77
|
|
77
|
-
@fs.delete('tmp/file.txt').
|
78
|
+
expect(@fs.delete('tmp/file.txt')).to(eq('foo'))
|
78
79
|
end
|
79
80
|
|
80
81
|
it "should not invoke other callbacks when a before_ filter returns false" do
|
81
|
-
@fs.
|
82
|
+
expect(@fs).to(receive(:callback_before_delete)
|
82
83
|
.with('tmp/file.txt')
|
83
|
-
.and_return(false)
|
84
|
-
@fs.
|
84
|
+
.and_return(false))
|
85
|
+
expect(@fs).not_to(receive(:callback_after_delete))
|
85
86
|
|
86
|
-
@fs.delete('tmp/file.txt').
|
87
|
+
expect(@fs.delete('tmp/file.txt')).to(eq(nil))
|
87
88
|
end
|
88
89
|
|
89
90
|
it "should invoke callbacks even when constructing a new asset" do
|
90
|
-
@fs.
|
91
|
-
@fs.
|
92
|
-
|
91
|
+
expect(@fs).to(receive(:callback_before_write).with('tmp/file.txt', 'hello').and_return(true))
|
92
|
+
expect(@fs).to(receive(:callback_after_write).with('tmp/file.txt', 'hello').and_return(true))
|
93
93
|
|
94
94
|
asset = @fs.build('tmp/file.txt')
|
95
95
|
asset.value = 'hello'
|
96
|
-
asset.store.
|
96
|
+
expect(asset.store).to(eq(true))
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -105,12 +105,12 @@ describe MethodRecordingCloud do
|
|
105
105
|
|
106
106
|
it 'should record event when invoked' do
|
107
107
|
@fs.write('tmp/file.txt', 'random data')
|
108
|
-
@fs.run_callbacks.
|
108
|
+
expect(@fs.run_callbacks).to(eq([:callback_before_write, :callback_before_write]))
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'should record event when assignment operator is used' do
|
112
112
|
@fs['tmp/file.txt'] = 'random data'
|
113
|
-
@fs.run_callbacks.
|
113
|
+
expect(@fs.run_callbacks).to(eq([:callback_before_write, :callback_before_write]))
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
@@ -122,25 +122,25 @@ describe CallbackAsset do
|
|
122
122
|
end
|
123
123
|
|
124
124
|
it "should run before_validate, then validate, then after validate, then before_store, then store" do
|
125
|
-
@asset.
|
126
|
-
@asset.
|
125
|
+
expect(@asset).to(receive(:callback_before_store).and_return(true))
|
126
|
+
expect(@asset).not_to(receive(:callback_after_delete))
|
127
127
|
|
128
128
|
@asset.value = 'foo'
|
129
|
-
@asset.store.
|
130
|
-
@asset.value.
|
129
|
+
expect(@asset.store).to(eq(true))
|
130
|
+
expect(@asset.value).to(eq('valid spice'))
|
131
131
|
end
|
132
132
|
|
133
133
|
it "should run its after_delete callback after delete is called" do
|
134
|
-
@asset.
|
135
|
-
@asset.
|
134
|
+
expect(@asset).not_to(receive(:callback_before_store))
|
135
|
+
expect(@asset).to(receive(:callback_after_delete).and_return(true))
|
136
136
|
|
137
|
-
@asset.delete.
|
137
|
+
expect(@asset.delete).to(eq('bar'))
|
138
138
|
end
|
139
139
|
|
140
140
|
it "not invoke other callbacks when a before_ filter returns false" do
|
141
|
-
@asset.
|
142
|
-
@asset.
|
141
|
+
expect(@asset).to(receive(:callback_before_delete).and_return(false))
|
142
|
+
expect(@asset).not_to(receive(:callback_after_delete))
|
143
143
|
|
144
|
-
@asset.delete.
|
144
|
+
expect(@asset.delete).to(eq(nil))
|
145
145
|
end
|
146
146
|
end
|
data/spec/file_system_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
require 'fileutils'
|
3
4
|
|
@@ -7,12 +8,11 @@ class FileSystemCloud < AssetCloud::Base
|
|
7
8
|
bucket :tmp, AssetCloud::FileSystemBucket
|
8
9
|
end
|
9
10
|
|
10
|
-
|
11
11
|
describe FileSystemCloud do
|
12
12
|
directory = File.dirname(__FILE__) + '/files'
|
13
13
|
|
14
14
|
before do
|
15
|
-
@fs = FileSystemCloud.new(directory
|
15
|
+
@fs = FileSystemCloud.new(directory, 'http://assets/files')
|
16
16
|
FileUtils.mkdir_p(directory + '/tmp')
|
17
17
|
end
|
18
18
|
|
@@ -21,31 +21,31 @@ describe FileSystemCloud do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should use invalid bucket for random directories" do
|
24
|
-
@fs.bucket_for('does-not-exist/file.txt').
|
24
|
+
expect(@fs.bucket_for('does-not-exist/file.txt')).to(be_an_instance_of(AssetCloud::InvalidBucket))
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should use filesystem bucket for products/ and tmp/ directories" do
|
28
|
-
@fs.bucket_for('products/file.txt').
|
29
|
-
@fs.bucket_for('tmp/file.txt').
|
28
|
+
expect(@fs.bucket_for('products/file.txt')).to(be_an_instance_of(AssetCloud::FileSystemBucket))
|
29
|
+
expect(@fs.bucket_for('tmp/file.txt')).to(be_an_instance_of(AssetCloud::FileSystemBucket))
|
30
30
|
end
|
31
31
|
|
32
32
|
it "should return Asset for existing files" do
|
33
|
-
@fs['products/key.txt'].exist
|
34
|
-
@fs['products/key.txt'].
|
33
|
+
expect(@fs['products/key.txt'].exist?).to(eq(true))
|
34
|
+
expect(@fs['products/key.txt']).to(be_an_instance_of(AssetCloud::Asset))
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should be able to test if a file exists or not" do
|
38
|
-
@fs.stat('products/key.txt').exist
|
39
|
-
@fs.stat('products/key2.txt').exist
|
38
|
+
expect(@fs.stat('products/key.txt').exist?).to(eq(true))
|
39
|
+
expect(@fs.stat('products/key2.txt').exist?).to(eq(false))
|
40
40
|
end
|
41
41
|
|
42
42
|
it "should be able to list files" do
|
43
|
-
@fs.ls('products').collect(&:key).
|
43
|
+
expect(@fs.ls('products').collect(&:key)).to(eq(['products/key.txt']))
|
44
44
|
end
|
45
45
|
|
46
46
|
describe 'when modifying file system' do
|
47
47
|
it "should call write after storing an asset" do
|
48
|
-
@fs.buckets[:tmp].
|
48
|
+
expect(@fs.buckets[:tmp]).to(receive(:write).with('tmp/new_file.test', 'hello world').and_return(true))
|
49
49
|
|
50
50
|
@fs.build('tmp/new_file.test', 'hello world').store
|
51
51
|
end
|
@@ -53,21 +53,20 @@ describe FileSystemCloud do
|
|
53
53
|
it "should be able to create new files" do
|
54
54
|
@fs.build('tmp/new_file.test', 'hello world').store
|
55
55
|
|
56
|
-
@fs.stat('tmp/new_file.test').exist.
|
56
|
+
expect(@fs.stat('tmp/new_file.test').exist).to(eq(true))
|
57
57
|
end
|
58
58
|
|
59
59
|
it "should be able to create new files with simple assignment" do
|
60
60
|
@fs['tmp/new_file.test'] = 'hello world'
|
61
61
|
|
62
|
-
@fs.stat('tmp/new_file.test').exist.
|
62
|
+
expect(@fs.stat('tmp/new_file.test').exist).to(eq(true))
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should create directories as needed" do
|
66
66
|
@fs.build('tmp/new_file.test', 'hello world').store
|
67
67
|
|
68
|
-
@fs['tmp/new_file.test'].exist
|
69
|
-
@fs['tmp/new_file.test'].value.
|
68
|
+
expect(@fs['tmp/new_file.test'].exist?).to(eq(true))
|
69
|
+
expect(@fs['tmp/new_file.test'].value).to(eq('hello world'))
|
70
70
|
end
|
71
|
-
|
72
71
|
end
|
73
72
|
end
|