gcloud 0.5.0 → 0.6.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.
Files changed (52) hide show
  1. checksums.yaml +8 -8
  2. data/CHANGELOG.md +8 -0
  3. data/lib/gcloud.rb +48 -30
  4. data/lib/gcloud/bigquery.rb +4 -6
  5. data/lib/gcloud/bigquery/connection.rb +2 -14
  6. data/lib/gcloud/bigquery/dataset.rb +41 -42
  7. data/lib/gcloud/bigquery/project.rb +50 -46
  8. data/lib/gcloud/bigquery/query_job.rb +7 -8
  9. data/lib/gcloud/bigquery/table.rb +54 -55
  10. data/lib/gcloud/bigquery/table/schema.rb +30 -40
  11. data/lib/gcloud/bigquery/view.rb +10 -11
  12. data/lib/gcloud/credentials.rb +19 -25
  13. data/lib/gcloud/datastore.rb +4 -6
  14. data/lib/gcloud/datastore/dataset.rb +3 -5
  15. data/lib/gcloud/dns.rb +4 -6
  16. data/lib/gcloud/dns/connection.rb +17 -16
  17. data/lib/gcloud/dns/importer.rb +5 -11
  18. data/lib/gcloud/dns/project.rb +11 -12
  19. data/lib/gcloud/dns/zone.rb +52 -92
  20. data/lib/gcloud/dns/zone/transaction.rb +2 -2
  21. data/lib/gcloud/pubsub.rb +4 -6
  22. data/lib/gcloud/pubsub/connection.rb +1 -12
  23. data/lib/gcloud/pubsub/project.rb +30 -36
  24. data/lib/gcloud/pubsub/subscription.rb +18 -26
  25. data/lib/gcloud/pubsub/topic.rb +16 -26
  26. data/lib/gcloud/resource_manager.rb +5 -6
  27. data/lib/gcloud/resource_manager/connection.rb +4 -4
  28. data/lib/gcloud/resource_manager/manager.rb +10 -14
  29. data/lib/gcloud/resource_manager/project.rb +3 -5
  30. data/lib/gcloud/search.rb +295 -0
  31. data/lib/gcloud/search/api_client.rb +144 -0
  32. data/lib/gcloud/search/connection.rb +146 -0
  33. data/lib/gcloud/search/credentials.rb +30 -0
  34. data/lib/gcloud/search/document.rb +301 -0
  35. data/lib/gcloud/search/document/list.rb +85 -0
  36. data/lib/gcloud/search/errors.rb +67 -0
  37. data/lib/gcloud/search/field_value.rb +164 -0
  38. data/lib/gcloud/search/field_values.rb +263 -0
  39. data/lib/gcloud/search/fields.rb +267 -0
  40. data/lib/gcloud/search/index.rb +613 -0
  41. data/lib/gcloud/search/index/list.rb +90 -0
  42. data/lib/gcloud/search/project.rb +197 -0
  43. data/lib/gcloud/search/result.rb +169 -0
  44. data/lib/gcloud/search/result/list.rb +95 -0
  45. data/lib/gcloud/storage.rb +4 -6
  46. data/lib/gcloud/storage/bucket.rb +55 -43
  47. data/lib/gcloud/storage/bucket/cors.rb +5 -7
  48. data/lib/gcloud/storage/file.rb +35 -30
  49. data/lib/gcloud/storage/file/acl.rb +12 -16
  50. data/lib/gcloud/storage/project.rb +56 -22
  51. data/lib/gcloud/version.rb +1 -1
  52. metadata +20 -3
@@ -0,0 +1,95 @@
1
+ #--
2
+ # Copyright 2015 Google Inc. All rights reserved.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ module Gcloud
17
+ module Search
18
+ class Result
19
+ ##
20
+ # Result::List is a special case Array with additional values.
21
+ class List < DelegateClass(::Array)
22
+ ##
23
+ # If not empty, indicates that there are more records that match
24
+ # the request and this value should be passed to continue.
25
+ attr_reader :token
26
+
27
+ ##
28
+ # The number of documents that match the query. It is greater than or
29
+ # equal to the number of documents actually returned. This is an
30
+ # approximation and not an exact count unless it is less than or equal
31
+ # to the Index#search +matched_count_accuracy+ option.
32
+ attr_reader :matched_count
33
+
34
+ ##
35
+ # Create a new Result::List with an array of Result instances.
36
+ def initialize arr = []
37
+ super arr
38
+ end
39
+
40
+ ##
41
+ # Whether there a next page of results.
42
+ def next?
43
+ !token.nil?
44
+ end
45
+
46
+ ##
47
+ # Retrieve the next page of results.
48
+ def next
49
+ return nil unless next?
50
+ ensure_index!
51
+ @index.search @query, @search_options.merge(token: token)
52
+ end
53
+
54
+ ##
55
+ # Retrieves all results by repeatedly loading pages until #next?
56
+ # returns false. Returns the list instance for method chaining.
57
+ def all
58
+ while next?
59
+ next_results = self.next
60
+ push(*next_results)
61
+ self.token = next_results.token
62
+ end
63
+ self
64
+ end
65
+
66
+ ##
67
+ # New Result::List from a response object.
68
+ def self.from_response resp, index, query, search_options #:nodoc:
69
+ data = JSON.parse resp.body
70
+ results = new(Array(data["results"]).map do |raw|
71
+ Result.from_hash raw
72
+ end)
73
+ results.instance_eval do
74
+ @token = data["results"].last["nextPageToken"]
75
+ @matched_count = data["matchedCount"]
76
+ @index = index
77
+ @query = query
78
+ @search_options = search_options
79
+ end
80
+ results
81
+ rescue JSON::ParserError
82
+ ApiError.from_response_status resp
83
+ end
84
+
85
+ protected
86
+
87
+ ##
88
+ # Raise an error unless an active connection is available.
89
+ def ensure_index!
90
+ fail "Must have active connection" unless @index
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -31,9 +31,7 @@ module Gcloud
31
31
  # +keyfile+::
32
32
  # Keyfile downloaded from Google Cloud. If file path the file must be
33
33
  # readable. (+String+ or +Hash+)
34
- # +options+::
35
- # An optional Hash for controlling additional behavior. (+Hash+)
36
- # <code>options[:scope]</code>::
34
+ # +scope+::
37
35
  # The OAuth 2.0 scopes controlling the set of resources and operations that
38
36
  # the connection can access. See {Using OAuth 2.0 to Access Google
39
37
  # APIs}[https://developers.google.com/identity/protocols/OAuth2]. (+String+
@@ -57,12 +55,12 @@ module Gcloud
57
55
  # bucket = storage.bucket "my-bucket"
58
56
  # file = bucket.file "path/to/my-file.ext"
59
57
  #
60
- def self.storage project = nil, keyfile = nil, options = {}
58
+ def self.storage project = nil, keyfile = nil, scope: nil
61
59
  project ||= Gcloud::Storage::Project.default_project
62
60
  if keyfile.nil?
63
- credentials = Gcloud::Storage::Credentials.default options
61
+ credentials = Gcloud::Storage::Credentials.default scope: scope
64
62
  else
65
- credentials = Gcloud::Storage::Credentials.new keyfile, options
63
+ credentials = Gcloud::Storage::Credentials.new keyfile, scope: scope
66
64
  end
67
65
  Gcloud::Storage::Project.new project, credentials
68
66
  end
@@ -304,9 +304,7 @@ module Gcloud
304
304
  #
305
305
  # === Parameters
306
306
  #
307
- # +options+::
308
- # An optional Hash for controlling additional behavior. (+Hash+)
309
- # <code>options[:retries]</code>::
307
+ # +retries+::
310
308
  # The number of times the API call should be retried.
311
309
  # Default is Gcloud::Backoff.retries. (+Integer+)
312
310
  #
@@ -336,8 +334,9 @@ module Gcloud
336
334
  # bucket = storage.bucket "my-bucket"
337
335
  # bucket.delete retries: 5
338
336
  #
339
- def delete options = {}
337
+ def delete retries: nil
340
338
  ensure_connection!
339
+ options = { retries: retries }
341
340
  resp = connection.delete_bucket name, options
342
341
  if resp.success?
343
342
  true
@@ -351,26 +350,22 @@ module Gcloud
351
350
  #
352
351
  # === Parameters
353
352
  #
354
- # +options+::
355
- # An optional Hash for controlling additional behavior. (+Hash+)
356
- # <code>options[:prefix]</code>::
353
+ # +prefix+::
357
354
  # Filter results to files whose names begin with this prefix.
358
355
  # (+String+)
359
- # <code>options[:token]</code>::
356
+ # +token+::
360
357
  # A previously-returned page token representing part of the larger set
361
358
  # of results to view. (+String+)
362
- # <code>options[:max]</code>::
359
+ # +max+::
363
360
  # Maximum number of items plus prefixes to return. As duplicate prefixes
364
361
  # are omitted, fewer total results may be returned than requested.
365
362
  # The default value of this parameter is 1,000 items. (+Integer+)
366
- # <code>options[:versions]</code>::
363
+ # +versions+::
367
364
  # If +true+, lists all versions of an object as distinct results.
368
365
  # The default is +false+. For more information, see
369
366
  # {Object Versioning
370
367
  # }[https://cloud.google.com/storage/docs/object-versioning].
371
368
  # (+Boolean+)
372
- # <code>options[:max]</code>::
373
- # Maximum number of buckets to return. (+Integer+)
374
369
  #
375
370
  # === Returns
376
371
  #
@@ -411,8 +406,9 @@ module Gcloud
411
406
  # tmp_files = bucket.files token: tmp_files.token
412
407
  # end
413
408
  #
414
- def files options = {}
409
+ def files prefix: nil, token: nil, max: nil, versions: nil
415
410
  ensure_connection!
411
+ options = { prefix: prefix, token: token, max: max, versions: versions }
416
412
  resp = connection.list_files name, options
417
413
  if resp.success?
418
414
  File::List.from_response resp, connection
@@ -429,6 +425,9 @@ module Gcloud
429
425
  #
430
426
  # +path+::
431
427
  # Name (path) of the file. (+String+)
428
+ # +generation+::
429
+ # When present, selects a specific revision of this object.
430
+ # Default is the latest version. (+Integer+)
432
431
  #
433
432
  # === Returns
434
433
  #
@@ -446,8 +445,9 @@ module Gcloud
446
445
  # file = bucket.file "path/to/my-file.ext"
447
446
  # puts file.name
448
447
  #
449
- def file path, options = {}
448
+ def file path, generation: nil
450
449
  ensure_connection!
450
+ options = { generation: generation }
451
451
  resp = connection.get_file name, path, options
452
452
  if resp.success?
453
453
  File.from_gapi resp.data, connection
@@ -467,9 +467,7 @@ module Gcloud
467
467
  # Path of the file on the filesystem to upload. (+String+)
468
468
  # +path+::
469
469
  # Path to store the file in Google Cloud Storage. (+String+)
470
- # +options+::
471
- # An optional Hash for controlling additional behavior. (+Hash+)
472
- # <code>options[:acl]</code>::
470
+ # +acl+::
473
471
  # A predefined set of access controls to apply to this file.
474
472
  # (+String+)
475
473
  #
@@ -486,40 +484,40 @@ module Gcloud
486
484
  # and project team members get access according to their roles.
487
485
  # * +public+, +public_read+, +publicRead+ - File owner gets OWNER
488
486
  # access, and allUsers get READER access.
489
- # <code>options[:cache_control]</code>::
487
+ # +cache_control+::
490
488
  # The {Cache-Control}[https://tools.ietf.org/html/rfc7234#section-5.2]
491
489
  # response header to be returned when the file is downloaded. (+String+)
492
- # <code>options[:content_disposition]</code>::
490
+ # +content_disposition+::
493
491
  # The {Content-Disposition}[https://tools.ietf.org/html/rfc6266]
494
492
  # response header to be returned when the file is downloaded. (+String+)
495
- # <code>options[:content_encoding]</code>::
493
+ # +content_encoding+::
496
494
  # The {Content-Encoding
497
495
  # }[https://tools.ietf.org/html/rfc7231#section-3.1.2.2] response header
498
496
  # to be returned when the file is downloaded. (+String+)
499
- # <code>options[:content_language]</code>::
497
+ # +content_language+::
500
498
  # The {Content-Language}[http://tools.ietf.org/html/bcp47] response
501
499
  # header to be returned when the file is downloaded. (+String+)
502
- # <code>options[:content_type]</code>::
500
+ # +content_type+::
503
501
  # The {Content-Type}[https://tools.ietf.org/html/rfc2616#section-14.17]
504
502
  # response header to be returned when the file is downloaded. (+String+)
505
- # <code>options[:chunk_size]</code>::
503
+ # +chunk_size+::
506
504
  # The number of bytes per chunk in a resumable upload. Must be divisible
507
505
  # by 256KB. If it is not divisible by 265KB then it will be lowered to
508
506
  # the nearest acceptable value. (+Integer+)
509
- # <code>options[:crc32c]</code>::
507
+ # +crc32c+::
510
508
  # The CRC32c checksum of the file data, as described in
511
509
  # {RFC 4960, Appendix B}[http://tools.ietf.org/html/rfc4960#appendix-B].
512
510
  # If provided, Cloud Storage will only create the file if the value
513
511
  # matches the value calculated by the service. See
514
512
  # {Validation}[https://cloud.google.com/storage/docs/hashes-etags]
515
513
  # for more information. (+String+)
516
- # <code>options[:md5]</code>::
514
+ # +md5+::
517
515
  # The MD5 hash of the file data. If provided, Cloud Storage will only
518
516
  # create the file if the value matches the value calculated by the
519
517
  # service. See
520
518
  # {Validation}[https://cloud.google.com/storage/docs/hashes-etags]
521
519
  # for more information. (+String+)
522
- # <code>options[:metadata]</code>::
520
+ # +metadata+::
523
521
  # A hash of custom, user-provided web-safe keys and arbitrary string
524
522
  # values that will returned with requests for the file as "x-goog-meta-"
525
523
  # response headers. (+Hash+)
@@ -551,7 +549,7 @@ module Gcloud
551
549
  # bucket.create_file "path/to/local.file.ext",
552
550
  # "destination/path/file.ext"
553
551
  #
554
- # A chunk_size value can be provided in the options to be used
552
+ # A +chunk_size+ value can be provided in the options to be used
555
553
  # in resumable uploads. This value is the number of bytes per
556
554
  # chunk and must be divisible by 256KB. If it is not divisible
557
555
  # by 265KB then it will be lowered to the nearest acceptable
@@ -568,17 +566,27 @@ module Gcloud
568
566
  # "destination/path/file.ext",
569
567
  # chunk_size: 1024*1024 # 1 MB chunk
570
568
  #
571
- # ==== A note about large uploads
569
+ # ==== Troubleshooting large uploads
572
570
  #
573
- # You may encounter a Broken pipe (Errno::EPIPE) error when attempting to
574
- # upload large files. To avoid this problem, add the
571
+ # You may encounter errors while attempting to upload large files. Below
572
+ # are a couple of common cases and their solutions.
573
+ #
574
+ # ===== Handling memory errors
575
+ #
576
+ # If you encounter a memory error such as +NoMemoryError+, try performing
577
+ # a resumable upload and setting the +chunk_size+ option to a value that
578
+ # works for your environment, as explained in the final example above.
579
+ #
580
+ # ===== Handling broken pipe errors
581
+ #
582
+ # To avoid broken pipe (+Errno::EPIPE+) errors when uploading, add the
575
583
  # {httpclient}[https://rubygems.org/gems/httpclient] gem to your project,
576
- # and the line (or lines) of configuration shown below. These lines must
577
- # execute after you require gcloud but before you make your first gcloud
578
- # connection. The first statement configures
579
- # {Faraday}[https://rubygems.org/gems/faraday] to use httpclient. The
580
- # second statement, which should only be added if you are using a version
581
- # of Faraday at or above 0.9.2, is a workaround for {this gzip
584
+ # and the configuration shown below. These lines must execute after you
585
+ # require gcloud but before you make your first gcloud connection. The
586
+ # first statement configures {Faraday}[https://rubygems.org/gems/faraday]
587
+ # to use httpclient. The second statement, which should only be added if
588
+ # you are using a version of Faraday at or above 0.9.2, is a workaround
589
+ # for {this gzip
582
590
  # issue}[https://github.com/GoogleCloudPlatform/gcloud-ruby/issues/367].
583
591
  #
584
592
  # require "gcloud"
@@ -594,18 +602,22 @@ module Gcloud
594
602
  # gcloud = Gcloud.new
595
603
  # storage = gcloud.storage
596
604
  #
597
- def create_file file, path = nil, options = {}
605
+ def create_file file, path = nil, acl: nil, cache_control: nil,
606
+ content_disposition: nil, content_encoding: nil,
607
+ content_language: nil, content_type: nil, chunk_size: nil,
608
+ crc32c: nil, md5: nil, metadata: nil
598
609
  ensure_connection!
610
+ options = { acl: File::Acl.predefined_rule_for(acl), md5: md5,
611
+ cache_control: cache_control, content_type: content_type,
612
+ content_disposition: content_disposition, crc32c: crc32c,
613
+ content_encoding: content_encoding, chunk_size: chunk_size,
614
+ content_language: content_language, metadata: metadata }
599
615
  ensure_file_exists! file
600
- options[:acl] = File::Acl.predefined_rule_for options[:acl]
601
616
  resumable = resumable_upload?(file)
602
617
  resp = @connection.upload_file resumable, name, file, path, options
603
618
 
604
- if resp.success?
605
- File.from_gapi resp.data, connection
606
- else
607
- fail ApiError.from_response(resp)
608
- end
619
+ return File.from_gapi(resp.data, connection) if resp.success?
620
+ fail ApiError.from_response(resp)
609
621
  end
610
622
  alias_method :upload_file, :create_file
611
623
  alias_method :new_file, :create_file
@@ -75,14 +75,12 @@ module Gcloud
75
75
  # The list of HTTP methods permitted in cross origin resource sharing
76
76
  # with the bucket. (GET, OPTIONS, POST, etc) Note: "*" is permitted in
77
77
  # the list of methods, and means "any method". (+String+ or +Array+)
78
- # +options+::
79
- # An optional Hash for controlling additional behavior. (+Hash+)
80
- # <code>options[:headers]</code>::
78
+ # +headers+::
81
79
  # The list of header field names to send in the
82
80
  # Access-Control-Allow-Headers header in the preflight response.
83
81
  # Indicates the custom request headers that may be used in the actual
84
82
  # request. (+String+ or +Array+)
85
- # <code>options[:max_age]</code>::
83
+ # +max_age+::
86
84
  # The value to send in the Access-Control-Max-Age header in the
87
85
  # preflight response. Indicates how many seconds the results of a
88
86
  # preflight request can be cached in a preflight result cache. The
@@ -102,10 +100,10 @@ module Gcloud
102
100
  # max_age: 300
103
101
  # end
104
102
  #
105
- def add_rule origin, methods, options = {}
103
+ def add_rule origin, methods, headers: nil, max_age: nil
106
104
  rule = { "origin" => Array(origin), "method" => Array(methods) }
107
- rule["responseHeader"] = Array(options[:headers]) || []
108
- rule["maxAgeSeconds"] = options[:max_age] || 1800
105
+ rule["responseHeader"] = Array(headers) || []
106
+ rule["maxAgeSeconds"] = max_age || 1800
109
107
  push rule
110
108
  end
111
109
  end
@@ -284,9 +284,7 @@ module Gcloud
284
284
  # +path+::
285
285
  # The path on the local file system to write the data to.
286
286
  # The path provided must be writable. (+String+)
287
- # +options+::
288
- # An optional Hash for controlling additional behavior. (+Hash+)
289
- # <code>options[:verify]</code>::
287
+ # +verify+::
290
288
  # The verification algoruthm used to ensure the downloaded file contents
291
289
  # are correct. Default is +:md5+. (+Symbol+)
292
290
  #
@@ -349,14 +347,14 @@ module Gcloud
349
347
  # file = bucket.file "path/to/my-file.ext"
350
348
  # file.download "path/to/downloaded/file.ext", verify: :none
351
349
  #
352
- def download path, options = {}
350
+ def download path, verify: :md5
353
351
  ensure_connection!
354
352
  resp = connection.download_file bucket, name
355
353
  if resp.success?
356
354
  ::File.open path, "wb+" do |f|
357
355
  f.write resp.body
358
356
  end
359
- verify_file! ::File.new(path), options
357
+ verify_file! ::File.new(path), verify
360
358
  else
361
359
  fail ApiError.from_response(resp)
362
360
  end
@@ -373,12 +371,7 @@ module Gcloud
373
371
  # +dest_path+::
374
372
  # If a bucket was provided in the first parameter, this contains the
375
373
  # path to copy the file to in the given bucket. (+String+)
376
- # +options+::
377
- # An optional Hash for controlling additional behavior. (+Hash+)
378
- # <code>options[:generation]</code>::
379
- # Select a specific revision of the file to copy. The default is the
380
- # latest version. (+Integer+)
381
- # <code>options[:acl]</code>::
374
+ # +acl+::
382
375
  # A predefined set of access controls to apply to new file.
383
376
  # (+String+)
384
377
  #
@@ -395,6 +388,9 @@ module Gcloud
395
388
  # and project team members get access according to their roles.
396
389
  # * +public+, +public_read+, +publicRead+ - File owner gets OWNER
397
390
  # access, and allUsers get READER access.
391
+ # +generation+::
392
+ # Select a specific revision of the file to copy. The default is the
393
+ # latest version. (+Integer+)
398
394
  #
399
395
  # === Returns
400
396
  #
@@ -432,8 +428,9 @@ module Gcloud
432
428
  # file.copy "copy/of/previous/generation/file.ext",
433
429
  # generation: 123456
434
430
  #
435
- def copy dest_bucket_or_path, dest_path = nil, options = {}
431
+ def copy dest_bucket_or_path, dest_path = nil, acl: nil, generation: nil
436
432
  ensure_connection!
433
+ options = { acl: acl, generation: generation }
437
434
  dest_bucket, dest_path, options = fix_copy_args dest_bucket_or_path,
438
435
  dest_path, options
439
436
 
@@ -485,9 +482,7 @@ module Gcloud
485
482
  #
486
483
  # === Parameters
487
484
  #
488
- # +options+::
489
- # An optional Hash for controlling additional behavior. (+Hash+)
490
- # <code>options[:protocol]</code>::
485
+ # +protocol+::
491
486
  # The protocol to use for the URL. Default is +HTTPS+. (+String+)
492
487
  #
493
488
  # === Examples
@@ -513,8 +508,7 @@ module Gcloud
513
508
  # file = bucket.file "avatars/heidi/400x400.png"
514
509
  # public_url = file.public_url protocol: "http"
515
510
  #
516
- def public_url options = {}
517
- protocol = options[:protocol] || :https
511
+ def public_url protocol: :https
518
512
  "#{protocol}://storage.googleapis.com/#{bucket}/#{name}"
519
513
  end
520
514
  alias_method :url, :public_url
@@ -537,25 +531,27 @@ module Gcloud
537
531
  #
538
532
  # === Parameters
539
533
  #
540
- # +options+::
541
- # An optional Hash for controlling additional behavior. (+Hash+)
542
- # <code>options[:method]</code>::
534
+ # +method+::
543
535
  # The HTTP verb to be used with the signed URL. Signed URLs can be used
544
536
  # with +GET+, +HEAD+, +PUT+, and +DELETE+ requests. Default is +GET+.
545
537
  # (+String+)
546
- # <code>options[:expires]</code>::
538
+ # +expires+::
547
539
  # The number of seconds until the URL expires. Default is 300/5 minutes.
548
540
  # (+Integer+)
549
- # <code>options[:content_type]</code>::
541
+ # +content_type+::
550
542
  # When provided, the client (browser) must send this value in the
551
543
  # HTTP header. e.g. +text/plain+ (+String+)
552
- # <code>options[:content_md5]</code>::
544
+ # +content_md5+::
553
545
  # The MD5 digest value in base64. If you provide this in the string, the
554
546
  # client (usually a browser) must provide this HTTP header with this
555
547
  # same value in its request. (+String+)
556
- # <code>options[:issuer]</code>::
548
+ # +issuer+::
557
549
  # Service Account's Client Email. (+String+)
558
- # <code>options[:signing_key]</code>::
550
+ # +client_email+::
551
+ # Service Account's Client Email. (+String+)
552
+ # +signing_key+::
553
+ # Service Account's Private Key. (+OpenSSL::PKey::RSA+ or +String+)
554
+ # +private_key+::
559
555
  # Service Account's Private Key. (+OpenSSL::PKey::RSA+ or +String+)
560
556
  #
561
557
  # === Examples
@@ -598,8 +594,14 @@ module Gcloud
598
594
  # shared_url = file.signed_url issuer: "service-account@gcloud.com",
599
595
  # signing_key: key
600
596
  #
601
- def signed_url options = {}
597
+ def signed_url method: nil, expires: nil, content_type: nil,
598
+ content_md5: nil, issuer: nil, client_email: nil,
599
+ signing_key: nil, private_key: nil
602
600
  ensure_connection!
601
+ options = { method: method, expires: expires,
602
+ content_type: content_type, content_md5: content_md5,
603
+ issuer: issuer, client_email: client_email,
604
+ signing_key: signing_key, private_key: private_key }
603
605
  signer = File::Signer.new self
604
606
  signer.signed_url options
605
607
  end
@@ -710,16 +712,19 @@ module Gcloud
710
712
 
711
713
  def fix_copy_args dest_bucket, dest_path, options = {}
712
714
  if dest_path.respond_to?(:to_hash) && options.empty?
713
- options, dest_path = dest_path, nil
715
+ options = dest_path
716
+ dest_path = nil
717
+ end
718
+ if dest_path.nil?
719
+ dest_path = dest_bucket
720
+ dest_bucket = bucket
714
721
  end
715
- dest_path, dest_bucket = dest_bucket, bucket if dest_path.nil?
716
722
  dest_bucket = dest_bucket.name if dest_bucket.respond_to? :name
717
723
  options[:acl] = File::Acl.predefined_rule_for options[:acl]
718
724
  [dest_bucket, dest_path, options]
719
725
  end
720
726
 
721
- def verify_file! file, options = {}
722
- verify = options[:verify] || :md5
727
+ def verify_file! file, verify = :md5
723
728
  verify_md5 = verify == :md5 || verify == :all
724
729
  verify_crc32c = verify == :crc32c || verify == :all
725
730
  Verifier.verify_md5! self, file if verify_md5