fog 0.0.3

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.
Files changed (171) hide show
  1. data/.document +5 -0
  2. data/.gitignore +6 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +7 -0
  5. data/Rakefile +98 -0
  6. data/VERSION +1 -0
  7. data/benchs/fog_vs.rb +135 -0
  8. data/benchs/headers_split_vs_match.rb +18 -0
  9. data/benchs/params.rb +43 -0
  10. data/benchs/parse_vs_push.rb +60 -0
  11. data/benchs/stripping.rb +26 -0
  12. data/lib/fog.rb +21 -0
  13. data/lib/fog/aws.rb +145 -0
  14. data/lib/fog/aws/ec2.rb +173 -0
  15. data/lib/fog/aws/models/ec2/address.rb +31 -0
  16. data/lib/fog/aws/models/ec2/addresses.rb +36 -0
  17. data/lib/fog/aws/models/ec2/key_pair.rb +35 -0
  18. data/lib/fog/aws/models/ec2/key_pairs.rb +36 -0
  19. data/lib/fog/aws/models/ec2/volume.rb +47 -0
  20. data/lib/fog/aws/models/ec2/volumes.rb +36 -0
  21. data/lib/fog/aws/models/s3/bucket.rb +77 -0
  22. data/lib/fog/aws/models/s3/buckets.rb +83 -0
  23. data/lib/fog/aws/models/s3/object.rb +76 -0
  24. data/lib/fog/aws/models/s3/objects.rb +97 -0
  25. data/lib/fog/aws/models/s3/owner.rb +18 -0
  26. data/lib/fog/aws/parsers/ec2/allocate_address.rb +19 -0
  27. data/lib/fog/aws/parsers/ec2/attach_volume.rb +22 -0
  28. data/lib/fog/aws/parsers/ec2/basic.rb +25 -0
  29. data/lib/fog/aws/parsers/ec2/create_key_pair.rb +20 -0
  30. data/lib/fog/aws/parsers/ec2/create_snapshot.rb +22 -0
  31. data/lib/fog/aws/parsers/ec2/create_volume.rb +24 -0
  32. data/lib/fog/aws/parsers/ec2/describe_addresses.rb +30 -0
  33. data/lib/fog/aws/parsers/ec2/describe_availability_zones.rb +30 -0
  34. data/lib/fog/aws/parsers/ec2/describe_images.rb +49 -0
  35. data/lib/fog/aws/parsers/ec2/describe_instances.rb +73 -0
  36. data/lib/fog/aws/parsers/ec2/describe_key_pairs.rb +30 -0
  37. data/lib/fog/aws/parsers/ec2/describe_regions.rb +30 -0
  38. data/lib/fog/aws/parsers/ec2/describe_security_groups.rb +75 -0
  39. data/lib/fog/aws/parsers/ec2/describe_snapshots.rb +30 -0
  40. data/lib/fog/aws/parsers/ec2/describe_volumes.rb +57 -0
  41. data/lib/fog/aws/parsers/ec2/detach_volume.rb +22 -0
  42. data/lib/fog/aws/parsers/ec2/get_console_output.rb +28 -0
  43. data/lib/fog/aws/parsers/ec2/run_instances.rb +65 -0
  44. data/lib/fog/aws/parsers/ec2/terminate_instances.rb +55 -0
  45. data/lib/fog/aws/parsers/s3/copy_object.rb +22 -0
  46. data/lib/fog/aws/parsers/s3/get_bucket.rb +46 -0
  47. data/lib/fog/aws/parsers/s3/get_bucket_location.rb +20 -0
  48. data/lib/fog/aws/parsers/s3/get_request_payment.rb +20 -0
  49. data/lib/fog/aws/parsers/s3/get_service.rb +32 -0
  50. data/lib/fog/aws/parsers/simpledb/basic.rb +31 -0
  51. data/lib/fog/aws/parsers/simpledb/domain_metadata.rb +30 -0
  52. data/lib/fog/aws/parsers/simpledb/get_attributes.rb +34 -0
  53. data/lib/fog/aws/parsers/simpledb/list_domains.rb +28 -0
  54. data/lib/fog/aws/parsers/simpledb/select.rb +39 -0
  55. data/lib/fog/aws/requests/ec2/allocate_address.rb +50 -0
  56. data/lib/fog/aws/requests/ec2/associate_address.rb +59 -0
  57. data/lib/fog/aws/requests/ec2/attach_volume.rb +71 -0
  58. data/lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb +32 -0
  59. data/lib/fog/aws/requests/ec2/create_key_pair.rb +60 -0
  60. data/lib/fog/aws/requests/ec2/create_security_group.rb +61 -0
  61. data/lib/fog/aws/requests/ec2/create_snapshot.rb +65 -0
  62. data/lib/fog/aws/requests/ec2/create_volume.rb +66 -0
  63. data/lib/fog/aws/requests/ec2/delete_key_pair.rb +49 -0
  64. data/lib/fog/aws/requests/ec2/delete_security_group.rb +52 -0
  65. data/lib/fog/aws/requests/ec2/delete_snapshot.rb +53 -0
  66. data/lib/fog/aws/requests/ec2/delete_volume.rb +55 -0
  67. data/lib/fog/aws/requests/ec2/describe_addresses.rb +61 -0
  68. data/lib/fog/aws/requests/ec2/describe_availability_zones.rb +64 -0
  69. data/lib/fog/aws/requests/ec2/describe_images.rb +41 -0
  70. data/lib/fog/aws/requests/ec2/describe_instances.rb +114 -0
  71. data/lib/fog/aws/requests/ec2/describe_key_pairs.rb +63 -0
  72. data/lib/fog/aws/requests/ec2/describe_regions.rb +61 -0
  73. data/lib/fog/aws/requests/ec2/describe_security_groups.rb +71 -0
  74. data/lib/fog/aws/requests/ec2/describe_snapshots.rb +78 -0
  75. data/lib/fog/aws/requests/ec2/describe_volumes.rb +85 -0
  76. data/lib/fog/aws/requests/ec2/detach_volume.rb +62 -0
  77. data/lib/fog/aws/requests/ec2/disassociate_address.rb +55 -0
  78. data/lib/fog/aws/requests/ec2/get_console_output.rb +26 -0
  79. data/lib/fog/aws/requests/ec2/reboot_instances.rb +24 -0
  80. data/lib/fog/aws/requests/ec2/release_address.rb +50 -0
  81. data/lib/fog/aws/requests/ec2/revoke_security_group_ingress.rb +32 -0
  82. data/lib/fog/aws/requests/ec2/run_instances.rb +134 -0
  83. data/lib/fog/aws/requests/ec2/terminate_instances.rb +80 -0
  84. data/lib/fog/aws/requests/s3/copy_object.rb +79 -0
  85. data/lib/fog/aws/requests/s3/delete_bucket.rb +53 -0
  86. data/lib/fog/aws/requests/s3/delete_object.rb +52 -0
  87. data/lib/fog/aws/requests/s3/get_bucket.rb +100 -0
  88. data/lib/fog/aws/requests/s3/get_bucket_location.rb +53 -0
  89. data/lib/fog/aws/requests/s3/get_object.rb +82 -0
  90. data/lib/fog/aws/requests/s3/get_request_payment.rb +53 -0
  91. data/lib/fog/aws/requests/s3/get_service.rb +58 -0
  92. data/lib/fog/aws/requests/s3/head_object.rb +61 -0
  93. data/lib/fog/aws/requests/s3/put_bucket.rb +69 -0
  94. data/lib/fog/aws/requests/s3/put_object.rb +76 -0
  95. data/lib/fog/aws/requests/s3/put_request_payment.rb +56 -0
  96. data/lib/fog/aws/requests/simpledb/batch_put_attributes.rb +31 -0
  97. data/lib/fog/aws/requests/simpledb/create_domain.rb +25 -0
  98. data/lib/fog/aws/requests/simpledb/delete_attributes.rb +34 -0
  99. data/lib/fog/aws/requests/simpledb/delete_domain.rb +25 -0
  100. data/lib/fog/aws/requests/simpledb/domain_metadata.rb +30 -0
  101. data/lib/fog/aws/requests/simpledb/get_attributes.rb +35 -0
  102. data/lib/fog/aws/requests/simpledb/list_domains.rb +30 -0
  103. data/lib/fog/aws/requests/simpledb/put_attributes.rb +29 -0
  104. data/lib/fog/aws/requests/simpledb/select.rb +29 -0
  105. data/lib/fog/aws/s3.rb +157 -0
  106. data/lib/fog/aws/simpledb.rb +157 -0
  107. data/lib/fog/collection.rb +77 -0
  108. data/lib/fog/connection.rb +130 -0
  109. data/lib/fog/errors.rb +145 -0
  110. data/lib/fog/model.rb +72 -0
  111. data/lib/fog/parser.rb +30 -0
  112. data/lib/fog/response.rb +12 -0
  113. data/spec/aws/models/s3/bucket_spec.rb +130 -0
  114. data/spec/aws/models/s3/buckets_spec.rb +79 -0
  115. data/spec/aws/models/s3/object_spec.rb +121 -0
  116. data/spec/aws/models/s3/objects_spec.rb +112 -0
  117. data/spec/aws/models/s3/owner_spec.rb +18 -0
  118. data/spec/aws/requests/ec2/allocate_address_spec.rb +18 -0
  119. data/spec/aws/requests/ec2/associate_address_spec.rb +42 -0
  120. data/spec/aws/requests/ec2/attach_volume_spec.rb +53 -0
  121. data/spec/aws/requests/ec2/authorize_security_group_ingress_spec.rb +26 -0
  122. data/spec/aws/requests/ec2/create_key_pair_spec.rb +36 -0
  123. data/spec/aws/requests/ec2/create_security_group_spec.rb +34 -0
  124. data/spec/aws/requests/ec2/create_snapshot_spec.rb +37 -0
  125. data/spec/aws/requests/ec2/create_volume_spec.rb +23 -0
  126. data/spec/aws/requests/ec2/delete_key_pair_spec.rb +21 -0
  127. data/spec/aws/requests/ec2/delete_security_group_spec.rb +26 -0
  128. data/spec/aws/requests/ec2/delete_snapshot_spec.rb +35 -0
  129. data/spec/aws/requests/ec2/delete_volume_spec.rb +26 -0
  130. data/spec/aws/requests/ec2/describe_addresses_spec.rb +38 -0
  131. data/spec/aws/requests/ec2/describe_availability_zones_spec.rb +23 -0
  132. data/spec/aws/requests/ec2/describe_images_spec.rb +39 -0
  133. data/spec/aws/requests/ec2/describe_instances_spec.rb +86 -0
  134. data/spec/aws/requests/ec2/describe_key_pairs_spec.rb +42 -0
  135. data/spec/aws/requests/ec2/describe_regions_spec.rb +21 -0
  136. data/spec/aws/requests/ec2/describe_security_groups_spec.rb +51 -0
  137. data/spec/aws/requests/ec2/describe_snapshots_spec.rb +54 -0
  138. data/spec/aws/requests/ec2/describe_volumes_spec.rb +50 -0
  139. data/spec/aws/requests/ec2/detach_volume_spec.rb +43 -0
  140. data/spec/aws/requests/ec2/disassociate_address_spec.rb +35 -0
  141. data/spec/aws/requests/ec2/get_console_output_spec.rb +23 -0
  142. data/spec/aws/requests/ec2/reboot_instances_spec.rb +21 -0
  143. data/spec/aws/requests/ec2/release_address_spec.rb +26 -0
  144. data/spec/aws/requests/ec2/revoke_security_group_ingress_spec.rb +32 -0
  145. data/spec/aws/requests/ec2/run_instances_spec.rb +41 -0
  146. data/spec/aws/requests/ec2/terminate_instances_spec.rb +35 -0
  147. data/spec/aws/requests/s3/copy_object_spec.rb +62 -0
  148. data/spec/aws/requests/s3/delete_bucket_spec.rb +36 -0
  149. data/spec/aws/requests/s3/delete_object_spec.rb +37 -0
  150. data/spec/aws/requests/s3/get_bucket_location_spec.rb +30 -0
  151. data/spec/aws/requests/s3/get_bucket_spec.rb +110 -0
  152. data/spec/aws/requests/s3/get_object_spec.rb +45 -0
  153. data/spec/aws/requests/s3/get_request_payment_spec.rb +30 -0
  154. data/spec/aws/requests/s3/get_service_spec.rb +33 -0
  155. data/spec/aws/requests/s3/head_object_spec.rb +28 -0
  156. data/spec/aws/requests/s3/put_bucket_spec.rb +19 -0
  157. data/spec/aws/requests/s3/put_object_spec.rb +38 -0
  158. data/spec/aws/requests/s3/put_request_payment_spec.rb +29 -0
  159. data/spec/aws/requests/simpledb/batch_put_attributes_spec.rb +22 -0
  160. data/spec/aws/requests/simpledb/create_domain_spec.rb +21 -0
  161. data/spec/aws/requests/simpledb/delete_attributes_spec.rb +22 -0
  162. data/spec/aws/requests/simpledb/delete_domain_spec.rb +21 -0
  163. data/spec/aws/requests/simpledb/domain_metadata_spec.rb +43 -0
  164. data/spec/aws/requests/simpledb/get_attributes_spec.rb +31 -0
  165. data/spec/aws/requests/simpledb/list_domains_spec.rb +30 -0
  166. data/spec/aws/requests/simpledb/put_attributes_spec.rb +22 -0
  167. data/spec/aws/requests/simpledb/select_spec.rb +9 -0
  168. data/spec/lorem.txt +1 -0
  169. data/spec/spec.opts +1 -0
  170. data/spec/spec_helper.rb +66 -0
  171. metadata +309 -0
@@ -0,0 +1,79 @@
1
+ unless Fog.mocking?
2
+
3
+ module Fog
4
+ module AWS
5
+ class S3
6
+
7
+ # Copy an object from one S3 bucket to another
8
+ #
9
+ # ==== Parameters
10
+ # * source_bucket_name<~String> - Name of source bucket
11
+ # * source_object_name<~String> - Name of source object
12
+ # * target_bucket_name<~String> - Name of bucket to create copy in
13
+ # * target_object_name<~String> - Name for new copy of object
14
+ # * options<~Hash>:
15
+ # * 'x-amz-metadata-directive'<~String> - Specifies whether to copy metadata from source or replace with data in request. Must be in ['COPY', 'REPLACE']
16
+ # * 'x-amz-copy_source-if-match'<~String> - Copies object if its etag matches this value
17
+ # * 'x-amz-copy_source-if-modified_since'<~Time> - Copies object it it has been modified since this time
18
+ # * 'x-amz-copy_source-if-none-match'<~String> - Copies object if its etag does not match this value
19
+ # * 'x-amz-copy_source-if-unmodified-since'<~Time> - Copies object it it has not been modified since this time
20
+ #
21
+ # ==== Returns
22
+ # * response<~Fog::AWS::Response>:
23
+ # * body<~Hash>:
24
+ # * 'ETag'<~String> - etag of new object
25
+ # * 'LastModified'<~Time> - date object was last modified
26
+ #
27
+ # TODO: allow specifying new metadata (support all/some of put_object?)
28
+ def copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {})
29
+ headers = { 'x-amz-copy-source' => "/#{source_bucket_name}/#{source_object_name}" }.merge!(options)
30
+ request({
31
+ :expects => 200,
32
+ :headers => headers,
33
+ :host => "#{target_bucket_name}.#{@host}",
34
+ :method => 'PUT',
35
+ :parser => Fog::Parsers::AWS::S3::CopyObject.new,
36
+ :path => target_object_name
37
+ })
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+
44
+ else
45
+
46
+ module Fog
47
+ module AWS
48
+ class S3
49
+
50
+ def copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {})
51
+ response = Fog::Response.new
52
+ source_bucket = Fog::AWS::S3.data[:buckets][source_bucket_name]
53
+ source_object = source_bucket && source_bucket[:objects][source_object_name]
54
+ target_bucket = Fog::AWS::S3.data[:buckets][target_bucket_name]
55
+
56
+ if source_object && target_bucket
57
+ response.status = 200
58
+ target_object = source_object.dup
59
+ target_object.merge!({
60
+ 'Name' => target_object_name
61
+ })
62
+ target_bucket[:objects][target_object_name] = target_object
63
+ response.body = {
64
+ 'ETag' => target_object['ETag'],
65
+ 'LastModified' => Time.parse(target_object['LastModified'])
66
+ }
67
+ else
68
+ response.status = 404
69
+ raise(Fog::Errors.status_error(200, 404, response))
70
+ end
71
+
72
+ response
73
+ end
74
+
75
+ end
76
+ end
77
+ end
78
+
79
+ end
@@ -0,0 +1,53 @@
1
+ unless Fog.mocking?
2
+
3
+ module Fog
4
+ module AWS
5
+ class S3
6
+
7
+ # Delete an S3 bucket
8
+ #
9
+ # ==== Parameters
10
+ # * bucket_name<~String> - name of bucket to delete
11
+ #
12
+ # ==== Returns
13
+ # * response<~Fog::AWS::Response>:
14
+ # * status<~Integer> - 204
15
+ def delete_bucket(bucket_name)
16
+ request({
17
+ :expects => 204,
18
+ :headers => {},
19
+ :host => "#{bucket_name}.#{@host}",
20
+ :method => 'DELETE'
21
+ })
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+
28
+ else
29
+
30
+ module Fog
31
+ module AWS
32
+ class S3
33
+
34
+ def delete_bucket(bucket_name)
35
+ response = Fog::Response.new
36
+ if Fog::AWS::S3.data[:buckets][bucket_name].nil?
37
+ response.status = 404
38
+ raise(Fog::Errors.status_error(204, 404, response))
39
+ elsif Fog::AWS::S3.data[:buckets][bucket_name] && !Fog::AWS::S3.data[:buckets][bucket_name][:objects].empty?
40
+ response.status = 409
41
+ raise(Fog::Errors.status_error(204, 409, response))
42
+ else
43
+ Fog::AWS::S3.data[:buckets].delete(bucket_name)
44
+ response.status = 204
45
+ end
46
+ response
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+
53
+ end
@@ -0,0 +1,52 @@
1
+ unless Fog.mocking?
2
+
3
+ module Fog
4
+ module AWS
5
+ class S3
6
+
7
+ # Delete an object from S3
8
+ #
9
+ # ==== Parameters
10
+ # * bucket_name<~String> - Name of bucket containing object to delete
11
+ # * object_name<~String> - Name of object to delete
12
+ #
13
+ # ==== Returns
14
+ # * response<~Fog::AWS::Response>:
15
+ # * status<~Integer> - 204
16
+ def delete_object(bucket_name, object_name)
17
+ request({
18
+ :expects => 204,
19
+ :headers => {},
20
+ :host => "#{bucket_name}.#{@host}",
21
+ :method => 'DELETE',
22
+ :path => object_name
23
+ })
24
+ end
25
+
26
+ end
27
+ end
28
+ end
29
+
30
+ else
31
+
32
+ module Fog
33
+ module AWS
34
+ class S3
35
+
36
+ def delete_object(bucket_name, object_name)
37
+ response = Fog::Response.new
38
+ if bucket = Fog::AWS::S3.data[:buckets][bucket_name]
39
+ response.status = 204
40
+ bucket[:objects].delete(object_name)
41
+ else
42
+ response.status = 404
43
+ raise(Fog::Errors.status_error(204, 404, response))
44
+ end
45
+ response
46
+ end
47
+
48
+ end
49
+ end
50
+ end
51
+
52
+ end
@@ -0,0 +1,100 @@
1
+ unless Fog.mocking?
2
+
3
+ module Fog
4
+ module AWS
5
+ class S3
6
+
7
+ # List information about objects in an S3 bucket
8
+ #
9
+ # ==== Parameters
10
+ # * bucket_name<~String> - name of bucket to list object keys from
11
+ # * options<~Hash> - config arguments for list. Defaults to {}.
12
+ # * 'prefix'<~String> - limits object keys to those beginning with its value.
13
+ # * 'marker'<~String> - limits object keys to only those that appear
14
+ # lexicographically after its value.
15
+ # * 'max-keys'<~Integer> - limits number of object keys returned
16
+ # * 'delimiter'<~String> - causes keys with the same string between the prefix
17
+ # value and the first occurence of delimiter to be rolled up
18
+ #
19
+ # ==== Returns
20
+ # * response<~Fog::AWS::Response>:
21
+ # * body<~Hash>:
22
+ # * 'Delimeter'<~String> - Delimiter specified for query
23
+ # * 'Marker'<~String> - Marker specified for query
24
+ # * 'MaxKeys'<~Integer> - Maximum number of keys specified for query
25
+ # * 'Name'<~String> - Name of the bucket
26
+ # * 'Prefix'<~String> - Prefix specified for query
27
+ # * 'Contents'<~Array>:
28
+ # * 'ETag'<~String>: Etag of object
29
+ # * 'Key'<~String>: Name of object
30
+ # * 'LastModified'<~String>: Timestamp of last modification of object
31
+ # * 'Owner'<~Hash>:
32
+ # * 'DisplayName'<~String> - Display name of object owner
33
+ # * 'ID'<~String> - Id of object owner
34
+ # * 'Size'<~Integer> - Size of object
35
+ # * 'StorageClass'<~String> - Storage class of object
36
+ def get_bucket(bucket_name, options = {})
37
+ query = ''
38
+ for key, value in options
39
+ query << "#{key}=#{value};"
40
+ end
41
+ query.chop!
42
+ request({
43
+ :expects => 200,
44
+ :headers => {},
45
+ :host => "#{bucket_name}.#{@host}",
46
+ :method => 'GET',
47
+ :parser => Fog::Parsers::AWS::S3::GetBucket.new,
48
+ :query => query
49
+ })
50
+ end
51
+
52
+ end
53
+ end
54
+ end
55
+
56
+ else
57
+
58
+ module Fog
59
+ module AWS
60
+ class S3
61
+
62
+ # FIXME: implement delimiter
63
+ def get_bucket(bucket_name, options = {})
64
+ response = Fog::Response.new
65
+ if bucket = Fog::AWS::S3.data[:buckets][bucket_name]
66
+ response.status = 200
67
+ response.body = {
68
+ 'Contents' => bucket[:objects].values.sort {|x,y| x['Key'] <=> y['Key']}.reject do |object|
69
+ (options['prefix'] && object['Key'][0...options['prefix'].length] != options['prefix']) ||
70
+ (options['marker'] && object['Key'] <= options['marker'])
71
+ end.map do |object|
72
+ data = object.reject {|key, value| !['ETag', 'Key', 'LastModified', 'Owner', 'Size', 'StorageClass'].include?(key)}
73
+ data.merge!({
74
+ 'LastModified' => Time.parse(data['LastModified']),
75
+ 'Size' => data['Size'].to_i
76
+ })
77
+ data
78
+ end,
79
+ 'IsTruncated' => false,
80
+ 'Marker' => options['marker'] || '',
81
+ 'MaxKeys' => options['max-keys'] || 1000,
82
+ 'Name' => bucket['Name'],
83
+ 'Prefix' => options['prefix'] || ''
84
+ }
85
+ if options['max-keys'] && options['max-keys'] < response.body['Contents'].length
86
+ response.body['IsTruncated'] = true
87
+ response.body['Contents'] = response.body['Contents'][0...options['max-keys']]
88
+ end
89
+ else
90
+ response.status = 404
91
+ raise(Fog::Errors.status_error(200, 404, response))
92
+ end
93
+ response
94
+ end
95
+
96
+ end
97
+ end
98
+ end
99
+
100
+ end
@@ -0,0 +1,53 @@
1
+ unless Fog.mocking?
2
+
3
+ module Fog
4
+ module AWS
5
+ class S3
6
+
7
+ # Get location constraint for an S3 bucket
8
+ #
9
+ # ==== Parameters
10
+ # * bucket_name<~String> - name of bucket to get location constraint for
11
+ #
12
+ # ==== Returns
13
+ # * response<~Fog::AWS::Response>:
14
+ # * body<~Hash>:
15
+ # * 'LocationConstraint'<~String> - Location constraint of the bucket
16
+ def get_bucket_location(bucket_name)
17
+ request({
18
+ :expects => 200,
19
+ :headers => {},
20
+ :host => "#{bucket_name}.#{@host}",
21
+ :method => 'GET',
22
+ :parser => Fog::Parsers::AWS::S3::GetBucketLocation.new,
23
+ :query => 'location'
24
+ })
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+
31
+ else
32
+
33
+ module Fog
34
+ module AWS
35
+ class S3
36
+
37
+ def get_bucket_location(bucket_name)
38
+ response = Fog::Response.new
39
+ if bucket = Fog::AWS::S3.data[:buckets][bucket_name]
40
+ response.status = 200
41
+ response.body = {'LocationConstraint' => bucket['LocationConstraint'] }
42
+ else
43
+ response.status = 404
44
+ raise(Fog::Errors.status_error(200, 404, response))
45
+ end
46
+ response
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+
53
+ end
@@ -0,0 +1,82 @@
1
+ unless Fog.mocking?
2
+
3
+ module Fog
4
+ module AWS
5
+ class S3
6
+
7
+ # Get an object from S3
8
+ #
9
+ # ==== Parameters
10
+ # * bucket_name<~String> - Name of bucket to read from
11
+ # * object_name<~String> - Name of object to read
12
+ # * options<~Hash>:
13
+ # * 'If-Match'<~String> - Returns object only if its etag matches this value, otherwise returns 412 (Precondition Failed).
14
+ # * 'If-Modified-Since'<~Time> - Returns object only if it has been modified since this time, otherwise returns 304 (Not Modified).
15
+ # * 'If-None-Match'<~String> - Returns object only if its etag differs from this value, otherwise returns 304 (Not Modified)
16
+ # * 'If-Unmodified-Since'<~Time> - Returns object only if it has not been modified since this time, otherwise returns 412 (Precodition Failed).
17
+ # * 'Range'<~String> - Range of object to download
18
+ # ==== Returns
19
+ # * response<~Fog::AWS::Response>:
20
+ # * body<~String> - Contents of object
21
+ # * headers<~Hash>:
22
+ # * 'Content-Length'<~String> - Size of object contents
23
+ # * 'Content-Type'<~String> - MIME type of object
24
+ # * 'ETag'<~String> - Etag of object
25
+ # * 'Last-Modified'<~String> - Last modified timestamp for object
26
+ def get_object(bucket_name, object_name, options = {})
27
+ headers = {}
28
+ headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since']
29
+ headers['If-Unmodified-Since'] = options['If-Unmodified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since']
30
+ headers.merge!(options)
31
+ request({
32
+ :expects => 200,
33
+ :headers => headers,
34
+ :host => "#{bucket_name}.#{@host}",
35
+ :method => 'GET',
36
+ :path => object_name
37
+ })
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+
44
+ else
45
+
46
+ module Fog
47
+ module AWS
48
+ class S3
49
+
50
+ def get_object(bucket_name, object_name, options = {})
51
+ response = Fog::Response.new
52
+ if (bucket = Fog::AWS::S3.data[:buckets][bucket_name]) && (object = bucket[:objects][object_name])
53
+ if options['If-Match'] && options['If-Match'] != object['ETag']
54
+ response.status = 412
55
+ elsif options['If-Modified-Since'] && options['If-Modified-Since'] > Time.parse(object['LastModified'])
56
+ response.status = 304
57
+ elsif options['If-None-Match'] && options['If-None-Match'] == object['ETag']
58
+ response.status = 304
59
+ elsif options['If-Unmodified-Since'] && options['If-Unmodified-Since'] < Time.parse(object['LastModified'])
60
+ response.status = 412
61
+ else
62
+ response.status = 200
63
+ response.headers = {
64
+ 'Content-Length' => object['Size'],
65
+ 'Content-Type' => object['Content-Type'],
66
+ 'ETag' => object['ETag'],
67
+ 'Last-Modified' => object['LastModified']
68
+ }
69
+ response.body = object[:body]
70
+ end
71
+ else
72
+ response.status = 404
73
+ raise(Fog::Errors.status_error(200, 404, response))
74
+ end
75
+ response
76
+ end
77
+
78
+ end
79
+ end
80
+ end
81
+
82
+ end
@@ -0,0 +1,53 @@
1
+ unless Fog.mocking?
2
+
3
+ module Fog
4
+ module AWS
5
+ class S3
6
+
7
+ # Get configured payer for an S3 bucket
8
+ #
9
+ # ==== Parameters
10
+ # * bucket_name<~String> - name of bucket to get payer for
11
+ #
12
+ # ==== Returns
13
+ # * response<~Fog::AWS::Response>:
14
+ # * body<~Hash>:
15
+ # * 'Payer'<~String> - Specifies who pays for download and requests
16
+ def get_request_payment(bucket_name)
17
+ request({
18
+ :expects => 200,
19
+ :headers => {},
20
+ :host => "#{bucket_name}.#{@host}",
21
+ :method => 'GET',
22
+ :parser => Fog::Parsers::AWS::S3::GetRequestPayment.new,
23
+ :query => 'requestPayment'
24
+ })
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+
31
+ else
32
+
33
+ module Fog
34
+ module AWS
35
+ class S3
36
+
37
+ def get_request_payment(bucket_name)
38
+ response = Fog::Response.new
39
+ if bucket = Fog::AWS::S3.data[:buckets][bucket_name]
40
+ response.status = 200
41
+ response.body = { 'Payer' => bucket['Payer'] }
42
+ else
43
+ response.status = 404
44
+ raise(Fog::Errors.status_error(200, 404, response))
45
+ end
46
+ response
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+
53
+ end