google-cloud-storage 0.25.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/google/cloud/storage/file.rb +78 -31
- data/lib/google/cloud/storage/service.rb +15 -20
- data/lib/google/cloud/storage/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2f69d45d27d36cc09db5b968a09cbbecf4d8354
|
4
|
+
data.tar.gz: 62b776735c66856f21cfc352541c87c3452f1dc5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93933194f259974df44e8961ed44f72d03e666dd15ad65aa082c05546f50438417811619f74e17ba8dc0c2b30a48ec7fa6ec706cd9e93cae454a03aa19965b26
|
7
|
+
data.tar.gz: 825b6a69664ce2c0fab0910234b7b512f430369102db779b627b4083a8b14b9e2e1c50636a0bb74437e07f929f14bebe22539f34a84655325e239aa4bf83661c
|
@@ -171,7 +171,7 @@ module Google
|
|
171
171
|
# directive for the file data.
|
172
172
|
def cache_control= cache_control
|
173
173
|
@gapi.cache_control = cache_control
|
174
|
-
|
174
|
+
update_gapi! :cache_control
|
175
175
|
end
|
176
176
|
|
177
177
|
##
|
@@ -186,7 +186,7 @@ module Google
|
|
186
186
|
# of the file data.
|
187
187
|
def content_disposition= content_disposition
|
188
188
|
@gapi.content_disposition = content_disposition
|
189
|
-
|
189
|
+
update_gapi! :content_disposition
|
190
190
|
end
|
191
191
|
|
192
192
|
##
|
@@ -203,7 +203,7 @@ module Google
|
|
203
203
|
# data.
|
204
204
|
def content_encoding= content_encoding
|
205
205
|
@gapi.content_encoding = content_encoding
|
206
|
-
|
206
|
+
update_gapi! :content_encoding
|
207
207
|
end
|
208
208
|
|
209
209
|
##
|
@@ -218,7 +218,7 @@ module Google
|
|
218
218
|
# the file data.
|
219
219
|
def content_language= content_language
|
220
220
|
@gapi.content_language = content_language
|
221
|
-
|
221
|
+
update_gapi! :content_language
|
222
222
|
end
|
223
223
|
|
224
224
|
##
|
@@ -234,7 +234,7 @@ module Google
|
|
234
234
|
# the file data.
|
235
235
|
def content_type= content_type
|
236
236
|
@gapi.content_type = content_type
|
237
|
-
|
237
|
+
update_gapi! :content_type
|
238
238
|
end
|
239
239
|
|
240
240
|
##
|
@@ -253,7 +253,7 @@ module Google
|
|
253
253
|
# "x-goog-meta-" response headers.
|
254
254
|
def metadata= metadata
|
255
255
|
@gapi.metadata = metadata
|
256
|
-
|
256
|
+
update_gapi! :metadata
|
257
257
|
end
|
258
258
|
|
259
259
|
##
|
@@ -292,9 +292,8 @@ module Google
|
|
292
292
|
# {Bucket#storage_class}.
|
293
293
|
# @param [Symbol, String] storage_class Storage class of the file.
|
294
294
|
def storage_class= storage_class
|
295
|
-
|
296
|
-
|
297
|
-
@gapi = resp.resource
|
295
|
+
@gapi.storage_class = storage_class_for(storage_class)
|
296
|
+
update_gapi! :storage_class
|
298
297
|
end
|
299
298
|
|
300
299
|
##
|
@@ -329,7 +328,7 @@ module Google
|
|
329
328
|
updater = Updater.new gapi
|
330
329
|
yield updater
|
331
330
|
updater.check_for_changed_metadata!
|
332
|
-
|
331
|
+
update_gapi! updater.updates unless updater.updates.empty?
|
333
332
|
end
|
334
333
|
|
335
334
|
##
|
@@ -469,6 +468,7 @@ module Google
|
|
469
468
|
# @param [String] encryption_key Optional. The customer-supplied,
|
470
469
|
# AES-256 encryption key used to encrypt the file, if one was provided
|
471
470
|
# to {Bucket#create_file}.
|
471
|
+
# @yield [file] a block yielding a delegate object for updating
|
472
472
|
#
|
473
473
|
# @return [Google::Cloud::Storage::File]
|
474
474
|
#
|
@@ -504,17 +504,43 @@ module Google
|
|
504
504
|
# file.copy "copy/of/previous/generation/file.ext",
|
505
505
|
# generation: 123456
|
506
506
|
#
|
507
|
+
# @example The file can be modified during copying:
|
508
|
+
# require "google/cloud/storage"
|
509
|
+
#
|
510
|
+
# storage = Google::Cloud::Storage.new
|
511
|
+
#
|
512
|
+
# bucket = storage.bucket "my-bucket"
|
513
|
+
#
|
514
|
+
# file = bucket.file "path/to/my-file.ext"
|
515
|
+
# file.copy "new-destination-bucket",
|
516
|
+
# "path/to/destination/file.ext" do |f|
|
517
|
+
# f.metadata["copied_from"] = "#{file.bucket}/#{file.name}"
|
518
|
+
# end
|
519
|
+
#
|
507
520
|
def copy dest_bucket_or_path, dest_path = nil, acl: nil,
|
508
521
|
generation: nil, encryption_key: nil
|
509
522
|
ensure_service!
|
510
|
-
options = { acl: acl, generation: generation,
|
511
|
-
key: encryption_key }
|
523
|
+
options = { acl: acl, generation: generation, key: encryption_key }
|
512
524
|
dest_bucket, dest_path, options = fix_copy_args dest_bucket_or_path,
|
513
525
|
dest_path, options
|
514
526
|
|
515
|
-
|
516
|
-
|
517
|
-
|
527
|
+
copy_gapi = nil
|
528
|
+
if block_given?
|
529
|
+
updater = Updater.new gapi
|
530
|
+
yield updater
|
531
|
+
updater.check_for_changed_metadata!
|
532
|
+
copy_gapi = gapi_from_attrs(updater.updates) if updater.updates.any?
|
533
|
+
end
|
534
|
+
|
535
|
+
resp = service.copy_file bucket, name, dest_bucket, dest_path,
|
536
|
+
copy_gapi, options
|
537
|
+
until resp.done
|
538
|
+
sleep 1
|
539
|
+
resp = service.copy_file bucket, name, dest_bucket, dest_path,
|
540
|
+
copy_gapi,
|
541
|
+
options.merge(token: resp.rewrite_token)
|
542
|
+
end
|
543
|
+
File.from_gapi resp.resource, service
|
518
544
|
end
|
519
545
|
|
520
546
|
##
|
@@ -566,10 +592,11 @@ module Google
|
|
566
592
|
ensure_service!
|
567
593
|
options = { source_key: encryption_key,
|
568
594
|
destination_key: new_encryption_key }
|
569
|
-
gapi = service.rewrite_file bucket, name, bucket, name, options
|
595
|
+
gapi = service.rewrite_file bucket, name, bucket, name, nil, options
|
570
596
|
until gapi.done
|
597
|
+
sleep 1
|
571
598
|
options[:token] = gapi.rewrite_token
|
572
|
-
gapi = service.rewrite_file bucket, name, bucket, name, options
|
599
|
+
gapi = service.rewrite_file bucket, name, bucket, name, nil, options
|
573
600
|
end
|
574
601
|
File.from_gapi gapi.resource, service
|
575
602
|
end
|
@@ -805,15 +832,39 @@ module Google
|
|
805
832
|
fail "Must have active connection" unless service
|
806
833
|
end
|
807
834
|
|
808
|
-
def
|
835
|
+
def update_gapi! *attributes
|
809
836
|
attributes.flatten!
|
810
837
|
return if attributes.empty?
|
838
|
+
update_gapi = gapi_from_attrs attributes
|
839
|
+
return if update_gapi.nil?
|
840
|
+
|
811
841
|
ensure_service!
|
812
|
-
|
842
|
+
|
843
|
+
if attributes.include? :storage_class
|
844
|
+
@gapi = rewrite_gapi bucket, name, update_gapi
|
845
|
+
else
|
846
|
+
@gapi = service.patch_file bucket, name, update_gapi
|
847
|
+
end
|
848
|
+
end
|
849
|
+
|
850
|
+
def gapi_from_attrs *attributes
|
851
|
+
attributes.flatten!
|
852
|
+
return nil if attributes.empty?
|
853
|
+
attr_params = Hash[attributes.map do |attr|
|
813
854
|
[attr, @gapi.send(attr)]
|
814
855
|
end]
|
815
|
-
|
816
|
-
|
856
|
+
Google::Apis::StorageV1::Object.new attr_params
|
857
|
+
end
|
858
|
+
|
859
|
+
def rewrite_gapi bucket, name, update_gapi
|
860
|
+
resp = service.rewrite_file bucket, name, bucket, name, update_gapi
|
861
|
+
until resp.done
|
862
|
+
sleep 1
|
863
|
+
rewrite_options = { token: resp.rewrite_token }
|
864
|
+
resp = service.rewrite_file bucket, name, bucket, name,
|
865
|
+
update_gapi, rewrite_options
|
866
|
+
end
|
867
|
+
resp.resource
|
817
868
|
end
|
818
869
|
|
819
870
|
def fix_copy_args dest_bucket, dest_path, options = {}
|
@@ -853,10 +904,6 @@ module Google
|
|
853
904
|
##
|
854
905
|
# Yielded to a block to accumulate changes for a patch request.
|
855
906
|
class Updater < File
|
856
|
-
# @private Do not allow storage_class to be set in an update call.
|
857
|
-
# It cannot be set with PATCH.
|
858
|
-
undef :storage_class=
|
859
|
-
|
860
907
|
# @private
|
861
908
|
attr_reader :updates
|
862
909
|
|
@@ -865,6 +912,7 @@ module Google
|
|
865
912
|
def initialize gapi
|
866
913
|
@updates = []
|
867
914
|
@gapi = gapi
|
915
|
+
@metadata ||= @gapi.metadata.to_h.dup
|
868
916
|
end
|
869
917
|
|
870
918
|
##
|
@@ -872,8 +920,7 @@ module Google
|
|
872
920
|
# values that will returned with requests for the file as
|
873
921
|
# "x-goog-meta-" response headers.
|
874
922
|
def metadata
|
875
|
-
|
876
|
-
@metadata ||= @gapi.metadata.to_h.dup
|
923
|
+
@metadata
|
877
924
|
end
|
878
925
|
|
879
926
|
##
|
@@ -883,22 +930,22 @@ module Google
|
|
883
930
|
def metadata= metadata
|
884
931
|
@metadata = metadata
|
885
932
|
@gapi.metadata = @metadata
|
886
|
-
|
933
|
+
update_gapi! :metadata
|
887
934
|
end
|
888
935
|
|
889
936
|
##
|
890
937
|
# @private Make sure any metadata changes are saved
|
891
938
|
def check_for_changed_metadata!
|
892
|
-
return if @metadata == @gapi.metadata
|
939
|
+
return if @metadata == @gapi.metadata.to_h
|
893
940
|
@gapi.metadata = @metadata
|
894
|
-
|
941
|
+
update_gapi! :metadata
|
895
942
|
end
|
896
943
|
|
897
944
|
protected
|
898
945
|
|
899
946
|
##
|
900
947
|
# Queue up all the updates instead of making them.
|
901
|
-
def
|
948
|
+
def update_gapi! attribute
|
902
949
|
@updates << attribute
|
903
950
|
@updates.uniq!
|
904
951
|
end
|
@@ -46,9 +46,10 @@ module Google
|
|
46
46
|
@service.client_options.application_name = "gcloud-ruby"
|
47
47
|
@service.client_options.application_version = \
|
48
48
|
Google::Cloud::Storage::VERSION
|
49
|
+
@service.client_options.open_timeout_sec = timeout
|
50
|
+
@service.client_options.read_timeout_sec = timeout
|
51
|
+
@service.client_options.send_timeout_sec = timeout
|
49
52
|
@service.request_options.retries = retries || 3
|
50
|
-
@service.request_options.timeout_sec = timeout
|
51
|
-
@service.request_options.open_timeout_sec = timeout
|
52
53
|
@service.request_options.header ||= {}
|
53
54
|
@service.request_options.header["x-goog-api-client"] = \
|
54
55
|
"gl-ruby/#{RUBY_VERSION} gccl/#{Google::Cloud::Storage::VERSION}"
|
@@ -207,14 +208,18 @@ module Google
|
|
207
208
|
# destination bucket/object.
|
208
209
|
def copy_file source_bucket_name, source_file_path,
|
209
210
|
destination_bucket_name, destination_file_path,
|
210
|
-
options = {}
|
211
|
+
file_gapi = nil, options = {}
|
212
|
+
key_options = rewrite_key_options options[:key],
|
213
|
+
options[:key]
|
211
214
|
execute do
|
212
|
-
service.
|
215
|
+
service.rewrite_object \
|
213
216
|
source_bucket_name, source_file_path,
|
214
217
|
destination_bucket_name, destination_file_path,
|
218
|
+
file_gapi,
|
215
219
|
destination_predefined_acl: options[:acl],
|
216
220
|
source_generation: options[:generation],
|
217
|
-
|
221
|
+
rewrite_token: options[:token],
|
222
|
+
options: key_options
|
218
223
|
end
|
219
224
|
end
|
220
225
|
|
@@ -222,28 +227,18 @@ module Google
|
|
222
227
|
# destination bucket/object.
|
223
228
|
def rewrite_file source_bucket_name, source_file_path,
|
224
229
|
destination_bucket_name, destination_file_path,
|
225
|
-
options = {}
|
226
|
-
|
227
|
-
|
230
|
+
file_gapi = nil, options = {}
|
231
|
+
key_options = rewrite_key_options options[:source_key],
|
232
|
+
options[:destination_key]
|
228
233
|
execute do
|
229
234
|
service.rewrite_object \
|
230
235
|
source_bucket_name, source_file_path,
|
231
236
|
destination_bucket_name, destination_file_path,
|
237
|
+
file_gapi,
|
232
238
|
destination_predefined_acl: options[:acl],
|
233
239
|
source_generation: options[:generation],
|
234
240
|
rewrite_token: options[:token],
|
235
|
-
options:
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
## Rewrite a file from source bucket/object to a
|
240
|
-
# destination bucket/object.
|
241
|
-
def update_file_storage_class bucket_name, file_path, storage_class
|
242
|
-
execute do
|
243
|
-
service.rewrite_object \
|
244
|
-
bucket_name, file_path,
|
245
|
-
bucket_name, file_path,
|
246
|
-
Google::Apis::StorageV1::Object.new(storage_class: storage_class)
|
241
|
+
options: key_options
|
247
242
|
end
|
248
243
|
end
|
249
244
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-cloud-storage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Moore
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-04-
|
12
|
+
date: 2017-04-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: google-cloud-core
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.
|
34
|
+
version: 0.11.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 0.
|
41
|
+
version: 0.11.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: digest-crc
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|