storage 0.1.0 → 0.1.1

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.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ tmp
2
+ pkg
3
+ *.gem
4
+ *.log
5
+ coverage
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format documentation
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://gems.simplesideias.com.br"
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,121 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ storage (0.1.1)
5
+ aws-s3 (~> 0.6.2)
6
+
7
+ GEM
8
+ remote: http://gems.simplesideias.com.br/
9
+ specs:
10
+ abstract (1.0.0)
11
+ actionmailer (3.0.7)
12
+ actionpack (= 3.0.7)
13
+ mail (~> 2.2.15)
14
+ actionpack (3.0.7)
15
+ activemodel (= 3.0.7)
16
+ activesupport (= 3.0.7)
17
+ builder (~> 2.1.2)
18
+ erubis (~> 2.6.6)
19
+ i18n (~> 0.5.0)
20
+ rack (~> 1.2.1)
21
+ rack-mount (~> 0.6.14)
22
+ rack-test (~> 0.5.7)
23
+ tzinfo (~> 0.3.23)
24
+ activemodel (3.0.7)
25
+ activesupport (= 3.0.7)
26
+ builder (~> 2.1.2)
27
+ i18n (~> 0.5.0)
28
+ activerecord (3.0.7)
29
+ activemodel (= 3.0.7)
30
+ activesupport (= 3.0.7)
31
+ arel (~> 2.0.2)
32
+ tzinfo (~> 0.3.23)
33
+ activeresource (3.0.7)
34
+ activemodel (= 3.0.7)
35
+ activesupport (= 3.0.7)
36
+ activesupport (3.0.7)
37
+ archive-tar-minitar (0.5.2)
38
+ arel (2.0.10)
39
+ aws-s3 (0.6.2)
40
+ builder
41
+ mime-types
42
+ xml-simple
43
+ builder (2.1.2)
44
+ columnize (0.3.2)
45
+ diff-lcs (1.1.2)
46
+ erubis (2.6.6)
47
+ abstract (>= 1.0.0)
48
+ fakeweb (1.3.0)
49
+ i18n (0.5.0)
50
+ linecache19 (0.5.12)
51
+ ruby_core_source (>= 0.1.4)
52
+ mail (2.2.19)
53
+ activesupport (>= 2.3.6)
54
+ i18n (>= 0.4.0)
55
+ mime-types (~> 1.16)
56
+ treetop (~> 1.4.8)
57
+ mime-types (1.16)
58
+ nokogiri (1.4.4)
59
+ polyglot (0.3.1)
60
+ rack (1.2.3)
61
+ rack-mount (0.6.14)
62
+ rack (>= 1.0.0)
63
+ rack-test (0.5.7)
64
+ rack (>= 1.0)
65
+ rails (3.0.7)
66
+ actionmailer (= 3.0.7)
67
+ actionpack (= 3.0.7)
68
+ activerecord (= 3.0.7)
69
+ activeresource (= 3.0.7)
70
+ activesupport (= 3.0.7)
71
+ bundler (~> 1.0)
72
+ railties (= 3.0.7)
73
+ railties (3.0.7)
74
+ actionpack (= 3.0.7)
75
+ activesupport (= 3.0.7)
76
+ rake (>= 0.8.7)
77
+ thor (~> 0.14.4)
78
+ rake (0.8.7)
79
+ rspec (2.5.0)
80
+ rspec-core (~> 2.5.0)
81
+ rspec-expectations (~> 2.5.0)
82
+ rspec-mocks (~> 2.5.0)
83
+ rspec-core (2.5.2)
84
+ rspec-expectations (2.5.0)
85
+ diff-lcs (~> 1.1.2)
86
+ rspec-mocks (2.5.0)
87
+ rspec-rails (2.5.0)
88
+ actionpack (~> 3.0)
89
+ activesupport (~> 3.0)
90
+ railties (~> 3.0)
91
+ rspec (~> 2.5.0)
92
+ ruby-debug-base19 (0.11.25)
93
+ columnize (>= 0.3.1)
94
+ linecache19 (>= 0.5.11)
95
+ ruby_core_source (>= 0.1.4)
96
+ ruby-debug19 (0.11.6)
97
+ columnize (>= 0.3.1)
98
+ linecache19 (>= 0.5.11)
99
+ ruby-debug-base19 (>= 0.11.19)
100
+ ruby_core_source (0.1.5)
101
+ archive-tar-minitar (>= 0.5.2)
102
+ sqlite3 (1.3.3)
103
+ sqlite3-ruby (1.3.3)
104
+ sqlite3 (>= 1.3.3)
105
+ thor (0.14.6)
106
+ treetop (1.4.9)
107
+ polyglot (>= 0.3.1)
108
+ tzinfo (0.3.27)
109
+ xml-simple (1.0.16)
110
+
111
+ PLATFORMS
112
+ ruby
113
+
114
+ DEPENDENCIES
115
+ fakeweb (~> 1.3.0)
116
+ nokogiri (~> 1.4.4)
117
+ rails (~> 3.0)
118
+ rspec-rails (~> 2.5.0)
119
+ ruby-debug19
120
+ sqlite3-ruby (~> 1.3.3)
121
+ storage!
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require "bundler"
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require "rspec/core/rake_task"
5
+ RSpec::Core::RakeTask.new
@@ -29,7 +29,7 @@ module Storage
29
29
  # Override setter so we can automatically define the strategy class
30
30
  # based on its registered name.
31
31
  def self.strategy=(strategy)
32
- self.strategy_class = eval(Storage::Strategies::STRATEGIES[strategy])
32
+ @strategy_class = eval(Storage::Strategies::STRATEGIES[strategy])
33
33
  @strategy = strategy
34
34
  end
35
35
  end
@@ -2,7 +2,7 @@ module Storage
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- PATCH = 0
5
+ PATCH = 1
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
data/lib/storage.rb CHANGED
@@ -8,39 +8,37 @@ module Storage
8
8
  autoload :Strategies, "storage/strategies"
9
9
  autoload :Version, "storage/version"
10
10
 
11
- class << self
12
- # Set up the storage options.
13
- #
14
- # Storage.setup do |config|
15
- # config.strategy = :s3
16
- # end
17
- #
18
- # Check Storage::Config for available options.
19
- #
20
- def setup(&block)
21
- yield Config
22
- strategy.prepare!
23
- end
11
+ # Set up the storage options.
12
+ #
13
+ # Storage.setup do |config|
14
+ # config.strategy = :s3
15
+ # end
16
+ #
17
+ # Check Storage::Config for available options.
18
+ #
19
+ def self.setup(&block)
20
+ yield Config
21
+ strategy.prepare!
22
+ end
24
23
 
25
- # A shortcut to the current strategy.
26
- def strategy
27
- Config.strategy_class
28
- end
24
+ # A shortcut to the current strategy.
25
+ def self.strategy
26
+ Config.strategy_class
27
+ end
29
28
 
30
- # Save a file.
31
- def store(*args)
32
- strategy.store(*args)
33
- end
29
+ # Save a file.
30
+ def self.store(*args)
31
+ strategy.store(*args)
32
+ end
34
33
 
35
- # Destroy a file.
36
- def remove(*args)
37
- strategy.remove(*args)
38
- end
34
+ # Destroy a file.
35
+ def self.remove(*args)
36
+ strategy.remove(*args)
37
+ end
39
38
 
40
- # Retrieve a file.
41
- def get(*args)
42
- strategy.get(*args)
43
- end
39
+ # Retrieve a file.
40
+ def self.get(*args)
41
+ strategy.get(*args)
44
42
  end
45
43
  end
46
44
 
data/spec/spec_helper.rb CHANGED
@@ -1,21 +1,16 @@
1
- require "rspec"
1
+ require "bundler"
2
+ Bundler.setup
3
+ Bundler.require(:default, :development)
4
+
2
5
  require "storage"
3
- require "fileutils"
4
6
  require "pathname"
5
7
 
6
8
  TMP = Pathname.new(File.expand_path(File.dirname(__FILE__) + "/tmp"))
7
9
  RESOURCES = Pathname.new(File.expand_path(File.dirname(__FILE__) + "/resources"))
8
10
 
9
11
  RSpec.configure do |config|
10
- config.formatter = "documentation"
11
- config.color_enabled = true
12
-
13
- config.before :each do
12
+ config.around :each do
14
13
  FileUtils.rm_rf(TMP) rescue nil
15
14
  FileUtils.mkdir_p(TMP) rescue nil
16
15
  end
17
-
18
- config.after :each do
19
- FileUtils.rm_rf(TMP) rescue nil
20
- end
21
16
  end
@@ -4,56 +4,56 @@ describe Storage::Strategies::FileSystem do
4
4
  before do
5
5
  @source = RESOURCES.join("file.txt")
6
6
  @destiny = TMP.join("lorem.txt")
7
-
8
- Storage.setup do |c|
7
+
8
+ Storage.setup do |c|
9
9
  c.strategy = :file
10
10
  c.path = TMP
11
11
  end
12
12
  end
13
-
13
+
14
14
  it "should save a file using file handler" do
15
15
  handler = File.open(@source)
16
16
  Storage.store(handler, :name => "lorem.txt")
17
-
17
+
18
18
  File.should be_file(@destiny)
19
19
  File.read(@destiny).should == File.read(@source)
20
20
  end
21
-
21
+
22
22
  it "should save a file using a path" do
23
23
  Storage.store(@source, :name => "lorem.txt")
24
-
24
+
25
25
  File.should be_file(@destiny)
26
26
  File.read(@destiny).should == File.read(@source)
27
27
  end
28
-
28
+
29
29
  it "should remove an existing file" do
30
30
  Storage.store(@source, :name => "lorem.txt")
31
31
  Storage.remove("lorem.txt").should be_true
32
32
  File.should_not be_file(@destiny)
33
33
  end
34
-
34
+
35
35
  it "should raise when trying to removing an unexesting file" do
36
- lambda {
36
+ expect {
37
37
  Storage.remove("invalid")
38
- }.should raise_error(Storage::MissingFileError)
38
+ }.to raise_error(Storage::MissingFileError)
39
39
  end
40
-
40
+
41
41
  it "should retrieve an existing file" do
42
42
  Storage.store(@source, :name => "lorem.txt")
43
43
  Storage.get("lorem.txt").should == File.expand_path(TMP.join("lorem.txt"))
44
44
  end
45
-
45
+
46
46
  it "should raise when trying to retrieve an unexesting file" do
47
- lambda {
47
+ expect {
48
48
  Storage.get("invalid")
49
- }.should raise_error(Storage::MissingFileError)
49
+ }.to raise_error(Storage::MissingFileError)
50
50
  end
51
-
51
+
52
52
  it "should raise when saving a file that already exists" do
53
53
  Storage.store(@source, :name => "lorem.txt")
54
-
55
- lambda {
54
+
55
+ expect {
56
56
  Storage.store(@source, :name => "lorem.txt")
57
- }.should raise_error(Storage::FileAlreadyExistsError)
57
+ }.to raise_error(Storage::FileAlreadyExistsError)
58
58
  end
59
59
  end
@@ -5,88 +5,88 @@ describe Storage::Strategies::S3 do
5
5
  @source = RESOURCES.join("file.txt")
6
6
  @destiny = TMP.join("lorem.txt")
7
7
  @bucket = mock("bucket", :name => "files")
8
-
9
- AWS::S3::Base.stub!(:establish_connection!)
10
- AWS::S3::Bucket.stub!(:find).and_return(@bucket)
11
- AWS::S3::S3Object.stub!(:store)
12
-
13
- Storage.setup do |c|
8
+
9
+ AWS::S3::Base.stub :establish_connection!
10
+ AWS::S3::Bucket.stub :find => @bucket
11
+ AWS::S3::S3Object.stub :store
12
+
13
+ Storage.setup do |c|
14
14
  c.strategy = :s3
15
15
  c.access_key = "abc"
16
16
  c.secret_key = "123"
17
17
  end
18
18
  end
19
-
19
+
20
20
  it "should establish connection" do
21
21
  options = {:access_key_id => "abc", :secret_access_key => "123"}
22
22
  AWS::S3::Base.should_receive(:establish_connection!).with(options)
23
-
23
+
24
24
  Storage::Strategies::S3.prepare!
25
25
  end
26
-
26
+
27
27
  it "should not reconnect when a connection is already established" do
28
28
  AWS::S3::Base.should_receive(:connected?).and_return(true)
29
29
  AWS::S3::Base.should_not_receive(:establish_connection!)
30
-
30
+
31
31
  Storage::Strategies::S3.prepare!
32
32
  end
33
-
33
+
34
34
  it "should save a file using file handler" do
35
- handler = File.open(@source)
35
+ handler = File.open(@source)
36
36
  AWS::S3::S3Object.should_receive(:store).with("lorem.txt", handler, "files", :access => :public_read)
37
37
  Storage.store(handler, :name => "lorem.txt", :bucket => "files")
38
38
  end
39
-
39
+
40
40
  it "should save a file using a path" do
41
41
  AWS::S3::S3Object.should_receive(:store).with("lorem.txt", kind_of(File), "files", :access => :public_read)
42
42
  Storage.store(@source, :name => "lorem.txt", :bucket => "files")
43
43
  end
44
-
44
+
45
45
  it "should remove an existing file" do
46
46
  object = mock("object")
47
47
  object.should_receive(:delete).and_return(true)
48
48
  Storage::Strategies::S3.should_receive(:find_object).with("lorem.txt", :bucket => "files").and_return(object)
49
-
49
+
50
50
  Storage.remove("lorem.txt", :bucket => "files").should be_true
51
51
  end
52
-
52
+
53
53
  it "should raise when trying to removing an unexesting file" do
54
54
  pending "spec is failing but real code works"
55
-
55
+
56
56
  Storage::Strategies::S3.should_receive(:find_object).and_raise(AWS::S3::NoSuchKey)
57
-
58
- lambda {
57
+
58
+ expect {
59
59
  Storage.remove("lorem.txt", :bucket => "files")
60
- }.should raise_error(Storage::MissingFileError)
60
+ }.to raise_error(Storage::MissingFileError)
61
61
  end
62
-
62
+
63
63
  it "should retrieve an existing file" do
64
64
  object = mock("object")
65
-
65
+
66
66
  AWS::S3::S3Object.should_receive(:find).with("lorem.txt", "files").and_return(object)
67
67
  AWS::S3::S3Object.should_receive(:url_for).with("lorem.txt", "files", :authenticated => false)
68
-
68
+
69
69
  Storage.get("lorem.txt", :bucket => "files")
70
70
  end
71
-
71
+
72
72
  it "should raise when trying to retrieve an unexesting file" do
73
73
  pending "spec is failing but real code works"
74
-
74
+
75
75
  AWS::S3::S3Object.should_receive(:find).with("lorem.txt", "files").and_raise(AWS::S3::NoSuchKey)
76
76
  AWS::S3::S3Object.should_not_receive(:url_for)
77
-
78
- lambda {
77
+
78
+ expect {
79
79
  Storage.get("lorem.txt", :bucket => "files")
80
- }.should raise_error(Storage::MissingFileError)
80
+ }.to raise_error(Storage::MissingFileError)
81
81
  end
82
-
82
+
83
83
  it "should raise when saving a file that already exists" do
84
84
  object = mock("object")
85
85
  options = {:name => "lorem.txt", :bucket => "files"}
86
86
  Storage::Strategies::S3.should_receive(:find_object).with(@source, options).and_return(object)
87
-
88
- lambda {
87
+
88
+ expect {
89
89
  Storage.store(@source, :name => "lorem.txt", :bucket => "files")
90
- }.should raise_error(Storage::FileAlreadyExistsError)
90
+ }.to raise_error(Storage::FileAlreadyExistsError)
91
91
  end
92
92
  end
data/spec/storage_spec.rb CHANGED
@@ -4,40 +4,40 @@ describe Storage do
4
4
  it "should return the strategy" do
5
5
  @strategy = mock("strategy")
6
6
  Storage::Config.strategy_class = @strategy
7
-
7
+
8
8
  Storage.strategy.should be(@strategy)
9
9
  end
10
-
10
+
11
11
  it "should return the config" do
12
- Storage::Strategies::S3.stub!(:prepare!)
13
-
12
+ Storage::Strategies::S3.stub :prepare!
13
+
14
14
  Storage.setup do |config|
15
15
  config.strategy = :s3
16
16
  config.should be(Storage::Config)
17
17
  end
18
18
  end
19
-
19
+
20
20
  it "prepare strategy after setting its configuration" do
21
21
  Storage::Strategies::S3.should_receive(:prepare!).once
22
22
  Storage.setup {|config| config.strategy = :s3}
23
23
  end
24
-
24
+
25
25
  context "delegation" do
26
26
  before do
27
27
  @strategy = mock("strategy")
28
28
  Storage.should_receive(:strategy).and_return(@strategy)
29
29
  end
30
-
30
+
31
31
  it "should delegate save method" do
32
32
  @strategy.should_receive(:store).with("some/file")
33
33
  Storage.store "some/file"
34
34
  end
35
-
35
+
36
36
  it "should delegate destroy method" do
37
37
  @strategy.should_receive(:remove).with("some/file")
38
38
  Storage.remove "some/file"
39
39
  end
40
-
40
+
41
41
  it "should delegate get method" do
42
42
  @strategy.should_receive(:get).with("some/file")
43
43
  Storage.get "some/file"
data/storage.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "storage/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "storage"
7
+ s.version = Storage::Version::STRING
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Nando Vieira"]
10
+ s.email = ["fnando.vieira@gmail.com"]
11
+ s.homepage = "http://github.com/fnando/storage"
12
+ s.summary = "This gem provides a simple API for multiple storage backends. Supported storages: Amazon S3 and FileSystem."
13
+ s.description = s.summary
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_dependency "aws-s3", "~> 0.6.2"
21
+
22
+ s.add_development_dependency "rails" , "~> 3.0"
23
+ s.add_development_dependency "fakeweb" , "~> 1.3.0"
24
+ s.add_development_dependency "rspec-rails" , "~> 2.5.0"
25
+ s.add_development_dependency "nokogiri" , "~> 1.4.4"
26
+ s.add_development_dependency "sqlite3-ruby" , "~> 1.3.3"
27
+ s.add_development_dependency "ruby-debug19" if RUBY_VERSION >= "1.9"
28
+ end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: storage
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 0
9
- version: 0.1.0
4
+ prerelease:
5
+ version: 0.1.1
10
6
  platform: ruby
11
7
  authors:
12
8
  - Nando Vieira
@@ -14,31 +10,101 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2010-06-17 00:00:00 -03:00
18
- default_executable:
13
+ date: 2011-05-31 00:00:00 Z
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
21
16
  name: aws-s3
22
17
  prerelease: false
23
18
  requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
24
20
  requirements:
25
- - - ">="
21
+ - - ~>
26
22
  - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
23
+ version: 0.6.2
30
24
  type: :runtime
31
25
  version_requirements: *id001
32
- description:
33
- email: fnando.vieira@gmail.com
26
+ - !ruby/object:Gem::Dependency
27
+ name: rails
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: "3.0"
35
+ type: :development
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: fakeweb
39
+ prerelease: false
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.3.0
46
+ type: :development
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec-rails
50
+ prerelease: false
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: 2.5.0
57
+ type: :development
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
60
+ name: nokogiri
61
+ prerelease: false
62
+ requirement: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: 1.4.4
68
+ type: :development
69
+ version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: sqlite3-ruby
72
+ prerelease: false
73
+ requirement: &id006 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: 1.3.3
79
+ type: :development
80
+ version_requirements: *id006
81
+ - !ruby/object:Gem::Dependency
82
+ name: ruby-debug19
83
+ prerelease: false
84
+ requirement: &id007 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: "0"
90
+ type: :development
91
+ version_requirements: *id007
92
+ description: "This gem provides a simple API for multiple storage backends. Supported storages: Amazon S3 and FileSystem."
93
+ email:
94
+ - fnando.vieira@gmail.com
34
95
  executables: []
35
96
 
36
97
  extensions: []
37
98
 
38
- extra_rdoc_files:
39
- - README.rdoc
99
+ extra_rdoc_files: []
100
+
40
101
  files:
102
+ - .gitignore
103
+ - .rspec
104
+ - Gemfile
105
+ - Gemfile.lock
41
106
  - README.rdoc
107
+ - Rakefile
42
108
  - lib/storage.rb
43
109
  - lib/storage/config.rb
44
110
  - lib/storage/errors.rb
@@ -52,37 +118,36 @@ files:
52
118
  - spec/storage/strategies/file_system_spec.rb
53
119
  - spec/storage/strategies/s3_spec.rb
54
120
  - spec/storage_spec.rb
55
- has_rdoc: true
121
+ - storage.gemspec
56
122
  homepage: http://github.com/fnando/storage
57
123
  licenses: []
58
124
 
59
125
  post_install_message:
60
- rdoc_options:
61
- - --charset=UTF-8
126
+ rdoc_options: []
127
+
62
128
  require_paths:
63
129
  - lib
64
130
  required_ruby_version: !ruby/object:Gem::Requirement
131
+ none: false
65
132
  requirements:
66
133
  - - ">="
67
134
  - !ruby/object:Gem::Version
68
- segments:
69
- - 0
70
135
  version: "0"
71
136
  required_rubygems_version: !ruby/object:Gem::Requirement
137
+ none: false
72
138
  requirements:
73
139
  - - ">="
74
140
  - !ruby/object:Gem::Version
75
- segments:
76
- - 0
77
141
  version: "0"
78
142
  requirements: []
79
143
 
80
144
  rubyforge_project:
81
- rubygems_version: 1.3.6
145
+ rubygems_version: 1.8.3
82
146
  signing_key:
83
147
  specification_version: 3
84
148
  summary: "This gem provides a simple API for multiple storage backends. Supported storages: Amazon S3 and FileSystem."
85
149
  test_files:
150
+ - spec/resources/file.txt
86
151
  - spec/spec_helper.rb
87
152
  - spec/storage/config_spec.rb
88
153
  - spec/storage/strategies/file_system_spec.rb