fog-internet-archive 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +53 -0
  3. data/.travis.yml +16 -0
  4. data/Gemfile +3 -0
  5. data/README.md +6 -0
  6. data/Rakefile +19 -0
  7. data/fog-internet-archive.gemspec +32 -0
  8. data/lib/fog/bin/internet_archive.rb +32 -0
  9. data/lib/fog/internet_archive.rb +1 -0
  10. data/lib/fog/internet_archive/core.rb +291 -0
  11. data/lib/fog/internet_archive/models/storage/directories.rb +39 -0
  12. data/lib/fog/internet_archive/models/storage/directory.rb +105 -0
  13. data/lib/fog/internet_archive/models/storage/file.rb +254 -0
  14. data/lib/fog/internet_archive/models/storage/files.rb +119 -0
  15. data/lib/fog/internet_archive/models/storage/ia_attributes.rb +36 -0
  16. data/lib/fog/internet_archive/parsers/storage/access_control_list.rb +42 -0
  17. data/lib/fog/internet_archive/parsers/storage/complete_multipart_upload.rb +20 -0
  18. data/lib/fog/internet_archive/parsers/storage/copy_object.rb +18 -0
  19. data/lib/fog/internet_archive/parsers/storage/cors_configuration.rb +38 -0
  20. data/lib/fog/internet_archive/parsers/storage/delete_multiple_objects.rb +45 -0
  21. data/lib/fog/internet_archive/parsers/storage/get_bucket.rb +58 -0
  22. data/lib/fog/internet_archive/parsers/storage/get_bucket_lifecycle.rb +64 -0
  23. data/lib/fog/internet_archive/parsers/storage/get_bucket_location.rb +16 -0
  24. data/lib/fog/internet_archive/parsers/storage/get_bucket_logging.rb +36 -0
  25. data/lib/fog/internet_archive/parsers/storage/get_bucket_website.rb +22 -0
  26. data/lib/fog/internet_archive/parsers/storage/get_request_payment.rb +16 -0
  27. data/lib/fog/internet_archive/parsers/storage/get_service.rb +28 -0
  28. data/lib/fog/internet_archive/parsers/storage/initiate_multipart_upload.rb +20 -0
  29. data/lib/fog/internet_archive/parsers/storage/list_multipart_uploads.rb +52 -0
  30. data/lib/fog/internet_archive/parsers/storage/list_parts.rb +36 -0
  31. data/lib/fog/internet_archive/requests/storage/abort_multipart_upload.rb +27 -0
  32. data/lib/fog/internet_archive/requests/storage/acl_utils.rb +60 -0
  33. data/lib/fog/internet_archive/requests/storage/complete_multipart_upload.rb +46 -0
  34. data/lib/fog/internet_archive/requests/storage/copy_object.rb +77 -0
  35. data/lib/fog/internet_archive/requests/storage/cors_utils.rb +39 -0
  36. data/lib/fog/internet_archive/requests/storage/delete_bucket.rb +42 -0
  37. data/lib/fog/internet_archive/requests/storage/delete_bucket_cors.rb +26 -0
  38. data/lib/fog/internet_archive/requests/storage/delete_bucket_lifecycle.rb +26 -0
  39. data/lib/fog/internet_archive/requests/storage/delete_bucket_policy.rb +26 -0
  40. data/lib/fog/internet_archive/requests/storage/delete_bucket_website.rb +26 -0
  41. data/lib/fog/internet_archive/requests/storage/delete_multiple_objects.rb +88 -0
  42. data/lib/fog/internet_archive/requests/storage/delete_object.rb +46 -0
  43. data/lib/fog/internet_archive/requests/storage/get_bucket.rb +108 -0
  44. data/lib/fog/internet_archive/requests/storage/get_bucket_acl.rb +65 -0
  45. data/lib/fog/internet_archive/requests/storage/get_bucket_cors.rb +61 -0
  46. data/lib/fog/internet_archive/requests/storage/get_bucket_lifecycle.rb +35 -0
  47. data/lib/fog/internet_archive/requests/storage/get_bucket_location.rb +54 -0
  48. data/lib/fog/internet_archive/requests/storage/get_bucket_logging.rb +45 -0
  49. data/lib/fog/internet_archive/requests/storage/get_bucket_policy.rb +31 -0
  50. data/lib/fog/internet_archive/requests/storage/get_bucket_website.rb +38 -0
  51. data/lib/fog/internet_archive/requests/storage/get_object.rb +163 -0
  52. data/lib/fog/internet_archive/requests/storage/get_object_acl.rb +72 -0
  53. data/lib/fog/internet_archive/requests/storage/get_object_http_url.rb +48 -0
  54. data/lib/fog/internet_archive/requests/storage/get_object_https_url.rb +30 -0
  55. data/lib/fog/internet_archive/requests/storage/get_object_torrent.rb +45 -0
  56. data/lib/fog/internet_archive/requests/storage/get_object_url.rb +49 -0
  57. data/lib/fog/internet_archive/requests/storage/get_request_payment.rb +45 -0
  58. data/lib/fog/internet_archive/requests/storage/get_service.rb +50 -0
  59. data/lib/fog/internet_archive/requests/storage/head_object.rb +57 -0
  60. data/lib/fog/internet_archive/requests/storage/initiate_multipart_upload.rb +42 -0
  61. data/lib/fog/internet_archive/requests/storage/list_multipart_uploads.rb +52 -0
  62. data/lib/fog/internet_archive/requests/storage/list_parts.rb +53 -0
  63. data/lib/fog/internet_archive/requests/storage/post_object_hidden_fields.rb +36 -0
  64. data/lib/fog/internet_archive/requests/storage/put_bucket.rb +70 -0
  65. data/lib/fog/internet_archive/requests/storage/put_bucket_acl.rb +69 -0
  66. data/lib/fog/internet_archive/requests/storage/put_bucket_cors.rb +47 -0
  67. data/lib/fog/internet_archive/requests/storage/put_bucket_lifecycle.rb +76 -0
  68. data/lib/fog/internet_archive/requests/storage/put_bucket_logging.rb +79 -0
  69. data/lib/fog/internet_archive/requests/storage/put_bucket_policy.rb +25 -0
  70. data/lib/fog/internet_archive/requests/storage/put_bucket_website.rb +59 -0
  71. data/lib/fog/internet_archive/requests/storage/put_object.rb +94 -0
  72. data/lib/fog/internet_archive/requests/storage/put_object_acl.rb +73 -0
  73. data/lib/fog/internet_archive/requests/storage/put_object_url.rb +43 -0
  74. data/lib/fog/internet_archive/requests/storage/put_request_payment.rb +45 -0
  75. data/lib/fog/internet_archive/requests/storage/sync_clock.rb +24 -0
  76. data/lib/fog/internet_archive/requests/storage/upload_part.rb +39 -0
  77. data/lib/fog/internet_archive/signaturev4.rb +71 -0
  78. data/lib/fog/internet_archive/storage.rb +381 -0
  79. data/lib/fog/internet_archive/version.rb +5 -0
  80. data/tasks/bundler.rake +3 -0
  81. data/tasks/console.rake +17 -0
  82. data/tasks/lint.rake +3 -0
  83. data/tasks/test.rake +7 -0
  84. data/tests/helper.rb +36 -0
  85. data/tests/helpers/collection_helper.rb +88 -0
  86. data/tests/helpers/formats_helper.rb +98 -0
  87. data/tests/helpers/formats_helper_tests.rb +106 -0
  88. data/tests/helpers/mock_helper.rb +13 -0
  89. data/tests/helpers/model_helper.rb +29 -0
  90. data/tests/helpers/responds_to_helper.rb +11 -0
  91. data/tests/helpers/schema_validator_tests.rb +101 -0
  92. data/tests/helpers/succeeds_helper.rb +9 -0
  93. data/tests/internet_archive/models/storage/directory_tests.rb +42 -0
  94. data/tests/internet_archive/models/storage/file_tests.rb +61 -0
  95. data/tests/internet_archive/models/storage/files_tests.rb +60 -0
  96. data/tests/internet_archive/models/storage/url_tests.rb +28 -0
  97. data/tests/internet_archive/requests/storage/acl_utils_tests.rb +209 -0
  98. data/tests/internet_archive/requests/storage/bucket_tests.rb +324 -0
  99. data/tests/internet_archive/requests/storage/cors_utils_tests.rb +108 -0
  100. data/tests/internet_archive/requests/storage/multipart_upload_tests.rb +132 -0
  101. data/tests/internet_archive/requests/storage/object_tests.rb +166 -0
  102. data/tests/internet_archive/signaturev4_tests.rb +41 -0
  103. data/tests/internet_archive/signed_params_tests.rb +5 -0
  104. data/tests/lorem.txt +1 -0
  105. metadata +322 -0
@@ -0,0 +1,20 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class InitiateMultipartUpload < Fog::Parsers::Base
6
+ def reset
7
+ @response = {}
8
+ end
9
+
10
+ def end_element(name)
11
+ case name
12
+ when 'Bucket', 'Key', 'UploadId'
13
+ @response[name] = value
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,52 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class ListMultipartUploads < Fog::Parsers::Base
6
+ def reset
7
+ @upload = { 'Initiator' => {}, 'Owner' => {} }
8
+ @response = { 'Upload' => [] }
9
+ end
10
+
11
+ def start_element(name, attrs = [])
12
+ super
13
+ case name
14
+ when 'Initiator'
15
+ @in_initiator = true
16
+ when 'Owner'
17
+ @in_owner = true
18
+ end
19
+ end
20
+
21
+ def end_element(name)
22
+ case name
23
+ when 'Bucket', 'KeyMarker', 'NextKeyMarker', 'NextUploadIdMarker', 'UploadIdMarker'
24
+ @response[name] = value
25
+ when 'DisplayName', 'ID'
26
+ if @in_initiator
27
+ @upload['Initiator'][name] = value
28
+ elsif @in_owner
29
+ @upload['Owner'][name] = value
30
+ end
31
+ when 'Initiated'
32
+ @upload[name] = Time.parse(value)
33
+ when 'Initiator'
34
+ @in_initiator = false
35
+ when 'IsTruncated'
36
+ @response[name] = value == 'true'
37
+ when 'Key', 'StorageClass', 'UploadId'
38
+ @upload[name] = value
39
+ when 'MaxUploads'
40
+ @response[name] = value.to_i
41
+ when 'Owner'
42
+ @in_owner = false
43
+ when 'Upload'
44
+ @response['Upload'] << @upload
45
+ @upload = { 'Initiator' => {}, 'Owner' => {} }
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class ListParts < Fog::Parsers::Base
6
+ def reset
7
+ @part = {}
8
+ @response = { 'Initiator' => {}, 'Part' => [] }
9
+ end
10
+
11
+ def end_element(name)
12
+ case name
13
+ when 'Bucket', 'Key', 'NextPartNumberMarker', 'PartNumberMarker', 'StorageClass', 'UploadId'
14
+ @response[name] = value
15
+ when 'DisplayName', 'ID'
16
+ @response['Initiator'][name] = value
17
+ when 'ETag'
18
+ @part[name] = value
19
+ when 'IsTruncated'
20
+ @response[name] = value == 'true'
21
+ when 'LastModified'
22
+ @part[name] = Time.parse(value)
23
+ when 'MaxParts'
24
+ @response[name] = value.to_i
25
+ when 'Part'
26
+ @response['Part'] << @part
27
+ @part = {}
28
+ when 'PartNumber', 'Size'
29
+ @part[name] = value.to_i
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,27 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ #
6
+ # Abort a multipart upload
7
+ #
8
+ # @param [String] bucket_name Name of bucket to abort multipart upload on
9
+ # @param [String] object_name Name of object to abort multipart upload on
10
+ # @param [String] upload_id Id of upload to add part to
11
+ #
12
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadAbort.html
13
+ #
14
+ def abort_multipart_upload(bucket_name, object_name, upload_id)
15
+ request({
16
+ :expects => 204,
17
+ :headers => {},
18
+ :host => "#{bucket_name}.#{@host}",
19
+ :method => 'DELETE',
20
+ :path => CGI.escape(object_name),
21
+ :query => {'uploadId' => upload_id}
22
+ })
23
+ end
24
+ end # Real
25
+ end # Storage
26
+ end # InternetArchive
27
+ end # Fog
@@ -0,0 +1,60 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ require 'fog/internet_archive/parsers/storage/access_control_list'
5
+
6
+ private
7
+ def self.hash_to_acl(acl)
8
+ data = "<AccessControlPolicy>\n"
9
+
10
+ if acl['Owner'] && (acl['Owner']['ID'] || acl['Owner']['DisplayName'])
11
+ data << " <Owner>\n"
12
+ data << " <ID>#{acl['Owner']['ID']}</ID>\n" if acl['Owner']['ID']
13
+ data << " <DisplayName>#{acl['Owner']['DisplayName']}</DisplayName>\n" if acl['Owner']['DisplayName']
14
+ data << " </Owner>\n"
15
+ end
16
+
17
+ grants = [acl['AccessControlList']].flatten.compact
18
+
19
+ data << " <AccessControlList>\n" if grants.any?
20
+ grants.each do |grant|
21
+ data << " <Grant>\n"
22
+ grantee = grant['Grantee']
23
+ type = case
24
+ when grantee.key?('ID')
25
+ 'CanonicalUser'
26
+ when grantee.key?('EmailAddress')
27
+ 'AmazonCustomerByEmail'
28
+ when grantee.key?('URI')
29
+ 'Group'
30
+ end
31
+
32
+ data << " <Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"#{type}\">\n"
33
+ case type
34
+ when 'CanonicalUser'
35
+ data << " <ID>#{grantee['ID']}</ID>\n" if grantee['ID']
36
+ data << " <DisplayName>#{grantee['DisplayName']}</DisplayName>\n" if grantee['DisplayName']
37
+ when 'AmazonCustomerByEmail'
38
+ data << " <EmailAddress>#{grantee['EmailAddress']}</EmailAddress>\n" if grantee['EmailAddress']
39
+ when 'Group'
40
+ data << " <URI>#{grantee['URI']}</URI>\n" if grantee['URI']
41
+ end
42
+ data << " </Grantee>\n"
43
+ data << " <Permission>#{grant['Permission']}</Permission>\n"
44
+ data << " </Grant>\n"
45
+ end
46
+ data << " </AccessControlList>\n" if grants.any?
47
+
48
+ data << "</AccessControlPolicy>"
49
+
50
+ data
51
+ end
52
+
53
+ def self.acl_to_hash(acl_xml)
54
+ parser = Fog::Parsers::Storage::InternetArchive::AccessControlList.new
55
+ Nokogiri::XML::SAX::Parser.new(parser).parse(acl_xml)
56
+ parser.response
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,46 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ require 'fog/internet_archive/parsers/storage/complete_multipart_upload'
6
+
7
+ # Complete a multipart upload
8
+ #
9
+ # @param [String] bucket_name Name of bucket to complete multipart upload for
10
+ # @param [String] object_name Name of object to complete multipart upload for
11
+ # @param [String] upload_id Id of upload to add part to
12
+ # @param [Array<String>] parts Array of etags as Strings for parts
13
+ #
14
+ # @return [Excon::Response]
15
+ # * headers [Hash]:
16
+ # * Bucket [String] - bucket of new object
17
+ # * ETag [String] - etag of new object (will be needed to complete upload)
18
+ # * Key [String] - key of new object
19
+ # * Location [String] - location of new object
20
+ #
21
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadComplete.html
22
+ #
23
+ def complete_multipart_upload(bucket_name, object_name, upload_id, parts)
24
+ data = "<CompleteMultipartUpload>"
25
+ parts.each_with_index do |part, index|
26
+ data << "<Part>"
27
+ data << "<PartNumber>#{index + 1}</PartNumber>"
28
+ data << "<ETag>#{part}</ETag>"
29
+ data << "</Part>"
30
+ end
31
+ data << "</CompleteMultipartUpload>"
32
+ request({
33
+ :body => data,
34
+ :expects => 200,
35
+ :headers => { 'Content-Length' => data.length },
36
+ :host => "#{bucket_name}.#{@host}",
37
+ :method => 'POST',
38
+ :parser => Fog::Parsers::Storage::InternetArchive::CompleteMultipartUpload.new,
39
+ :path => CGI.escape(object_name),
40
+ :query => {'uploadId' => upload_id}
41
+ })
42
+ end
43
+ end # Real
44
+ end # Storage
45
+ end # InternetArchive
46
+ end # Fog
@@ -0,0 +1,77 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ require 'fog/internet_archive/parsers/storage/copy_object'
6
+
7
+ # Copy an object from one S3 bucket to another
8
+ #
9
+ # @param source_bucket_name [String] Name of source bucket
10
+ # @param source_object_name [String] Name of source object
11
+ # @param target_bucket_name [String] Name of bucket to create copy in
12
+ # @param target_object_name [String] Name for new copy of object
13
+ #
14
+ # @param options [Hash]:
15
+ # @option options [String] x-amz-metadata-directive Specifies whether to copy metadata from source or replace with data in request. Must be in ['COPY', 'REPLACE']
16
+ # @option options [String] x-amz-copy_source-if-match Copies object if its etag matches this value
17
+ # @option options [Time] x-amz-copy_source-if-modified_since Copies object it it has been modified since this time
18
+ # @option options [String] x-amz-copy_source-if-none-match Copies object if its etag does not match this value
19
+ # @option options [Time] x-amz-copy_source-if-unmodified-since Copies object it it has not been modified since this time
20
+ # @option options [String] x-amz-storage-class Default is 'STANDARD', set to 'REDUCED_REDUNDANCY' for non-critical, reproducable data
21
+ #
22
+ #
23
+ # @return [Excon::Response]
24
+ # * body [Hash]:
25
+ # * ETag [String] - etag of new object
26
+ # * LastModified [Time] - date object was last modified
27
+ #
28
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectCOPY.html
29
+ #
30
+ def copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {})
31
+ headers = { 'x-amz-copy-source' => "/#{source_bucket_name}/#{CGI.escape(source_object_name)}" }.merge!(options)
32
+ request({
33
+ :expects => 200,
34
+ :headers => headers,
35
+ :host => "#{target_bucket_name}.#{@host}",
36
+ :method => 'PUT',
37
+ :parser => Fog::Parsers::Storage::InternetArchive::CopyObject.new,
38
+ :path => CGI.escape(target_object_name)
39
+ })
40
+ end
41
+ end
42
+
43
+ class Mock # :nodoc:all
44
+ def copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {})
45
+ response = Excon::Response.new
46
+ source_bucket = self.data[:buckets][source_bucket_name]
47
+ source_object = source_bucket && source_bucket[:objects][source_object_name] && source_bucket[:objects][source_object_name].first
48
+ target_bucket = self.data[:buckets][target_bucket_name]
49
+
50
+ acl = options['x-amz-acl'] || 'private'
51
+ if !['private', 'public-read', 'public-read-write', 'authenticated-read'].include?(acl)
52
+ raise Excon::Errors::BadRequest.new('invalid x-amz-acl')
53
+ else
54
+ self.data[:acls][:object][target_bucket_name] ||= {}
55
+ self.data[:acls][:object][target_bucket_name][target_object_name] = self.class.acls(acl)
56
+ end
57
+
58
+ if source_object && target_bucket
59
+ response.status = 200
60
+ target_object = source_object.dup
61
+ target_object.merge!({'Key' => target_object_name})
62
+ target_bucket[:objects][target_object_name] = [target_object]
63
+ response.body = {
64
+ 'ETag' => target_object['ETag'],
65
+ 'LastModified' => Time.parse(target_object['Last-Modified'])
66
+ }
67
+ else
68
+ response.status = 404
69
+ raise(Excon::Errors.status_error({:expects => 200}, response))
70
+ end
71
+
72
+ response
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,39 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ require 'fog/internet_archive/parsers/storage/cors_configuration'
5
+
6
+ private
7
+
8
+ def self.hash_to_cors(cors)
9
+ data = "<CORSConfiguration>\n"
10
+
11
+ [cors['CORSConfiguration']].flatten.compact.each do |rule|
12
+ data << " <CORSRule>\n"
13
+
14
+ ['ID', 'MaxAgeSeconds'].each do |key|
15
+ data << " <#{key}>#{rule[key]}</#{key}>\n" if rule[key]
16
+ end
17
+
18
+ ['AllowedOrigin', 'AllowedMethod', 'AllowedHeader', 'ExposeHeader'].each do |key|
19
+ [rule[key]].flatten.compact.each do |value|
20
+ data << " <#{key}>#{value}</#{key}>\n"
21
+ end
22
+ end
23
+
24
+ data << " </CORSRule>\n"
25
+ end
26
+
27
+ data << "</CORSConfiguration>"
28
+
29
+ data
30
+ end
31
+
32
+ def self.cors_to_hash(cors_xml)
33
+ parser = Fog::Parsers::Storage::InternetArchive::CorsConfiguration.new
34
+ Nokogiri::XML::SAX::Parser.new(parser).parse(cors_xml)
35
+ parser.response
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,42 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ # Delete an S3 bucket
6
+ #
7
+ # @param bucket_name [String] name of bucket to delete
8
+ #
9
+ # @return [Excon::Response] response:
10
+ # * status [Integer] - 204
11
+ #
12
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETE.html
13
+
14
+ def delete_bucket(bucket_name)
15
+ request({
16
+ :expects => 204,
17
+ :headers => {},
18
+ :host => "#{bucket_name}.#{@host}",
19
+ :method => 'DELETE'
20
+ })
21
+ end
22
+ end
23
+
24
+ class Mock # :nodoc:all
25
+ def delete_bucket(bucket_name)
26
+ response = Excon::Response.new
27
+ if self.data[:buckets][bucket_name].nil?
28
+ response.status = 404
29
+ raise(Excon::Errors.status_error({:expects => 204}, response))
30
+ elsif self.data[:buckets][bucket_name] && !self.data[:buckets][bucket_name][:objects].empty?
31
+ response.status = 409
32
+ raise(Excon::Errors.status_error({:expects => 204}, response))
33
+ else
34
+ self.data[:buckets].delete(bucket_name)
35
+ response.status = 204
36
+ end
37
+ response
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ # Deletes the cors configuration information set for the bucket.
6
+ #
7
+ # @param bucket_name [String] name of bucket to delete cors rules from
8
+ #
9
+ # @return [Excon::Response] response:
10
+ # * status [Integer] - 204
11
+ #
12
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETEcors.html
13
+
14
+ def delete_bucket_cors(bucket_name)
15
+ request({
16
+ :expects => 204,
17
+ :headers => {},
18
+ :host => "#{bucket_name}.#{@host}",
19
+ :method => 'DELETE',
20
+ :query => {'cors' => nil}
21
+ })
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ # Delete lifecycle configuration for a bucket
6
+ #
7
+ # @param bucket_name [String] name of bucket to delete lifecycle configuration from
8
+ #
9
+ # @return [Excon::Response] response:
10
+ # * status [Integer] - 204
11
+ #
12
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETElifecycle.html
13
+
14
+ def delete_bucket_lifecycle(bucket_name)
15
+ request({
16
+ :expects => 204,
17
+ :headers => {},
18
+ :host => "#{bucket_name}.#{@host}",
19
+ :method => 'DELETE',
20
+ :query => {'lifecycle' => nil}
21
+ })
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end