geemus-fog 0.0.0 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +3 -0
- data/VERSION +1 -1
- data/fog.gemspec +266 -0
- data/lib/fog/aws/models/ec2/address.rb +31 -0
- data/lib/fog/aws/models/ec2/addresses.rb +36 -0
- data/lib/fog/aws/models/ec2/key_pair.rb +35 -0
- data/lib/fog/aws/models/ec2/key_pairs.rb +36 -0
- data/lib/fog/aws/models/ec2/volume.rb +47 -0
- data/lib/fog/aws/models/ec2/volumes.rb +36 -0
- data/lib/fog/aws/models/s3/bucket.rb +62 -0
- data/lib/fog/aws/models/s3/buckets.rb +38 -0
- data/lib/fog/aws/models/s3/object.rb +103 -0
- data/lib/fog/aws/models/s3/objects.rb +73 -0
- data/lib/fog/aws/models/s3/owner.rb +22 -0
- data/lib/fog/aws/s3.rb +9 -0
- data/lib/fog/collection.rb +46 -0
- data/lib/fog/model.rb +46 -0
- data/spec/aws/models/s3/buckets_spec.rb +31 -0
- data/spec/aws/{ec2 → requests/ec2}/allocate_address_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/associate_address_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/attach_volume_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/authorize_security_group_ingress_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/create_key_pair_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/create_security_group_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/create_snapshot_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/create_volume_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/delete_key_pair_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/delete_security_group_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/delete_snapshot_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/delete_volume_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/describe_addresses_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/describe_availability_zones_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/describe_images_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/describe_instances_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/describe_key_pairs_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/describe_regions_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/describe_security_groups_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/describe_snapshot_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/describe_volumes_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/detach_volume_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/disassociate_address_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/get_console_output_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/reboot_instances_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/release_address_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/revoke_security_group_ingress_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/run_instances_spec.rb +1 -1
- data/spec/aws/{ec2 → requests/ec2}/terminate_instances_spec.rb +1 -1
- data/spec/aws/{s3 → requests/s3}/copy_object_spec.rb +2 -2
- data/spec/aws/{s3 → requests/s3}/delete_bucket_spec.rb +1 -1
- data/spec/aws/{s3 → requests/s3}/delete_object_spec.rb +2 -2
- data/spec/aws/{s3 → requests/s3}/get_bucket_location_spec.rb +1 -1
- data/spec/aws/{s3 → requests/s3}/get_bucket_spec.rb +2 -2
- data/spec/aws/{s3 → requests/s3}/get_object_spec.rb +3 -3
- data/spec/aws/{s3 → requests/s3}/get_request_payment_spec.rb +1 -1
- data/spec/aws/{s3 → requests/s3}/get_service_spec.rb +1 -1
- data/spec/aws/{s3 → requests/s3}/head_object_spec.rb +3 -3
- data/spec/aws/{s3 → requests/s3}/put_bucket_spec.rb +1 -1
- data/spec/aws/{s3 → requests/s3}/put_object_spec.rb +4 -4
- data/spec/aws/{s3 → requests/s3}/put_request_payment_spec.rb +1 -1
- data/spec/aws/{simpledb → requests/simpledb}/batch_put_attributes_spec.rb +1 -1
- data/spec/aws/{simpledb → requests/simpledb}/create_domain_spec.rb +1 -1
- data/spec/aws/{simpledb → requests/simpledb}/delete_attributes_spec.rb +1 -1
- data/spec/aws/{simpledb → requests/simpledb}/delete_domain_spec.rb +1 -1
- data/spec/aws/{simpledb → requests/simpledb}/domain_metadata_spec.rb +1 -1
- data/spec/aws/{simpledb → requests/simpledb}/get_attributes_spec.rb +1 -1
- data/spec/aws/{simpledb → requests/simpledb}/list_domains_spec.rb +1 -1
- data/spec/aws/{simpledb → requests/simpledb}/put_attributes_spec.rb +1 -1
- data/spec/aws/{simpledb → requests/simpledb}/select_spec.rb +1 -1
- metadata +148 -103
@@ -0,0 +1,103 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class S3
|
4
|
+
|
5
|
+
class Object < Fog::Model
|
6
|
+
|
7
|
+
attr_accessor :body,
|
8
|
+
:content_length,
|
9
|
+
:etag,
|
10
|
+
:key,
|
11
|
+
:last_modified,
|
12
|
+
:owner,
|
13
|
+
:size,
|
14
|
+
:storage_class
|
15
|
+
|
16
|
+
def initialize(attributes = {})
|
17
|
+
remap_attributes(attributes, {
|
18
|
+
'Content-Length' => :content_length,
|
19
|
+
'ETag' => :etag,
|
20
|
+
'Key' => :key,
|
21
|
+
'LastModified' => :last_modified,
|
22
|
+
'Last-Modified' => :last_modified,
|
23
|
+
'Size' => :size,
|
24
|
+
'StorageClass' => :storage_class
|
25
|
+
})
|
26
|
+
super
|
27
|
+
end
|
28
|
+
|
29
|
+
def body
|
30
|
+
@body ||= get.body
|
31
|
+
end
|
32
|
+
|
33
|
+
def content_length
|
34
|
+
@content_length ||= head.content_length
|
35
|
+
end
|
36
|
+
|
37
|
+
def copy(target_bucket_name, target_object_key)
|
38
|
+
data = connection.copy_object(bucket, key, target_bucket_name, target_object_key).body
|
39
|
+
copy = self.dup
|
40
|
+
copy_data = {}
|
41
|
+
for key, value in data
|
42
|
+
if ['ETag', 'LastModified'].include?(key)
|
43
|
+
copy_data[key] = value
|
44
|
+
end
|
45
|
+
end
|
46
|
+
copy.update_attributes(copy_data)
|
47
|
+
copy
|
48
|
+
end
|
49
|
+
|
50
|
+
def delete
|
51
|
+
connection.delete_object(bucket, key)
|
52
|
+
end
|
53
|
+
|
54
|
+
def etag
|
55
|
+
@etag ||= head.etag
|
56
|
+
end
|
57
|
+
|
58
|
+
def last_modified
|
59
|
+
@last_modified ||= head.last_modified
|
60
|
+
end
|
61
|
+
|
62
|
+
def save(options = {})
|
63
|
+
data = connection.put_object(bucket, key, body, options)
|
64
|
+
@etag = data.headers['ETag']
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def get
|
70
|
+
data = connection.get_object(bucket.name, key, options)
|
71
|
+
object_data = { :body => data.body}
|
72
|
+
for key, value in data.headers
|
73
|
+
if ['Content-Length', 'ETag', 'Last-Modified'].include?(key)
|
74
|
+
object_data[key] = value
|
75
|
+
end
|
76
|
+
end
|
77
|
+
update_attributes(object_data)
|
78
|
+
end
|
79
|
+
|
80
|
+
def head
|
81
|
+
data = connection.head_object(bucket.name, key, options)
|
82
|
+
object_data = {}
|
83
|
+
for key, value in data.headers
|
84
|
+
if ['Content-Length', 'ETag', 'Last-Modified'].include?(key)
|
85
|
+
object_data[key] = value
|
86
|
+
end
|
87
|
+
end
|
88
|
+
update_attributes(object_data)
|
89
|
+
end
|
90
|
+
|
91
|
+
def bucket=(new_bucket)
|
92
|
+
@bucket = new_bucket
|
93
|
+
end
|
94
|
+
|
95
|
+
def bucket
|
96
|
+
@bucket
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class S3
|
4
|
+
|
5
|
+
class Objects < Fog::Collection
|
6
|
+
|
7
|
+
attr_accessor :is_truncated,
|
8
|
+
:marker,
|
9
|
+
:max_keys,
|
10
|
+
:prefix
|
11
|
+
|
12
|
+
def initialize(attributes = {})
|
13
|
+
remap_attributes(attributes, {
|
14
|
+
'IsTruncated' => :is_truncated,
|
15
|
+
'Marker' => :marker,
|
16
|
+
'MaxKeys' => :max_keys,
|
17
|
+
'Prefix' => :prefix
|
18
|
+
})
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
22
|
+
def all
|
23
|
+
data = connection.get_bucket(bucket.name, options).body
|
24
|
+
objects_data = {}
|
25
|
+
for key, value in data
|
26
|
+
if ['IsTruncated', 'Marker', 'MaxKeys', 'Prefix'].include?(key)
|
27
|
+
objects_data[key] = value
|
28
|
+
end
|
29
|
+
end
|
30
|
+
objects = Fog::AWS::S3::Objects.new({
|
31
|
+
:bucket => bucket,
|
32
|
+
:connection => connection
|
33
|
+
}.merge!(objects_data))
|
34
|
+
data['Contents'].each do |object|
|
35
|
+
owner = Fog::AWS::S3::Owner.new(object.delete('Owner').merge!(:connection => connection))
|
36
|
+
objects << Fog::AWS::S3::Object.new({
|
37
|
+
:bucket => bucket,
|
38
|
+
:connection => connection,
|
39
|
+
:owner => owner
|
40
|
+
}.merge!(object))
|
41
|
+
end
|
42
|
+
objects
|
43
|
+
end
|
44
|
+
|
45
|
+
def create(attributes = {})
|
46
|
+
object = new(attributes)
|
47
|
+
object.save
|
48
|
+
object
|
49
|
+
end
|
50
|
+
|
51
|
+
def new(attributes = {})
|
52
|
+
Fog::AWS::S3::Object.new({
|
53
|
+
:bucket => bucket,
|
54
|
+
:connection => connection
|
55
|
+
}.merge!(attributes))
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def bucket=(new_bucket)
|
61
|
+
@bucket = new_bucket
|
62
|
+
end
|
63
|
+
|
64
|
+
def bucket
|
65
|
+
@bucket
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class S3
|
4
|
+
|
5
|
+
class Owner < Fog::Model
|
6
|
+
|
7
|
+
attr_accessor :display_name,
|
8
|
+
:id
|
9
|
+
|
10
|
+
def initialize(attributes = {})
|
11
|
+
remap_attributes(attributes, {
|
12
|
+
'DisplayName' => :display_name,
|
13
|
+
'ID' => :id
|
14
|
+
})
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/fog/aws/s3.rb
CHANGED
@@ -4,10 +4,19 @@ module Fog
|
|
4
4
|
|
5
5
|
def self.reload
|
6
6
|
current_directory = File.dirname(__FILE__)
|
7
|
+
load "#{current_directory}/../collection.rb"
|
7
8
|
load "#{current_directory}/../connection.rb"
|
9
|
+
load "#{current_directory}/../model.rb"
|
8
10
|
load "#{current_directory}/../parser.rb"
|
9
11
|
load "#{current_directory}/../response.rb"
|
10
12
|
|
13
|
+
models_directory = "#{current_directory}/models/s3"
|
14
|
+
load "#{models_directory}/bucket.rb"
|
15
|
+
load "#{models_directory}/buckets.rb"
|
16
|
+
load "#{models_directory}/object.rb"
|
17
|
+
load "#{models_directory}/objects.rb"
|
18
|
+
load "#{models_directory}/owner.rb"
|
19
|
+
|
11
20
|
parsers_directory = "#{current_directory}/parsers/s3"
|
12
21
|
load "#{parsers_directory}/copy_object.rb"
|
13
22
|
load "#{parsers_directory}/get_bucket.rb"
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Fog
|
2
|
+
class Collection
|
3
|
+
|
4
|
+
def initialize(attributes = {})
|
5
|
+
update_attributes(attributes)
|
6
|
+
end
|
7
|
+
|
8
|
+
def inspect
|
9
|
+
data = "#<#{self.class.name}"
|
10
|
+
for attribute in (self.instance_variables - ['@connection'])
|
11
|
+
data << " #{attribute}=#{send(attribute[1..-1].to_sym).inspect}"
|
12
|
+
end
|
13
|
+
data << "["
|
14
|
+
self.each do |element|
|
15
|
+
data << "#{element.inspect}, "
|
16
|
+
end
|
17
|
+
data = data[0..-3]
|
18
|
+
data << "]>"
|
19
|
+
end
|
20
|
+
|
21
|
+
def update_attributes(attributes = {})
|
22
|
+
for key, value in attributes
|
23
|
+
send(:"#{key}=", value)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def connection=(new_connection)
|
30
|
+
@connection = new_connection
|
31
|
+
end
|
32
|
+
|
33
|
+
def connection
|
34
|
+
@connection
|
35
|
+
end
|
36
|
+
|
37
|
+
def remap_attributes(attributes, mapping)
|
38
|
+
for key, value in mapping
|
39
|
+
if attributes[key]
|
40
|
+
attributes[value] = attributes.delete(key)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
data/lib/fog/model.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
module Fog
|
2
|
+
class Model
|
3
|
+
|
4
|
+
def initialize(attributes = {})
|
5
|
+
update_attributes(attributes)
|
6
|
+
end
|
7
|
+
|
8
|
+
def inspect
|
9
|
+
data = "#<#{self.class.name}"
|
10
|
+
for attribute in (self.instance_variables - ['@connection'])
|
11
|
+
data << " #{attribute}=#{send(attribute[1..-1].to_sym).inspect}"
|
12
|
+
end
|
13
|
+
data << ">"
|
14
|
+
end
|
15
|
+
|
16
|
+
def update_attributes(attributes = {})
|
17
|
+
for key, value in attributes
|
18
|
+
send(:"#{key}=", value)
|
19
|
+
end
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def connection=(new_connection)
|
26
|
+
@connection = new_connection
|
27
|
+
end
|
28
|
+
|
29
|
+
def connection
|
30
|
+
@connection
|
31
|
+
end
|
32
|
+
|
33
|
+
def new_record?
|
34
|
+
!defined?(@new_record) || @new_record
|
35
|
+
end
|
36
|
+
|
37
|
+
def remap_attributes(attributes, mapping)
|
38
|
+
for key, value in mapping
|
39
|
+
if attributes[key]
|
40
|
+
attributes[value] = attributes.delete(key)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
|
3
|
+
describe 'S3.buckets' do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@s3 = Fog::AWS::S3.gen
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should return buckets from all" do
|
10
|
+
p @s3.buckets.all
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should create bucket" do
|
14
|
+
p @bucket = @s3.buckets.create(:name => 'fogbucketstest')
|
15
|
+
p @bucket.delete
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should get/put request payment" do
|
19
|
+
p @bucket = @s3.buckets.create(:name => 'fogbucketspaymenttest')
|
20
|
+
p @bucket.payer = 'BucketOwner'
|
21
|
+
p @bucket.payer
|
22
|
+
p @bucket.delete
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should push bucket down into objects" do
|
26
|
+
p @bucket = @s3.buckets.create(:name => 'fogbucketspaymenttest')
|
27
|
+
p @bucket.objects.new(:key => 'object')
|
28
|
+
p @bucket.delete
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require File.dirname(__FILE__) + '
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
2
|
|
3
3
|
describe 'S3.copy_object' do
|
4
4
|
|
5
5
|
before(:all) do
|
6
6
|
@s3 = Fog::AWS::S3.gen
|
7
7
|
@s3.put_bucket('fogcopyobjectsource')
|
8
|
-
file = File.open(File.dirname(__FILE__) + '
|
8
|
+
file = File.open(File.dirname(__FILE__) + '/../../../lorem.txt', 'r')
|
9
9
|
@s3.put_object('fogcopyobjectsource', 'fog_copy_object_source', file)
|
10
10
|
@s3.put_bucket('fogcopyobjectdestination')
|
11
11
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require File.dirname(__FILE__) + '
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
2
|
|
3
3
|
describe 'S3.delete_object' do
|
4
4
|
|
5
5
|
before(:all) do
|
6
6
|
@s3 = Fog::AWS::S3.gen
|
7
7
|
@s3.put_bucket('fogdeleteobject')
|
8
|
-
file = File.open(File.dirname(__FILE__) + '
|
8
|
+
file = File.open(File.dirname(__FILE__) + '/../../../lorem.txt', 'r')
|
9
9
|
@s3.put_object('fogdeleteobject', 'fog_delete_object', file)
|
10
10
|
end
|
11
11
|
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require File.dirname(__FILE__) + '
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
2
|
|
3
3
|
describe 'S3.get_bucket' do
|
4
4
|
|
5
5
|
before(:all) do
|
6
6
|
@s3 = Fog::AWS::S3.gen
|
7
7
|
@s3.put_bucket('foggetbucket')
|
8
|
-
file = File.open(File.dirname(__FILE__) + '
|
8
|
+
file = File.open(File.dirname(__FILE__) + '/../../../lorem.txt', 'r')
|
9
9
|
@s3.put_object('foggetbucket', 'fog_get_bucket', file)
|
10
10
|
end
|
11
11
|
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require File.dirname(__FILE__) + '
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
2
|
|
3
3
|
describe 'S3.get_object' do
|
4
4
|
|
5
5
|
before(:all) do
|
6
6
|
@s3 = Fog::AWS::S3.gen
|
7
7
|
@s3.put_bucket('foggetobject')
|
8
|
-
file = File.open(File.dirname(__FILE__) + '
|
8
|
+
file = File.open(File.dirname(__FILE__) + '/../../../lorem.txt', 'r')
|
9
9
|
@s3.put_object('foggetobject', 'fog_get_object', file)
|
10
10
|
end
|
11
11
|
|
@@ -17,7 +17,7 @@ describe 'S3.get_object' do
|
|
17
17
|
it 'should return proper attributes' do
|
18
18
|
actual = @s3.get_object('foggetobject', 'fog_get_object')
|
19
19
|
actual.status.should == 200
|
20
|
-
file = File.open(File.dirname(__FILE__) + '
|
20
|
+
file = File.open(File.dirname(__FILE__) + '/../../../lorem.txt', 'r')
|
21
21
|
data = file.read
|
22
22
|
actual.body.should == data
|
23
23
|
actual.headers['Content-Length'].should == data.length.to_s
|