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,36 @@
1
+ module Fog
2
+ module Storage
3
+ module IAAttributes
4
+ # you can add other x-archive-metadata-* values, but these are standard
5
+ IA_STANDARD_METADATA_FIELDS = %q[hidden, title, collection, creator, mediatype, description, date, subject, licenseurl, pick, noindex, notes, rights, contributor, language, coverage, credits]
6
+
7
+ # for x-archive-metadata-mediatype, these are the valid values
8
+ IA_VALID_MEDIA_TYPES = %q[audio, data, etree, image, movies, software, texts, web]
9
+
10
+ module ClassMethods
11
+ def ia_metadata_attribute(name)
12
+ attribute(name, :aliases=>['amz','archive'].map{|p|"x-#{p}-#{name.to_s.tr('_','-')}"})
13
+ end
14
+ end
15
+
16
+ module InstanceMethods
17
+ # set_metadata_array_headers(:collections, options)
18
+ def set_metadata_array_headers(array_attribute, options={})
19
+ attr_values = Array(self.send(array_attribute))
20
+ opt_values = options.map do |key,value|
21
+ options.delete(key) if (key.to_s =~ /^x-(amz||archive)-meta(\d*)-#{array_attribute.to_s[0..-2]}/)
22
+ end
23
+ values = (attr_values + opt_values).compact.sort.uniq
24
+ # got the values, now add them back to the options
25
+ if values.size == 1
26
+ options["x-archive-meta-#{array_attribute.to_s[0..-2]}"] = values.first
27
+ elsif values.size > 1
28
+ values[0,99].each_with_index do |value, i|
29
+ options["x-archive-meta#{format("%02d", i+1)}-#{array_attribute.to_s[0..-2]}"] = value
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,42 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class AccessControlList < Fog::Parsers::Base
6
+ def reset
7
+ @in_access_control_list = false
8
+ @grant = { 'Grantee' => {} }
9
+ @response = { 'Owner' => {}, 'AccessControlList' => [] }
10
+ end
11
+
12
+ def start_element(name, attrs = [])
13
+ super
14
+ if name == 'AccessControlList'
15
+ @in_access_control_list = true
16
+ end
17
+ end
18
+
19
+ def end_element(name)
20
+ case name
21
+ when 'AccessControlList'
22
+ @in_access_control_list = false
23
+ when 'Grant'
24
+ @response['AccessControlList'] << @grant
25
+ @grant = { 'Grantee' => {} }
26
+ when 'DisplayName', 'ID'
27
+ if @in_access_control_list
28
+ @grant['Grantee'][name] = value
29
+ else
30
+ @response['Owner'][name] = value
31
+ end
32
+ when 'Permission'
33
+ @grant[name] = value
34
+ when 'URI'
35
+ @grant['Grantee'][name] = value
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,20 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class CompleteMultipartUpload < Fog::Parsers::Base
6
+ def reset
7
+ @response = {}
8
+ end
9
+
10
+ def end_element(name)
11
+ case name
12
+ when 'Bucket', 'ETag', 'Key', 'Location'
13
+ @response[name] = value
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class CopyObject < Fog::Parsers::Base
6
+ def end_element(name)
7
+ case name
8
+ when 'ETag'
9
+ @response[name] = value.gsub('"', '')
10
+ when 'LastModified'
11
+ @response[name] = Time.parse(value)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,38 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class CorsConfiguration < Fog::Parsers::Base
6
+ def reset
7
+ @in_cors_configuration_list = false
8
+ @cors_rule = {}
9
+ @response = { 'CORSConfiguration' => [] }
10
+ end
11
+
12
+ def start_element(name, attrs = [])
13
+ super
14
+ if name == 'CORSConfiguration'
15
+ @in_cors_configuration_list = true
16
+ end
17
+ end
18
+
19
+ def end_element(name)
20
+ case name
21
+ when 'CORSConfiguration'
22
+ @in_cors_configuration_list = false
23
+ when 'CORSRule'
24
+ @response['CORSConfiguration'] << @cors_rule
25
+ @cors_rule = {}
26
+ when 'MaxAgeSeconds'
27
+ @cors_rule[name] = value.to_i
28
+ when 'ID'
29
+ @cors_rule[name] = value
30
+ when 'AllowedOrigin', 'AllowedMethod', 'AllowedHeader', 'ExposeHeader'
31
+ (@cors_rule[name] ||= []) << value
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,45 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class DeleteMultipleObjects < Fog::Parsers::Base
6
+ def reset
7
+ @deleted = { 'Deleted' => {} }
8
+ @error = { 'Error' => {} }
9
+ @response = { 'DeleteResult' => [] }
10
+ end
11
+
12
+ def start_element(name, attrs = [])
13
+ super
14
+ case name
15
+ when 'Deleted'
16
+ @in_deleted = true
17
+ end
18
+ end
19
+
20
+ def end_element(name)
21
+ case name
22
+ when 'Deleted'
23
+ @response['DeleteResult'] << @deleted
24
+ @deleted = { 'Deleted' => {} }
25
+ @in_deleted = false
26
+ when 'Error'
27
+ @response['DeleteResult'] << @error
28
+ @error = { 'Error' => {} }
29
+ when 'Key', 'VersionId'
30
+ if @in_deleted
31
+ @deleted['Deleted'][name] = value
32
+ else
33
+ @error['Error'][name] = value
34
+ end
35
+ when 'DeleteMarker', 'DeletemarkerVersionId'
36
+ @deleted['Deleted'][name] = value
37
+ when 'Code', 'Message'
38
+ @error['Error'][name] = value
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,58 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class GetBucket < Fog::Parsers::Base
6
+ def reset
7
+ @object = { 'Owner' => {} }
8
+ @response = { 'Contents' => [], 'CommonPrefixes' => [] }
9
+ end
10
+
11
+ def start_element(name, attrs = [])
12
+ super
13
+ case name
14
+ when 'CommonPrefixes'
15
+ @in_common_prefixes = true
16
+ end
17
+ end
18
+
19
+ def end_element(name)
20
+ case name
21
+ when 'CommonPrefixes'
22
+ @in_common_prefixes = false
23
+ when 'Contents'
24
+ @response['Contents'] << @object
25
+ @object = { 'Owner' => {} }
26
+ when 'DisplayName', 'ID'
27
+ @object['Owner'][name] = value
28
+ when 'ETag'
29
+ @object[name] = value.gsub('"', '')
30
+ when 'IsTruncated'
31
+ if value == 'true'
32
+ @response['IsTruncated'] = true
33
+ else
34
+ @response['IsTruncated'] = false
35
+ end
36
+ when 'LastModified'
37
+ @object['LastModified'] = Time.parse(value)
38
+ when 'Marker', 'Name'
39
+ @response[name] = value
40
+ when 'MaxKeys'
41
+ @response['MaxKeys'] = value.to_i
42
+ when 'Prefix'
43
+ if @in_common_prefixes
44
+ @response['CommonPrefixes'] << value
45
+ else
46
+ @response[name] = value
47
+ end
48
+ when 'Size'
49
+ @object['Size'] = value.to_i
50
+ when 'Delimiter', 'Key', 'StorageClass'
51
+ @object[name] = value
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,64 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class GetBucketLifecycle < Fog::Parsers::Base
6
+ def reset
7
+ @expiration = {}
8
+ @transition = {}
9
+ @rule = {}
10
+ @response = { 'Rules' => [] }
11
+ end
12
+
13
+ def start_element(name, attrs=[])
14
+ super
15
+ case name
16
+ when 'Expiration'
17
+ @in_expiration = true
18
+ when 'Transition'
19
+ @in_transition = true
20
+ end
21
+ end
22
+
23
+ def end_element(name)
24
+ if @in_expiration
25
+ case name
26
+ when 'Days'
27
+ @expiration[name] = value.to_i
28
+ when 'Date'
29
+ @expiration[name] = value
30
+ when 'Expiration'
31
+ @rule['Expiration'] = @expiration
32
+ @in_expiration = false
33
+ @expiration = {}
34
+ end
35
+ elsif @in_transition
36
+ case name
37
+ when 'StorageClass',
38
+ @transition['StorageClass'] = value
39
+ when 'Date'
40
+ @transition[name] = value
41
+ when 'Days'
42
+ @transition[name] = value.to_i
43
+ when 'Transition'
44
+ @rule['Transition'] = @transition
45
+ @in_transition = false
46
+ @transition = {}
47
+ end
48
+ else
49
+ case name
50
+ when 'ID', 'Prefix'
51
+ @rule[name] = value
52
+ when 'Status'
53
+ @rule['Enabled'] = value == 'Enabled'
54
+ when 'Rule'
55
+ @response['Rules'] << @rule
56
+ @rule = {}
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,16 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class GetBucketLocation < Fog::Parsers::Base
6
+ def end_element(name)
7
+ case name
8
+ when 'LocationConstraint'
9
+ @response[name] = value
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class GetBucketLogging < Fog::Parsers::Base
6
+ def reset
7
+ @grant = { 'Grantee' => {} }
8
+ @response = { 'BucketLoggingStatus' => {} }
9
+ end
10
+
11
+ def end_element(name)
12
+ case name
13
+ when 'DisplayName', 'ID'
14
+ if @in_access_control_list
15
+ @grant['Grantee'][name] = value
16
+ else
17
+ @response['Owner'][name] = value
18
+ end
19
+ when 'Grant'
20
+ @response['BucketLoggingStatus']['LoggingEnabled']['TargetGrants'] << @grant
21
+ @grant = { 'Grantee' => {} }
22
+ when 'LoggingEnabled'
23
+ @response['BucketLoggingStatus']['LoggingEnabled'] = { 'TargetGrants' => [] }
24
+ when 'Permission'
25
+ @grant[name] = value
26
+ when 'TargetBucket', 'TargetPrefix'
27
+ @response['BucketLoggingStatus'][name] = value
28
+ when 'URI'
29
+ @grant['Grantee'][name] = value
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,22 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class GetBucketWebsite < Fog::Parsers::Base
6
+ def reset
7
+ @response = { 'ErrorDocument' => {}, 'IndexDocument' => {} }
8
+ end
9
+
10
+ def end_element(name)
11
+ case name
12
+ when 'Key'
13
+ @response['ErrorDocument'][name] = value
14
+ when 'Suffix'
15
+ @response['IndexDocument'][name] = value
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class GetRequestPayment < Fog::Parsers::Base
6
+ def end_element(name)
7
+ case name
8
+ when 'Payer'
9
+ @response[name] = value
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,28 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module InternetArchive
5
+ class GetService < Fog::Parsers::Base
6
+ def reset
7
+ @bucket = {}
8
+ @response = { 'Owner' => {}, 'Buckets' => [] }
9
+ end
10
+
11
+ def end_element(name)
12
+ case name
13
+ when 'Bucket'
14
+ @response['Buckets'] << @bucket
15
+ @bucket = {}
16
+ when 'CreationDate'
17
+ @bucket['CreationDate'] = Time.parse(value)
18
+ when 'DisplayName', 'ID'
19
+ @response['Owner'][name] = value
20
+ when 'Name'
21
+ @bucket[name] = value
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end