siba-destination-aws-s3 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ *.swp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in siba-destination-aws-s3.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,9 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'minitest', :notify=>false do
5
+ watch(%r|^test/unit/(.*\/)*test_(.*)\.rb|)
6
+ watch(%r|^lib/siba-destination-aws-s3/(.*\/)*([^/]+)\.rb|) do |m|
7
+ "test/unit/#{m[1]}test_#{m[2]}.rb" unless m[2][0] == '.'
8
+ end
9
+ end
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Evgeny Neumerzhitskiy
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # Amazon S3 destination plugin for SIBA
2
+
3
+ This plugin lets you keep your SIBA backups in Amazon S3 cloud storage.
4
+
5
+ ## Installation
6
+
7
+ $ gem install siba-destination-aws-s3
8
+
9
+ ## Usage
10
+
11
+ Run `siba generate FILE` command to generate options file and select aws-s3 as destination plugin. After that edit the options file and set your Amazon S3 options.
12
+
13
+ ## License
14
+
15
+ Copyright (c) 2011 Evgeny Neumerzhitskiy
16
+
17
+ Permission is hereby granted, free of charge, to any person obtaining
18
+ a copy of this software and associated documentation files (the
19
+ "Software"), to deal in the Software without restriction, including
20
+ without limitation the rights to use, copy, modify, merge, publish,
21
+ distribute, sublicense, and/or sell copies of the Software, and to
22
+ permit persons to whom the Software is furnished to do so, subject to
23
+ the following conditions:
24
+
25
+ The above copyright notice and this permission notice shall be
26
+ included in all copies or substantial portions of the Software.
27
+
28
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
+
36
+
data/Rakefile ADDED
@@ -0,0 +1,28 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ namespace "test" do
5
+ desc "Run all unit tests"
6
+ Rake::TestTask.new("unit") do |t|
7
+ t.pattern = "test/unit/**/test*.rb"
8
+ t.libs << 'test'
9
+ end
10
+
11
+ desc "Run all integration tests"
12
+ Rake::TestTask.new("integration") do |t|
13
+ t.pattern = "test/integration/**/i9n_*.rb"
14
+ t.libs << 'test'
15
+ end
16
+
17
+ desc "Run all integration tests"
18
+ task :i9n => ["test:integration"] do
19
+ end
20
+ end
21
+
22
+ desc "Run all unit tests"
23
+ task :test => ["test:unit"] do
24
+ end
25
+
26
+ desc "Run tests"
27
+ task :default => "test:unit"
28
+
@@ -0,0 +1,11 @@
1
+ # encoding: UTF-8
2
+
3
+ require "siba-destination-aws-s3/version"
4
+ require "siba-destination-aws-s3/init"
5
+
6
+ module Siba
7
+ module Destination
8
+ module AwsS3
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,139 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'aws/s3'
4
+
5
+ module Siba::Destination
6
+ module AwsS3
7
+ class Cloud
8
+ include Siba::FilePlug
9
+ include Siba::LoggerPlug
10
+
11
+ attr_accessor :bucket, :sub_dir, :access_key_id, :secret_key
12
+
13
+ def initialize(bucket, access_key_id, secret_key)
14
+ splitted_name = bucket.split("/")
15
+ @bucket = splitted_name.shift
16
+ @sub_dir = splitted_name.join("/")
17
+ @access_key_id = access_key_id
18
+ @secret_key = secret_key
19
+
20
+ check_connection
21
+ end
22
+
23
+ def upload(src_file)
24
+ file_name = File.basename src_file
25
+ logger.info "Uploading backup file to Amazon S3: #{file_name}, bucket: #{bucket_with_path}"
26
+ access_and_close do
27
+ unless siba_file.file_file? src_file
28
+ raise Siba::Error, "Can not find backup file for uploading: #{src_file}"
29
+ end
30
+
31
+ File.open(src_file, "rb") do |file|
32
+ AWS::S3::S3Object.store path(file_name), file
33
+ end
34
+ end
35
+ end
36
+
37
+ def get_backups_list(backup_prefix)
38
+ backups = find_objects backup_prefix
39
+ siba_file.run_this do
40
+ backups.map do |obj|
41
+ [File.basename(obj.key), obj.last_modified]
42
+ end
43
+ end
44
+ end
45
+
46
+ def restore_backup_to_dir(backup_name, dir)
47
+ access_and_close do
48
+ path_to_file = File.join dir, backup_name
49
+ open(path_to_file, 'wb') do |file|
50
+ file.write(get_file backup_name)
51
+ end
52
+ end
53
+ end
54
+
55
+ def exists?(file_name)
56
+ access_and_close do
57
+ AWS::S3::S3Object.exists? path(file_name)
58
+ end
59
+ end
60
+
61
+ def bucket_exists?
62
+ access_and_close do
63
+ AWS::S3::Service.buckets.any?{|a| a.name == bucket}
64
+ end
65
+ end
66
+
67
+ def find_objects(object_prefix)
68
+ access_and_close do
69
+ AWS::S3::Bucket.objects(prefix: path(object_prefix))
70
+ end
71
+ end
72
+
73
+ def get_file(file_name)
74
+ access_and_close do
75
+ begin
76
+ AWS::S3::S3Object.value path(file_name)
77
+ rescue
78
+ logger.error "Failed to get file #{file_name} from Amazon S3"
79
+ raise
80
+ end
81
+ end
82
+ end
83
+
84
+ def delete(file_name)
85
+ access_and_close do
86
+ begin
87
+ AWS::S3::S3Object.delete path(file_name)
88
+ rescue
89
+ logger.error "Failed to delete file #{file_name} from Amazon S3"
90
+ raise
91
+ end
92
+ end
93
+ end
94
+
95
+ def check_connection
96
+ siba_file.run_this do
97
+ raise Siba::Error, "Bucket '#{bucket}' does not exist." unless bucket_exists?
98
+ exists? "some_file"
99
+ logger.debug "Access to Amazon S3 is verified"
100
+ end
101
+ rescue Exception
102
+ logger.error "Can not connect to Amazon S3. Bucket: #{bucket_with_path}"
103
+ raise
104
+ end
105
+
106
+ private
107
+
108
+ def path(file)
109
+ return file if sub_dir.empty?
110
+ sub_dir + "/" + file
111
+ end
112
+
113
+ def bucket_with_path
114
+ return bucket if sub_dir.empty?
115
+ bucket + "/" + sub_dir
116
+ end
117
+
118
+ def access_and_close
119
+ siba_file.run_this do
120
+ begin
121
+ AWS::S3::Base.establish_connection!(
122
+ :access_key_id => access_key_id,
123
+ :secret_access_key => secret_key,
124
+ :use_ssl => true);
125
+
126
+ AWS::S3::Bucket.set_current_bucket_to bucket
127
+ AWS::S3::S3Object.set_current_bucket_to bucket
128
+ yield
129
+ ensure
130
+ begin
131
+ AWS::S3::Base.disconnect!
132
+ rescue
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'siba-destination-aws-s3/cloud'
4
+
5
+ module Siba::Destination
6
+ module AwsS3
7
+ class Init
8
+ include Siba::LoggerPlug
9
+
10
+ DEFAULT_ACCESS_KEY_ID_ENV_NAME = "SIBA_AMAZON_ACCESS_KEY_ID"
11
+ DEFAULT_SECRET_KEY_ENV_NAME = "SIBA_AMAZON_SECRET_ACCESS_KEY"
12
+
13
+ attr_accessor :cloud
14
+
15
+ def initialize(options)
16
+ bucket = Siba::SibaCheck.options_string options, "bucket"
17
+
18
+ access_key_id_name = "access_key_id"
19
+ secret_key_name = "secret_access_key"
20
+ access_key_id = Siba::SibaCheck.options_string options, access_key_id_name, true, ENV[DEFAULT_ACCESS_KEY_ID_ENV_NAME]
21
+ secret_key = Siba::SibaCheck.options_string options, secret_key_name, true, ENV[DEFAULT_SECRET_KEY_ENV_NAME]
22
+
23
+ raise Siba::CheckError, "Missing '#{access_key_id_name}' option" if access_key_id.nil?
24
+ raise Siba::CheckError, "Missing '#{secret_key_name}' option" if secret_key.nil?
25
+
26
+ logger.info "Checking connection to Amazon S3"
27
+ @cloud = Siba::Destination::AwsS3::Cloud.new bucket, access_key_id, secret_key
28
+ end
29
+
30
+ def backup(path_to_backup_file)
31
+ @cloud.upload path_to_backup_file
32
+ end
33
+
34
+ # Returns an array of two-element arrays:
35
+ # [backup_file_name, modification_time]
36
+ def get_backups_list(backup_name)
37
+ logger.info "Getting the list of backups from Amazon S3"
38
+ @cloud.get_backups_list backup_name
39
+ end
40
+
41
+ # Put backup file into dir
42
+ def restore(backup_name, dir)
43
+ logger.info "Downloading backup from Amazon S3"
44
+ @cloud.restore_backup_to_dir backup_name, dir
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,3 @@
1
+ bucket: your-bucket/sub-dir
2
+ access_key_id: your AWS S3 'access key id'
3
+ secret_access_key: your AWS S3 'secret access key'
@@ -0,0 +1,9 @@
1
+ # encoding: UTF-8
2
+
3
+ module Siba
4
+ module Destination
5
+ module AwsS3
6
+ VERSION = "0.1.0"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "siba-destination-aws-s3/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "siba-destination-aws-s3"
7
+ s.version = Siba::Destination::AwsS3::VERSION
8
+ s.authors = ["Evgeny Neumerzhitskiy"]
9
+ s.email = ["sausageskin@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Writes SIBA backup to Amazon S3 storage}
12
+ s.description = %q{An extension for SIBA gem. Allows to upload backups to Amazon S3 cloud storage.}
13
+
14
+ s.rubyforge_project = "siba-destination-aws-s3"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_runtime_dependency 'siba', '~>0.4'
22
+ s.add_runtime_dependency 'aws-s3', '~>0.6'
23
+
24
+ s.add_development_dependency 'minitest', '~>2.10'
25
+ s.add_development_dependency 'rake', '~>0.9'
26
+ s.add_development_dependency 'guard-minitest', '~>0.4'
27
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'rubygems'
4
+ gem 'minitest' # loads minitest from gem, not the included one
5
+ require 'minitest/autorun'
6
+
7
+ require 'siba'
8
+ require 'siba/helpers/test/file_mock'
9
+ require 'siba/helpers/test/kernel_mock'
10
+ require 'siba/helpers/test/extend_test'
11
+ require 'siba/helpers/test/removable_constants'
12
+ require 'siba/helpers/test/helper'
13
+
@@ -0,0 +1,5 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'helper/require'
4
+ SibaTest.init_integration
5
+
@@ -0,0 +1,4 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'helper/require'
4
+ SibaTest.init_unit
@@ -0,0 +1,58 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'helper/require_integration'
4
+ require 'siba-destination-aws-s3/init'
5
+
6
+ describe Siba::Destination::AwsS3::Cloud do
7
+ before do
8
+ @cls = Siba::Destination::AwsS3::Cloud
9
+ @init = Siba::Destination::AwsS3::Init
10
+
11
+ bucket_env = "SIBA_TEST_AWS_S3_BUCKET_NAME"
12
+ access_key_id_env = @init::DEFAULT_ACCESS_KEY_ID_ENV_NAME
13
+ secret_key_env = @init::DEFAULT_SECRET_KEY_ENV_NAME
14
+
15
+ @bucket = ENV[bucket_env]
16
+ @access_key_id = ENV[access_key_id_env]
17
+ @secret_key = ENV[secret_key_env]
18
+
19
+ flunk "#{bucket_env} environment variable is not set" unless @bucket
20
+ flunk "#{access_key_id_env} environment variable is not set" unless @access_key_id
21
+ flunk "#{secret_key_env} environment variable is not set" unless @secret_key
22
+ end
23
+
24
+ it "should upload file to cloud and get the list" do
25
+ begin
26
+ @cloud = @cls.new @bucket, @access_key_id, @secret_key
27
+
28
+ backup_name = "awss3-u"
29
+ path_to_test_file = prepare_test_file backup_name
30
+ @cloud.upload path_to_test_file
31
+
32
+ file_name = File.basename path_to_test_file
33
+ @cloud.exists?(file_name).must_equal true
34
+ @cloud.get_file(file_name).must_equal Siba::FileHelper.read(path_to_test_file)
35
+
36
+ # get list
37
+ list = @cloud.get_backups_list backup_name
38
+ full_backup_name = list[0][0]
39
+ full_backup_name.must_match /^#{backup_name}/
40
+ list[0][1].must_be_instance_of Time
41
+
42
+ # restore backup
43
+ dest_dir = mkdir_in_tmp_dir "awsbk"
44
+ @cloud.restore_backup_to_dir full_backup_name, dest_dir
45
+ path_to_dest_file = File.join dest_dir, full_backup_name
46
+ File.file?(path_to_dest_file).must_equal true
47
+ FileUtils.compare_file(path_to_test_file, path_to_dest_file).must_equal true
48
+ ensure
49
+ @cloud.delete(file_name)
50
+ @cloud.exists?(file_name).must_equal false
51
+ end
52
+ end
53
+
54
+ it "should find objects" do
55
+ @cloud = @cls.new @bucket, @access_key_id, @secret_key
56
+ @cloud.find_objects("my").must_be_instance_of Array
57
+ end
58
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'helper/require_unit'
4
+ require 'siba-destination-aws-s3/init'
5
+
6
+ describe Siba::Destination::AwsS3::Cloud do
7
+ before do
8
+ @obj = Siba::Destination::AwsS3::Cloud.new "bucket", "two", "umi"
9
+ end
10
+
11
+ it "should assign variables" do
12
+ @obj.bucket.must_equal "bucket"
13
+ @obj.access_key_id.must_equal "two"
14
+ @obj.secret_key.must_equal "umi"
15
+ end
16
+
17
+ it "should upload" do
18
+ @obj.upload "/file"
19
+ end
20
+
21
+ it "should upload" do
22
+ @obj.get_backups_list "backups"
23
+ end
24
+ end
@@ -0,0 +1,54 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'helper/require_unit'
4
+ require 'siba-destination-aws-s3/init'
5
+
6
+ describe Siba::Destination::AwsS3::Init do
7
+ before do
8
+ @obj = Siba::Destination::AwsS3::Init
9
+ @yml_path = File.expand_path('../yml', __FILE__)
10
+ @options_hash = load_options "valid"
11
+ @plugin = @obj.new @options_hash
12
+ end
13
+
14
+ it "should load plugin" do
15
+ @plugin.must_be_instance_of Siba::Destination::AwsS3::Init
16
+ @plugin.cloud.must_be_instance_of Siba::Destination::AwsS3::Cloud
17
+ end
18
+
19
+ it "should not fail if keys are missing but env variables are defined" do
20
+ ENV[@obj::DEFAULT_ACCESS_KEY_ID_ENV_NAME] = "akd"
21
+ ENV[@obj::DEFAULT_SECRET_KEY_ENV_NAME] = "sk"
22
+ cloud = @obj.new({"bucket"=>"bucket"})
23
+ cloud.cloud.access_key_id.must_equal "akd"
24
+ cloud.cloud.secret_key.must_equal "sk"
25
+ end
26
+
27
+ it "should fail if keys are missing" do
28
+ ENV[@obj::DEFAULT_ACCESS_KEY_ID_ENV_NAME] = nil
29
+ ENV[@obj::DEFAULT_SECRET_KEY_ENV_NAME] = "sk"
30
+ ->{@obj.new({"bucket"=>"bucket"})}.must_raise Siba::CheckError
31
+
32
+ ENV[@obj::DEFAULT_ACCESS_KEY_ID_ENV_NAME] = "akd"
33
+ ENV[@obj::DEFAULT_SECRET_KEY_ENV_NAME] = nil
34
+ ->{@obj.new({"bucket"=>"bucket"})}.must_raise Siba::CheckError
35
+ end
36
+
37
+ it "should fail when bucket is missing" do
38
+ ->{@obj.new({})}.must_raise Siba::CheckError
39
+ ->{@obj.new({"secret_key"=>"value"})}.must_raise Siba::CheckError
40
+ ->{@obj.new({"access_key_id"=>"value"})}.must_raise Siba::CheckError
41
+ end
42
+
43
+ it "should run backup" do
44
+ @plugin.backup "/file"
45
+ end
46
+
47
+ it "should run get_backups_list" do
48
+ @plugin.get_backups_list "/file"
49
+ end
50
+
51
+ it "should run restore" do
52
+ @plugin.restore "backup_name", "/dir"
53
+ end
54
+ end
@@ -0,0 +1,5 @@
1
+ type: aws-s3
2
+ bucket: bucket/subdir
3
+ access_key_id: acces key id
4
+ secret_access_key: secret key
5
+
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: siba-destination-aws-s3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Evgeny Neumerzhitskiy
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: siba
16
+ requirement: &85710210 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0.4'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *85710210
25
+ - !ruby/object:Gem::Dependency
26
+ name: aws-s3
27
+ requirement: &85709390 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '0.6'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *85709390
36
+ - !ruby/object:Gem::Dependency
37
+ name: minitest
38
+ requirement: &85705900 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '2.10'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *85705900
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: &85705530 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.9'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *85705530
58
+ - !ruby/object:Gem::Dependency
59
+ name: guard-minitest
60
+ requirement: &85705130 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: '0.4'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *85705130
69
+ description: An extension for SIBA gem. Allows to upload backups to Amazon S3 cloud
70
+ storage.
71
+ email:
72
+ - sausageskin@gmail.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - .gitignore
78
+ - Gemfile
79
+ - Guardfile
80
+ - LICENSE
81
+ - README.md
82
+ - Rakefile
83
+ - lib/siba-destination-aws-s3.rb
84
+ - lib/siba-destination-aws-s3/cloud.rb
85
+ - lib/siba-destination-aws-s3/init.rb
86
+ - lib/siba-destination-aws-s3/options.yml
87
+ - lib/siba-destination-aws-s3/version.rb
88
+ - siba-destination-aws-s3.gemspec
89
+ - test/helper/require.rb
90
+ - test/helper/require_integration.rb
91
+ - test/helper/require_unit.rb
92
+ - test/integration/i9n_cloud.rb
93
+ - test/unit/test_cloud.rb
94
+ - test/unit/test_init.rb
95
+ - test/unit/yml/valid.yml
96
+ homepage: ''
97
+ licenses: []
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project: siba-destination-aws-s3
116
+ rubygems_version: 1.8.11
117
+ signing_key:
118
+ specification_version: 3
119
+ summary: Writes SIBA backup to Amazon S3 storage
120
+ test_files: []