asset_cloud 1.0.2
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 +7 -0
- data/.gitignore +6 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.rdoc +13 -0
- data/Rakefile +24 -0
- data/asset_cloud.gemspec +24 -0
- data/lib/asset_cloud.rb +54 -0
- data/lib/asset_cloud/asset.rb +187 -0
- data/lib/asset_cloud/asset_extension.rb +42 -0
- data/lib/asset_cloud/base.rb +247 -0
- data/lib/asset_cloud/bucket.rb +39 -0
- data/lib/asset_cloud/buckets/active_record_bucket.rb +57 -0
- data/lib/asset_cloud/buckets/blackhole_bucket.rb +23 -0
- data/lib/asset_cloud/buckets/bucket_chain.rb +84 -0
- data/lib/asset_cloud/buckets/file_system_bucket.rb +79 -0
- data/lib/asset_cloud/buckets/invalid_bucket.rb +28 -0
- data/lib/asset_cloud/buckets/memory_bucket.rb +42 -0
- data/lib/asset_cloud/buckets/versioned_memory_bucket.rb +33 -0
- data/lib/asset_cloud/callbacks.rb +63 -0
- data/lib/asset_cloud/free_key_locator.rb +28 -0
- data/lib/asset_cloud/metadata.rb +29 -0
- data/lib/asset_cloud/validations.rb +52 -0
- data/spec/active_record_bucket_spec.rb +95 -0
- data/spec/asset_extension_spec.rb +103 -0
- data/spec/asset_spec.rb +177 -0
- data/spec/base_spec.rb +114 -0
- data/spec/blackhole_bucket_spec.rb +41 -0
- data/spec/bucket_chain_spec.rb +158 -0
- data/spec/callbacks_spec.rb +125 -0
- data/spec/file_system_spec.rb +74 -0
- data/spec/files/products/key.txt +1 -0
- data/spec/files/versioned_stuff/foo +1 -0
- data/spec/find_free_key_spec.rb +39 -0
- data/spec/memory_bucket_spec.rb +52 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/validations_spec.rb +53 -0
- data/spec/versioned_memory_bucket_spec.rb +36 -0
- metadata +151 -0
@@ -0,0 +1 @@
|
|
1
|
+
value
|
@@ -0,0 +1 @@
|
|
1
|
+
four
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
|
5
|
+
class FindFreeKey
|
6
|
+
extend AssetCloud::FreeKeyLocator
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "FreeFilenameLocator", 'when asked to return a free key such as the one passed in' do
|
10
|
+
|
11
|
+
it "should simply return the key if it happens to be free" do
|
12
|
+
FindFreeKey.should_receive(:exist?).with('free.txt').and_return(false)
|
13
|
+
|
14
|
+
FindFreeKey.find_free_key_like('free.txt').should == 'free.txt'
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should append a UUID to the key before the extension if key is taken " do
|
18
|
+
SecureRandom.stub(:uuid).and_return('moo')
|
19
|
+
FindFreeKey.should_receive(:exist?).with('free.txt').and_return(true)
|
20
|
+
FindFreeKey.should_receive(:exist?).with('free_moo.txt').and_return(false)
|
21
|
+
|
22
|
+
FindFreeKey.find_free_key_like('free.txt').should == 'free_moo.txt'
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
it "should not strip any directory information from the key" do
|
27
|
+
SecureRandom.stub(:uuid).and_return('moo')
|
28
|
+
FindFreeKey.should_receive(:exist?).with('products/images/image.gif').and_return(true)
|
29
|
+
FindFreeKey.should_receive(:exist?).with('products/images/image_moo.gif').and_return(false)
|
30
|
+
|
31
|
+
FindFreeKey.find_free_key_like('products/images/image.gif').should == 'products/images/image_moo.gif'
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should raise an exception if the randomly chosen value (after 10 attempts) is also taken" do
|
35
|
+
FindFreeKey.stub(:exist?).and_return(true)
|
36
|
+
lambda { FindFreeKey.find_free_key_like('free.txt') }.should raise_error(StandardError)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MemoryCloud < AssetCloud::Base
|
4
|
+
bucket :memory, AssetCloud::MemoryBucket
|
5
|
+
end
|
6
|
+
|
7
|
+
describe AssetCloud::MemoryBucket do
|
8
|
+
directory = File.dirname(__FILE__) + '/files'
|
9
|
+
|
10
|
+
before do
|
11
|
+
@fs = MemoryCloud.new(directory , 'http://assets/files' )
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
describe 'modifying items in subfolder' do
|
16
|
+
|
17
|
+
it "should return nil when file does not exist" do
|
18
|
+
@fs['memory/essay.txt'].exist?.should == false
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return set content when asked for the same file" do
|
22
|
+
@fs['memory/essay.txt'] = 'text'
|
23
|
+
@fs['memory/essay.txt'].value.should == 'text'
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#versioned?" do
|
29
|
+
it "should return false" do
|
30
|
+
@fs.buckets[:memory].versioned?.should == false
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#ls' do
|
35
|
+
before do
|
36
|
+
%w{a b}.each do |letter|
|
37
|
+
2.times {|number| @fs.write("memory/#{letter}#{number}",'.')}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return a list of assets which start with the given prefix" do
|
42
|
+
@fs.buckets[:memory].ls('memory/a').size.should == 2
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return a list of all assets when a prefix is not given" do
|
46
|
+
@fs.buckets[:memory].ls.size.should == 4
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class ValidatedAsset < AssetCloud::Asset
|
4
|
+
validate :no_cats
|
5
|
+
|
6
|
+
private
|
7
|
+
def no_cats
|
8
|
+
add_error('no cats allowed!') if value =~ /cat/i
|
9
|
+
add_warning('bad dog!', 'wet dog smell!') if value =~ /dog/i
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class BasicCloud < AssetCloud::Base
|
14
|
+
bucket :dog_pound, AssetCloud::MemoryBucket, :asset_class => ValidatedAsset
|
15
|
+
end
|
16
|
+
|
17
|
+
describe ValidatedAsset do
|
18
|
+
before(:each) do
|
19
|
+
@cloud = BasicCloud.new(File.dirname(__FILE__) + '/files', 'http://assets/')
|
20
|
+
@cat = @cloud.build('dog_pound/fido', 'cat')
|
21
|
+
@dog = @cloud.build('dog_pound/fido', 'dog')
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#store" do
|
25
|
+
it "should not store the asset unless validations pass" do
|
26
|
+
@cloud.should_receive(:write).with('dog_pound/fido', 'dog').and_return(true)
|
27
|
+
|
28
|
+
@cat.store
|
29
|
+
@cat.store.should == false
|
30
|
+
@cat.errors.should == ['no cats allowed!']
|
31
|
+
@dog.store.should == true
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should store asset with warnings and save them in the warnings array" do
|
35
|
+
@dog.store.should == true
|
36
|
+
@dog.warnings.should == ['bad dog!', 'wet dog smell!']
|
37
|
+
@cat.store.should == false
|
38
|
+
@cat.warnings.should == []
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#valid?" do
|
43
|
+
it "should clear errors, run validations, and return validity" do
|
44
|
+
@cat.store
|
45
|
+
@cat.errors.should == ['no cats allowed!']
|
46
|
+
@cat.valid?.should == false
|
47
|
+
@cat.errors.should == ['no cats allowed!']
|
48
|
+
@cat.value = 'disguised feline'
|
49
|
+
@cat.valid?.should == true
|
50
|
+
@cat.errors.should be_empty
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class VersionedMemoryCloud < AssetCloud::Base
|
4
|
+
bucket :memory, AssetCloud::VersionedMemoryBucket
|
5
|
+
end
|
6
|
+
|
7
|
+
describe AssetCloud::VersionedMemoryBucket do
|
8
|
+
directory = File.dirname(__FILE__) + '/files'
|
9
|
+
|
10
|
+
before do
|
11
|
+
@fs = VersionedMemoryCloud.new(directory , 'http://assets/files' )
|
12
|
+
%w{one two three}.each do |content|
|
13
|
+
@fs.write("memory/foo", content)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#versioned?' do
|
18
|
+
it "should return true" do
|
19
|
+
@fs.buckets[:memory].versioned?.should == true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#read_version' do
|
24
|
+
it "should return the appropriate data when given a key and version" do
|
25
|
+
@fs.read_version('memory/foo', 1).should == 'one'
|
26
|
+
@fs.read_version('memory/foo', 3).should == 'three'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#versions' do
|
31
|
+
it "should return a list of available version identifiers for the given key" do
|
32
|
+
@fs.versions('memory/foo').should == [1,2,3]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: asset_cloud
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Shopify
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2009-08-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: class_inheritable_attributes
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: An abstraction layer around arbitrary and diverse asset stores.
|
70
|
+
email: developers@shopify.com
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- .gitignore
|
76
|
+
- Gemfile
|
77
|
+
- LICENSE
|
78
|
+
- README.rdoc
|
79
|
+
- Rakefile
|
80
|
+
- asset_cloud.gemspec
|
81
|
+
- lib/asset_cloud.rb
|
82
|
+
- lib/asset_cloud/asset.rb
|
83
|
+
- lib/asset_cloud/asset_extension.rb
|
84
|
+
- lib/asset_cloud/base.rb
|
85
|
+
- lib/asset_cloud/bucket.rb
|
86
|
+
- lib/asset_cloud/buckets/active_record_bucket.rb
|
87
|
+
- lib/asset_cloud/buckets/blackhole_bucket.rb
|
88
|
+
- lib/asset_cloud/buckets/bucket_chain.rb
|
89
|
+
- lib/asset_cloud/buckets/file_system_bucket.rb
|
90
|
+
- lib/asset_cloud/buckets/invalid_bucket.rb
|
91
|
+
- lib/asset_cloud/buckets/memory_bucket.rb
|
92
|
+
- lib/asset_cloud/buckets/versioned_memory_bucket.rb
|
93
|
+
- lib/asset_cloud/callbacks.rb
|
94
|
+
- lib/asset_cloud/free_key_locator.rb
|
95
|
+
- lib/asset_cloud/metadata.rb
|
96
|
+
- lib/asset_cloud/validations.rb
|
97
|
+
- spec/active_record_bucket_spec.rb
|
98
|
+
- spec/asset_extension_spec.rb
|
99
|
+
- spec/asset_spec.rb
|
100
|
+
- spec/base_spec.rb
|
101
|
+
- spec/blackhole_bucket_spec.rb
|
102
|
+
- spec/bucket_chain_spec.rb
|
103
|
+
- spec/callbacks_spec.rb
|
104
|
+
- spec/file_system_spec.rb
|
105
|
+
- spec/files/products/key.txt
|
106
|
+
- spec/files/versioned_stuff/foo
|
107
|
+
- spec/find_free_key_spec.rb
|
108
|
+
- spec/memory_bucket_spec.rb
|
109
|
+
- spec/spec_helper.rb
|
110
|
+
- spec/validations_spec.rb
|
111
|
+
- spec/versioned_memory_bucket_spec.rb
|
112
|
+
homepage: http://github.com/Shopify/asset_cloud
|
113
|
+
licenses: []
|
114
|
+
metadata: {}
|
115
|
+
post_install_message:
|
116
|
+
rdoc_options: []
|
117
|
+
require_paths:
|
118
|
+
- lib
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - '>='
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
requirements: []
|
130
|
+
rubyforge_project:
|
131
|
+
rubygems_version: 2.0.14
|
132
|
+
signing_key:
|
133
|
+
specification_version: 4
|
134
|
+
summary: An abstraction layer around arbitrary and diverse asset stores.
|
135
|
+
test_files:
|
136
|
+
- spec/active_record_bucket_spec.rb
|
137
|
+
- spec/asset_extension_spec.rb
|
138
|
+
- spec/asset_spec.rb
|
139
|
+
- spec/base_spec.rb
|
140
|
+
- spec/blackhole_bucket_spec.rb
|
141
|
+
- spec/bucket_chain_spec.rb
|
142
|
+
- spec/callbacks_spec.rb
|
143
|
+
- spec/file_system_spec.rb
|
144
|
+
- spec/files/products/key.txt
|
145
|
+
- spec/files/versioned_stuff/foo
|
146
|
+
- spec/find_free_key_spec.rb
|
147
|
+
- spec/memory_bucket_spec.rb
|
148
|
+
- spec/spec_helper.rb
|
149
|
+
- spec/validations_spec.rb
|
150
|
+
- spec/versioned_memory_bucket_spec.rb
|
151
|
+
has_rdoc:
|