fog 1.40.0 → 1.41.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.md +30 -0
- data/fog.gemspec +6 -4
- data/lib/fog/ovirt/compute.rb +2 -0
- data/lib/fog/ovirt/models/compute/server.rb +7 -2
- data/lib/fog/ovirt/requests/compute/activate_volume.rb +22 -0
- data/lib/fog/ovirt/requests/compute/deactivate_volume.rb +22 -0
- data/lib/fog/version.rb +1 -1
- data/lib/tasks/changelog_task.rb +2 -1
- data/tests/compute/helper.rb +0 -3
- data/tests/helpers/mock_helper.rb +0 -2
- data/tests/storage/helper.rb +0 -3
- metadata +49 -224
- data/lib/fog/bin/internet_archive.rb +0 -32
- data/lib/fog/bin/joyent.rb +0 -33
- data/lib/fog/internet_archive.rb +0 -1
- data/lib/fog/internet_archive/core.rb +0 -291
- data/lib/fog/internet_archive/models/storage/directories.rb +0 -39
- data/lib/fog/internet_archive/models/storage/directory.rb +0 -105
- data/lib/fog/internet_archive/models/storage/file.rb +0 -254
- data/lib/fog/internet_archive/models/storage/files.rb +0 -119
- data/lib/fog/internet_archive/models/storage/ia_attributes.rb +0 -36
- data/lib/fog/internet_archive/parsers/storage/access_control_list.rb +0 -42
- data/lib/fog/internet_archive/parsers/storage/complete_multipart_upload.rb +0 -20
- data/lib/fog/internet_archive/parsers/storage/copy_object.rb +0 -18
- data/lib/fog/internet_archive/parsers/storage/cors_configuration.rb +0 -38
- data/lib/fog/internet_archive/parsers/storage/delete_multiple_objects.rb +0 -45
- data/lib/fog/internet_archive/parsers/storage/get_bucket.rb +0 -58
- data/lib/fog/internet_archive/parsers/storage/get_bucket_lifecycle.rb +0 -64
- data/lib/fog/internet_archive/parsers/storage/get_bucket_location.rb +0 -16
- data/lib/fog/internet_archive/parsers/storage/get_bucket_logging.rb +0 -36
- data/lib/fog/internet_archive/parsers/storage/get_bucket_website.rb +0 -22
- data/lib/fog/internet_archive/parsers/storage/get_request_payment.rb +0 -16
- data/lib/fog/internet_archive/parsers/storage/get_service.rb +0 -28
- data/lib/fog/internet_archive/parsers/storage/initiate_multipart_upload.rb +0 -20
- data/lib/fog/internet_archive/parsers/storage/list_multipart_uploads.rb +0 -52
- data/lib/fog/internet_archive/parsers/storage/list_parts.rb +0 -36
- data/lib/fog/internet_archive/requests/storage/abort_multipart_upload.rb +0 -27
- data/lib/fog/internet_archive/requests/storage/acl_utils.rb +0 -60
- data/lib/fog/internet_archive/requests/storage/complete_multipart_upload.rb +0 -46
- data/lib/fog/internet_archive/requests/storage/copy_object.rb +0 -77
- data/lib/fog/internet_archive/requests/storage/cors_utils.rb +0 -39
- data/lib/fog/internet_archive/requests/storage/delete_bucket.rb +0 -42
- data/lib/fog/internet_archive/requests/storage/delete_bucket_cors.rb +0 -26
- data/lib/fog/internet_archive/requests/storage/delete_bucket_lifecycle.rb +0 -26
- data/lib/fog/internet_archive/requests/storage/delete_bucket_policy.rb +0 -26
- data/lib/fog/internet_archive/requests/storage/delete_bucket_website.rb +0 -26
- data/lib/fog/internet_archive/requests/storage/delete_multiple_objects.rb +0 -88
- data/lib/fog/internet_archive/requests/storage/delete_object.rb +0 -46
- data/lib/fog/internet_archive/requests/storage/get_bucket.rb +0 -108
- data/lib/fog/internet_archive/requests/storage/get_bucket_acl.rb +0 -65
- data/lib/fog/internet_archive/requests/storage/get_bucket_cors.rb +0 -61
- data/lib/fog/internet_archive/requests/storage/get_bucket_lifecycle.rb +0 -35
- data/lib/fog/internet_archive/requests/storage/get_bucket_location.rb +0 -54
- data/lib/fog/internet_archive/requests/storage/get_bucket_logging.rb +0 -45
- data/lib/fog/internet_archive/requests/storage/get_bucket_policy.rb +0 -31
- data/lib/fog/internet_archive/requests/storage/get_bucket_website.rb +0 -38
- data/lib/fog/internet_archive/requests/storage/get_object.rb +0 -163
- data/lib/fog/internet_archive/requests/storage/get_object_acl.rb +0 -72
- data/lib/fog/internet_archive/requests/storage/get_object_http_url.rb +0 -48
- data/lib/fog/internet_archive/requests/storage/get_object_https_url.rb +0 -30
- data/lib/fog/internet_archive/requests/storage/get_object_torrent.rb +0 -45
- data/lib/fog/internet_archive/requests/storage/get_object_url.rb +0 -49
- data/lib/fog/internet_archive/requests/storage/get_request_payment.rb +0 -45
- data/lib/fog/internet_archive/requests/storage/get_service.rb +0 -50
- data/lib/fog/internet_archive/requests/storage/head_object.rb +0 -57
- data/lib/fog/internet_archive/requests/storage/initiate_multipart_upload.rb +0 -42
- data/lib/fog/internet_archive/requests/storage/list_multipart_uploads.rb +0 -52
- data/lib/fog/internet_archive/requests/storage/list_parts.rb +0 -53
- data/lib/fog/internet_archive/requests/storage/post_object_hidden_fields.rb +0 -36
- data/lib/fog/internet_archive/requests/storage/put_bucket.rb +0 -70
- data/lib/fog/internet_archive/requests/storage/put_bucket_acl.rb +0 -69
- data/lib/fog/internet_archive/requests/storage/put_bucket_cors.rb +0 -47
- data/lib/fog/internet_archive/requests/storage/put_bucket_lifecycle.rb +0 -76
- data/lib/fog/internet_archive/requests/storage/put_bucket_logging.rb +0 -79
- data/lib/fog/internet_archive/requests/storage/put_bucket_policy.rb +0 -25
- data/lib/fog/internet_archive/requests/storage/put_bucket_website.rb +0 -59
- data/lib/fog/internet_archive/requests/storage/put_object.rb +0 -94
- data/lib/fog/internet_archive/requests/storage/put_object_acl.rb +0 -73
- data/lib/fog/internet_archive/requests/storage/put_object_url.rb +0 -43
- data/lib/fog/internet_archive/requests/storage/put_request_payment.rb +0 -45
- data/lib/fog/internet_archive/requests/storage/sync_clock.rb +0 -24
- data/lib/fog/internet_archive/requests/storage/upload_part.rb +0 -39
- data/lib/fog/internet_archive/signaturev4.rb +0 -71
- data/lib/fog/internet_archive/storage.rb +0 -381
- data/lib/fog/joyent.rb +0 -12
- data/lib/fog/joyent/analytics.rb +0 -310
- data/lib/fog/joyent/compute.rb +0 -272
- data/lib/fog/joyent/core.rb +0 -10
- data/lib/fog/joyent/errors.rb +0 -91
- data/lib/fog/joyent/models/analytics/field.rb +0 -13
- data/lib/fog/joyent/models/analytics/fields.rb +0 -24
- data/lib/fog/joyent/models/analytics/instrumentation.rb +0 -82
- data/lib/fog/joyent/models/analytics/instrumentations.rb +0 -23
- data/lib/fog/joyent/models/analytics/joyent_module.rb +0 -13
- data/lib/fog/joyent/models/analytics/joyent_modules.rb +0 -24
- data/lib/fog/joyent/models/analytics/metric.rb +0 -17
- data/lib/fog/joyent/models/analytics/metrics.rb +0 -16
- data/lib/fog/joyent/models/analytics/transformation.rb +0 -13
- data/lib/fog/joyent/models/analytics/transformations.rb +0 -24
- data/lib/fog/joyent/models/analytics/type.rb +0 -16
- data/lib/fog/joyent/models/analytics/types.rb +0 -24
- data/lib/fog/joyent/models/analytics/value.rb +0 -20
- data/lib/fog/joyent/models/compute/datacenter.rb +0 -11
- data/lib/fog/joyent/models/compute/datacenters.rb +0 -21
- data/lib/fog/joyent/models/compute/flavor.rb +0 -19
- data/lib/fog/joyent/models/compute/flavors.rb +0 -21
- data/lib/fog/joyent/models/compute/image.rb +0 -26
- data/lib/fog/joyent/models/compute/images.rb +0 -30
- data/lib/fog/joyent/models/compute/key.rb +0 -19
- data/lib/fog/joyent/models/compute/keys.rb +0 -32
- data/lib/fog/joyent/models/compute/network.rb +0 -12
- data/lib/fog/joyent/models/compute/networks.rb +0 -14
- data/lib/fog/joyent/models/compute/server.rb +0 -124
- data/lib/fog/joyent/models/compute/servers.rb +0 -35
- data/lib/fog/joyent/models/compute/snapshot.rb +0 -44
- data/lib/fog/joyent/models/compute/snapshots.rb +0 -35
- data/lib/fog/joyent/requests/analytics/create_instrumentation.rb +0 -25
- data/lib/fog/joyent/requests/analytics/delete_instrumentation.rb +0 -23
- data/lib/fog/joyent/requests/analytics/describe_analytics.rb +0 -26
- data/lib/fog/joyent/requests/analytics/get_instrumentation.rb +0 -26
- data/lib/fog/joyent/requests/analytics/get_instrumentation_value.rb +0 -30
- data/lib/fog/joyent/requests/analytics/list_instrumentations.rb +0 -25
- data/lib/fog/joyent/requests/compute/add_machine_tags.rb +0 -19
- data/lib/fog/joyent/requests/compute/create_key.rb +0 -54
- data/lib/fog/joyent/requests/compute/create_machine.rb +0 -16
- data/lib/fog/joyent/requests/compute/create_machine_snapshot.rb +0 -16
- data/lib/fog/joyent/requests/compute/delete_all_machine_metadata.rb +0 -16
- data/lib/fog/joyent/requests/compute/delete_all_machine_tags.rb +0 -15
- data/lib/fog/joyent/requests/compute/delete_key.rb +0 -27
- data/lib/fog/joyent/requests/compute/delete_machine.rb +0 -15
- data/lib/fog/joyent/requests/compute/delete_machine_metadata.rb +0 -16
- data/lib/fog/joyent/requests/compute/delete_machine_snapshot.rb +0 -18
- data/lib/fog/joyent/requests/compute/delete_machine_tag.rb +0 -15
- data/lib/fog/joyent/requests/compute/get_dataset.rb +0 -27
- data/lib/fog/joyent/requests/compute/get_image.rb +0 -28
- data/lib/fog/joyent/requests/compute/get_key.rb +0 -29
- data/lib/fog/joyent/requests/compute/get_machine.rb +0 -29
- data/lib/fog/joyent/requests/compute/get_machine_metadata.rb +0 -24
- data/lib/fog/joyent/requests/compute/get_machine_snapshot.rb +0 -15
- data/lib/fog/joyent/requests/compute/get_machine_tag.rb +0 -18
- data/lib/fog/joyent/requests/compute/get_package.rb +0 -32
- data/lib/fog/joyent/requests/compute/list_datacenters.rb +0 -16
- data/lib/fog/joyent/requests/compute/list_datasets.rb +0 -24
- data/lib/fog/joyent/requests/compute/list_images.rb +0 -25
- data/lib/fog/joyent/requests/compute/list_keys.rb +0 -25
- data/lib/fog/joyent/requests/compute/list_machine_snapshots.rb +0 -15
- data/lib/fog/joyent/requests/compute/list_machine_tags.rb +0 -20
- data/lib/fog/joyent/requests/compute/list_machines.rb +0 -26
- data/lib/fog/joyent/requests/compute/list_networks.rb +0 -26
- data/lib/fog/joyent/requests/compute/list_packages.rb +0 -34
- data/lib/fog/joyent/requests/compute/reboot_machine.rb +0 -15
- data/lib/fog/joyent/requests/compute/resize_machine.rb +0 -16
- data/lib/fog/joyent/requests/compute/start_machine.rb +0 -16
- data/lib/fog/joyent/requests/compute/start_machine_from_snapshot.rb +0 -15
- data/lib/fog/joyent/requests/compute/stop_machine.rb +0 -16
- data/lib/fog/joyent/requests/compute/update_machine_metadata.rb +0 -15
- data/spec/fog/bin/internetarchive_spec.rb +0 -10
- data/tests/internet_archive/models/storage/directory_tests.rb +0 -42
- data/tests/internet_archive/models/storage/file_tests.rb +0 -61
- data/tests/internet_archive/models/storage/files_tests.rb +0 -58
- data/tests/internet_archive/models/storage/url_tests.rb +0 -28
- data/tests/internet_archive/requests/storage/acl_utils_tests.rb +0 -209
- data/tests/internet_archive/requests/storage/bucket_tests.rb +0 -324
- data/tests/internet_archive/requests/storage/cors_utils_tests.rb +0 -108
- data/tests/internet_archive/requests/storage/multipart_upload_tests.rb +0 -132
- data/tests/internet_archive/requests/storage/object_tests.rb +0 -166
- data/tests/internet_archive/signaturev4_tests.rb +0 -41
- data/tests/internet_archive/signed_params_tests.rb +0 -5
- data/tests/joyent/models/analytics/field_tests.rb +0 -10
- data/tests/joyent/models/analytics/fields_tests.rb +0 -13
- data/tests/joyent/models/analytics/instrumentation_tests.rb +0 -13
- data/tests/joyent/models/analytics/instrumentations_tests.rb +0 -3
- data/tests/joyent/models/analytics/joyent_module_tests.rb +0 -10
- data/tests/joyent/models/analytics/joyent_modules_tests.rb +0 -13
- data/tests/joyent/models/analytics/metric_tests.rb +0 -10
- data/tests/joyent/models/analytics/metrics_tests.rb +0 -20
- data/tests/joyent/models/analytics/transformation_tests.rb +0 -10
- data/tests/joyent/models/analytics/transformations_tests.rb +0 -13
- data/tests/joyent/models/analytics/type_tests.rb +0 -10
- data/tests/joyent/models/analytics/types_tests.rb +0 -13
- data/tests/joyent/requests/analytics/instrumentation_tests.rb +0 -44
- data/tests/joyent/requests/compute/datasets_tests.rb +0 -58
- data/tests/joyent/requests/compute/keys_tests.rb +0 -47
- data/tests/joyent/requests/compute/machines_tests.rb +0 -66
- data/tests/joyent/requests/compute/networks_tests.rb +0 -39
- data/tests/joyent/requests/compute/packages_tests.rb +0 -68
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
require 'fog/core/model'
|
|
2
|
-
require 'fog/internet_archive/models/storage/ia_attributes.rb'
|
|
3
|
-
|
|
4
|
-
module Fog
|
|
5
|
-
module Storage
|
|
6
|
-
class InternetArchive
|
|
7
|
-
class File < Fog::Model
|
|
8
|
-
extend Fog::Storage::IAAttributes::ClassMethods
|
|
9
|
-
include Fog::Storage::IAAttributes::InstanceMethods
|
|
10
|
-
|
|
11
|
-
# @see AWS Object docs http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectOps.html
|
|
12
|
-
|
|
13
|
-
# @note Chunk size to use for multipart uploads.
|
|
14
|
-
# Use small chunk sizes to minimize memory. E.g. 5242880 = 5mb
|
|
15
|
-
attr_accessor :multipart_chunk_size
|
|
16
|
-
|
|
17
|
-
attr_writer :body
|
|
18
|
-
|
|
19
|
-
identity :key, :aliases => 'Key'
|
|
20
|
-
|
|
21
|
-
attribute :cache_control, :aliases => 'Cache-Control'
|
|
22
|
-
attribute :content_disposition, :aliases => 'Content-Disposition'
|
|
23
|
-
attribute :content_encoding, :aliases => 'Content-Encoding'
|
|
24
|
-
attribute :content_length, :aliases => ['Content-Length', 'Size'], :type => :integer
|
|
25
|
-
attribute :content_md5, :aliases => 'Content-MD5'
|
|
26
|
-
attribute :content_type, :aliases => 'Content-Type'
|
|
27
|
-
attribute :etag, :aliases => ['Etag', 'ETag']
|
|
28
|
-
attribute :expires, :aliases => 'Expires'
|
|
29
|
-
attribute :last_modified, :aliases => ['Last-Modified', 'LastModified']
|
|
30
|
-
attribute :metadata
|
|
31
|
-
attribute :owner, :aliases => 'Owner'
|
|
32
|
-
|
|
33
|
-
# treat these differently
|
|
34
|
-
attribute :collections
|
|
35
|
-
attribute :subjects
|
|
36
|
-
|
|
37
|
-
ia_metadata_attribute :auto_make_bucket
|
|
38
|
-
ia_metadata_attribute :cascade_delete
|
|
39
|
-
ia_metadata_attribute :ignore_preexisting_bucket
|
|
40
|
-
ia_metadata_attribute :interactive_priority
|
|
41
|
-
ia_metadata_attribute :keep_old_version
|
|
42
|
-
ia_metadata_attribute :queue_derive
|
|
43
|
-
ia_metadata_attribute :size_hint
|
|
44
|
-
|
|
45
|
-
# acl for internet archive is always public-read
|
|
46
|
-
def acl
|
|
47
|
-
'public-read'
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def acl=(new_acl)
|
|
51
|
-
'public-read'
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# Get file's body if exists, else ' '.
|
|
55
|
-
#
|
|
56
|
-
# @return [File]
|
|
57
|
-
#
|
|
58
|
-
def body
|
|
59
|
-
attributes[:body] ||= if last_modified && (file = collection.get(identity))
|
|
60
|
-
file.body
|
|
61
|
-
else
|
|
62
|
-
''
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# Set body attribute.
|
|
67
|
-
#
|
|
68
|
-
# @param [File] new_body
|
|
69
|
-
# @return [File] attributes[:body]
|
|
70
|
-
#
|
|
71
|
-
def body=(new_body)
|
|
72
|
-
attributes[:body] = new_body
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
# Get the file instance's directory.
|
|
76
|
-
#
|
|
77
|
-
# @return [Fog::InternetArchive::Storage::Directory]
|
|
78
|
-
#
|
|
79
|
-
def directory
|
|
80
|
-
@directory
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# Copy object from one bucket to other bucket.
|
|
84
|
-
#
|
|
85
|
-
# required attributes: directory, key
|
|
86
|
-
#
|
|
87
|
-
# @param target_directory_key [String]
|
|
88
|
-
# @param target_file_key [String]
|
|
89
|
-
# @param options [Hash] options for copy_object method
|
|
90
|
-
# @return [String] Fog::InternetArchive::Files#head status of directory contents
|
|
91
|
-
#
|
|
92
|
-
def copy(target_directory_key, target_file_key, options = {})
|
|
93
|
-
requires :directory, :key
|
|
94
|
-
service.copy_object(directory.key, key, target_directory_key, target_file_key, options)
|
|
95
|
-
target_directory = service.directories.new(:key => target_directory_key)
|
|
96
|
-
target_directory.files.head(target_file_key)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# Destroy file via http DELETE.
|
|
100
|
-
#
|
|
101
|
-
# required attributes: directory, key
|
|
102
|
-
#
|
|
103
|
-
# @param options [Hash]
|
|
104
|
-
# @return [Boolean] true if successful
|
|
105
|
-
#
|
|
106
|
-
def destroy(options = {})
|
|
107
|
-
requires :directory, :key
|
|
108
|
-
options['x-archive-cascade-delete'] = cascade_delete if cascade_delete
|
|
109
|
-
service.delete_object(directory.key, key, options)
|
|
110
|
-
true
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
remove_method :metadata
|
|
114
|
-
def metadata
|
|
115
|
-
attributes.reject {|key, value| !(key.to_s =~ /^x-(amz||archive)-meta/)}
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
remove_method :metadata=
|
|
119
|
-
def metadata=(new_metadata)
|
|
120
|
-
merge_attributes(new_metadata)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
remove_method :owner=
|
|
124
|
-
def owner=(new_owner)
|
|
125
|
-
if new_owner
|
|
126
|
-
attributes[:owner] = {
|
|
127
|
-
:display_name => new_owner['DisplayName'],
|
|
128
|
-
:id => new_owner['ID']
|
|
129
|
-
}
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
# Set Access-Control-List permissions.
|
|
134
|
-
#
|
|
135
|
-
# valid new_publics: public_read, private
|
|
136
|
-
#
|
|
137
|
-
# @param [String] new_public
|
|
138
|
-
# @return [String] new_public
|
|
139
|
-
#
|
|
140
|
-
def public=(new_public)
|
|
141
|
-
'public-read'
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
# Get publicly acessible url via http GET.
|
|
145
|
-
#
|
|
146
|
-
# required attributes: directory, key
|
|
147
|
-
#
|
|
148
|
-
# @return [String] public url
|
|
149
|
-
#
|
|
150
|
-
def public_url
|
|
151
|
-
requires :directory, :key
|
|
152
|
-
"http://#{Fog::InternetArchive::DOMAIN_NAME}/download/#{directory.key}/#{Fog::InternetArchive.escape(key)}".gsub('%2F','/')
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
# Save file with body as contents to directory.key with name key via http PUT
|
|
156
|
-
#
|
|
157
|
-
# required attributes: body, directory, key
|
|
158
|
-
#
|
|
159
|
-
# @param [Hash] options
|
|
160
|
-
# @option options [String] cache_control sets Cache-Control header. For example, 'No-cache'
|
|
161
|
-
# @option options [String] content_disposition sets Content-Disposition HTTP header. For exampple, 'attachment; filename=testing.txt'
|
|
162
|
-
# @option options [String] content_encoding sets Content-Encoding HTTP header. For example, 'x-gzip'
|
|
163
|
-
# @option options [String] content_md5 sets Content-MD5. For example, '79054025255fb1a26e4bc422aef54eb4'
|
|
164
|
-
# @option options [String] content_type Content-Type. For example, 'text/plain'
|
|
165
|
-
# @option options [String] expires sets number of seconds before AWS Object expires.
|
|
166
|
-
# @option options [String] storage_class sets x-amz-storage-class HTTP header. Defaults to 'STANDARD'. Or, 'REDUCED_REDUNDANCY'
|
|
167
|
-
# @option options [String] encryption sets HTTP encryption header. Set to 'AES256' to encrypt files at rest on S3
|
|
168
|
-
# @return [Boolean] true if no errors
|
|
169
|
-
#
|
|
170
|
-
def save(options = {})
|
|
171
|
-
requires :body, :directory, :key
|
|
172
|
-
if options != {}
|
|
173
|
-
Fog::Logger.deprecation("options param is deprecated [light_black](#{caller.first})[/]")
|
|
174
|
-
end
|
|
175
|
-
options['Cache-Control'] = cache_control if cache_control
|
|
176
|
-
options['Content-Disposition'] = content_disposition if content_disposition
|
|
177
|
-
options['Content-Encoding'] = content_encoding if content_encoding
|
|
178
|
-
options['Content-MD5'] = content_md5 if content_md5
|
|
179
|
-
options['Content-Type'] = content_type if content_type
|
|
180
|
-
options['Expires'] = expires if expires
|
|
181
|
-
options.merge!(metadata)
|
|
182
|
-
|
|
183
|
-
options['x-archive-auto-make-bucket'] = auto_make_bucket if auto_make_bucket
|
|
184
|
-
options['x-archive-interactive-priority'] = interactive_priority if interactive_priority
|
|
185
|
-
options['x-archive-keep-old-version'] = keep_old_version if keep_old_version
|
|
186
|
-
options['x-archive-queue-derive'] = queue_derive if queue_derive
|
|
187
|
-
options['x-archive-size-hint'] = size_hint.to_i.to_s if size_hint
|
|
188
|
-
|
|
189
|
-
set_metadata_array_headers(:collections, options)
|
|
190
|
-
set_metadata_array_headers(:subjects, options)
|
|
191
|
-
|
|
192
|
-
if multipart_chunk_size && body.respond_to?(:read)
|
|
193
|
-
data = multipart_save(options)
|
|
194
|
-
merge_attributes(data.body)
|
|
195
|
-
else
|
|
196
|
-
data = service.put_object(directory.key, key, body, options)
|
|
197
|
-
merge_attributes(data.headers.reject {|key, value| ['Content-Length', 'Content-Type'].include?(key)})
|
|
198
|
-
end
|
|
199
|
-
self.etag.gsub!('"','') if self.etag
|
|
200
|
-
self.content_length = Fog::Storage.get_body_size(body)
|
|
201
|
-
self.content_type ||= Fog::Storage.get_content_type(body)
|
|
202
|
-
true
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
# Get a url for file.
|
|
206
|
-
#
|
|
207
|
-
# required attributes: key
|
|
208
|
-
#
|
|
209
|
-
# @param expires [String] number of seconds before url expires
|
|
210
|
-
# @param options [Hash]
|
|
211
|
-
# @return [String] url
|
|
212
|
-
#
|
|
213
|
-
def url(expires, options = {})
|
|
214
|
-
requires :key
|
|
215
|
-
collection.get_url(key, expires, options)
|
|
216
|
-
end
|
|
217
|
-
|
|
218
|
-
private
|
|
219
|
-
|
|
220
|
-
def directory=(new_directory)
|
|
221
|
-
@directory = new_directory
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
def multipart_save(options)
|
|
225
|
-
# Initiate the upload
|
|
226
|
-
res = service.initiate_multipart_upload(directory.key, key, options)
|
|
227
|
-
upload_id = res.body["UploadId"]
|
|
228
|
-
|
|
229
|
-
# Store ETags of upload parts
|
|
230
|
-
part_tags = []
|
|
231
|
-
|
|
232
|
-
# Upload each part
|
|
233
|
-
# TODO: optionally upload chunks in parallel using threads
|
|
234
|
-
# (may cause network performance problems with many small chunks)
|
|
235
|
-
# TODO: Support large chunk sizes without reading the chunk into memory
|
|
236
|
-
body.rewind if body.respond_to?(:rewind)
|
|
237
|
-
while (chunk = body.read(multipart_chunk_size)) do
|
|
238
|
-
md5 = Base64.encode64(Digest::MD5.digest(chunk)).strip
|
|
239
|
-
part_upload = service.upload_part(directory.key, key, upload_id, part_tags.size + 1, chunk, 'Content-MD5' => md5 )
|
|
240
|
-
part_tags << part_upload.headers["ETag"]
|
|
241
|
-
end
|
|
242
|
-
|
|
243
|
-
rescue
|
|
244
|
-
# Abort the upload & reraise
|
|
245
|
-
service.abort_multipart_upload(directory.key, key, upload_id) if upload_id
|
|
246
|
-
raise
|
|
247
|
-
else
|
|
248
|
-
# Complete the upload
|
|
249
|
-
service.complete_multipart_upload(directory.key, key, upload_id, part_tags)
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
end
|
|
253
|
-
end
|
|
254
|
-
end
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
require 'fog/core/collection'
|
|
2
|
-
require 'fog/internet_archive/models/storage/file'
|
|
3
|
-
|
|
4
|
-
module Fog
|
|
5
|
-
module Storage
|
|
6
|
-
class InternetArchive
|
|
7
|
-
class Files < Fog::Collection
|
|
8
|
-
extend Fog::Deprecation
|
|
9
|
-
deprecate :get_url, :get_https_url
|
|
10
|
-
|
|
11
|
-
attribute :common_prefixes, :aliases => 'CommonPrefixes'
|
|
12
|
-
attribute :delimiter, :aliases => 'Delimiter'
|
|
13
|
-
attribute :directory
|
|
14
|
-
attribute :is_truncated, :aliases => 'IsTruncated'
|
|
15
|
-
attribute :marker, :aliases => 'Marker'
|
|
16
|
-
attribute :max_keys, :aliases => ['MaxKeys', 'max-keys']
|
|
17
|
-
attribute :prefix, :aliases => 'Prefix'
|
|
18
|
-
|
|
19
|
-
model Fog::Storage::InternetArchive::File
|
|
20
|
-
|
|
21
|
-
def all(options = {})
|
|
22
|
-
requires :directory
|
|
23
|
-
options = {
|
|
24
|
-
'delimiter' => delimiter,
|
|
25
|
-
'marker' => marker,
|
|
26
|
-
'max-keys' => max_keys,
|
|
27
|
-
'prefix' => prefix
|
|
28
|
-
}.merge!(options)
|
|
29
|
-
options = options.reject {|key,value| value.nil? || value.to_s.empty?}
|
|
30
|
-
merge_attributes(options)
|
|
31
|
-
parent = directory.collection.get(
|
|
32
|
-
directory.key,
|
|
33
|
-
options
|
|
34
|
-
)
|
|
35
|
-
if parent
|
|
36
|
-
merge_attributes(parent.files.attributes)
|
|
37
|
-
load(parent.files.map {|file| file.attributes})
|
|
38
|
-
else
|
|
39
|
-
nil
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
alias_method :each_file_this_page, :each
|
|
44
|
-
def each
|
|
45
|
-
if !block_given?
|
|
46
|
-
self
|
|
47
|
-
else
|
|
48
|
-
subset = dup.all
|
|
49
|
-
|
|
50
|
-
subset.each_file_this_page {|f| yield f}
|
|
51
|
-
while subset.is_truncated
|
|
52
|
-
subset = subset.all(:marker => subset.last.key)
|
|
53
|
-
subset.each_file_this_page {|f| yield f}
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
self
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def get(key, options = {}, &block)
|
|
61
|
-
requires :directory
|
|
62
|
-
data = service.get_object(directory.key, key, options, &block)
|
|
63
|
-
normalize_headers(data)
|
|
64
|
-
file_data = data.headers.merge({
|
|
65
|
-
:body => data.body,
|
|
66
|
-
:key => key
|
|
67
|
-
})
|
|
68
|
-
new(file_data)
|
|
69
|
-
rescue Excon::Errors::NotFound => error
|
|
70
|
-
case error.response.body
|
|
71
|
-
when /<Code>NoSuchKey<\/Code>/
|
|
72
|
-
nil
|
|
73
|
-
when /<Code>NoSuchBucket<\/Code>/
|
|
74
|
-
raise(Fog::Storage::InternetArchive::NotFound.new("Directory #{directory.identity} does not exist."))
|
|
75
|
-
else
|
|
76
|
-
raise(error)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def get_url(key, expires, options = {})
|
|
81
|
-
requires :directory
|
|
82
|
-
service.get_object_url(directory.key, key, expires, options)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def get_http_url(key, expires, options = {})
|
|
86
|
-
requires :directory
|
|
87
|
-
service.get_object_http_url(directory.key, key, expires, options)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def get_https_url(key, expires, options = {})
|
|
91
|
-
requires :directory
|
|
92
|
-
service.get_object_https_url(directory.key, key, expires, options)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def head(key, options = {})
|
|
96
|
-
requires :directory
|
|
97
|
-
data = service.head_object(directory.key, key, options)
|
|
98
|
-
normalize_headers(data)
|
|
99
|
-
file_data = data.headers.merge({
|
|
100
|
-
:key => key
|
|
101
|
-
})
|
|
102
|
-
new(file_data)
|
|
103
|
-
rescue Excon::Errors::NotFound
|
|
104
|
-
nil
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def new(attributes = {})
|
|
108
|
-
requires :directory
|
|
109
|
-
super({ :directory => directory }.merge!(attributes))
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
def normalize_headers(data)
|
|
113
|
-
data.headers['Last-Modified'] = Time.parse(data.get_header('Last-Modified'))
|
|
114
|
-
data.headers['ETag'] = data.get_header('ETag').gsub('"','')
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
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
|
|
@@ -1,42 +0,0 @@
|
|
|
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
|