gcloud 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/AUTHENTICATION.md +71 -0
- data/CHANGELOG.md +5 -0
- data/README.md +10 -15
- data/lib/gcloud.rb +30 -0
- data/lib/gcloud/backoff.rb +3 -0
- data/lib/gcloud/credentials.rb +47 -30
- data/lib/gcloud/datastore.rb +246 -15
- data/lib/gcloud/datastore/connection.rb +4 -2
- data/lib/gcloud/datastore/credentials.rb +3 -1
- data/lib/gcloud/datastore/dataset.rb +130 -25
- data/lib/gcloud/datastore/dataset/lookup_results.rb +1 -0
- data/lib/gcloud/datastore/dataset/query_results.rb +7 -5
- data/lib/gcloud/datastore/entity.rb +99 -17
- data/lib/gcloud/datastore/errors.rb +13 -2
- data/lib/gcloud/datastore/key.rb +133 -2
- data/lib/gcloud/datastore/properties.rb +6 -1
- data/lib/gcloud/datastore/proto.rb +2 -1
- data/lib/gcloud/datastore/query.rb +4 -4
- data/lib/gcloud/datastore/transaction.rb +3 -0
- data/lib/gcloud/storage.rb +280 -13
- data/lib/gcloud/storage/bucket.rb +248 -11
- data/lib/gcloud/storage/bucket/acl.rb +631 -4
- data/lib/gcloud/storage/bucket/list.rb +1 -0
- data/lib/gcloud/storage/connection.rb +1 -0
- data/lib/gcloud/storage/credentials.rb +3 -1
- data/lib/gcloud/storage/errors.rb +9 -1
- data/lib/gcloud/storage/file.rb +231 -6
- data/lib/gcloud/storage/file/acl.rb +365 -2
- data/lib/gcloud/storage/file/list.rb +1 -0
- data/lib/gcloud/storage/file/verifier.rb +1 -0
- data/lib/gcloud/storage/project.rb +119 -10
- data/lib/gcloud/version.rb +18 -3
- metadata +33 -80
- data/.gemtest +0 -0
- data/.rubocop.yml +0 -17
- data/Manifest.txt +0 -66
- data/Rakefile +0 -35
- data/gcloud.gemspec +0 -63
- data/rakelib/console.rake +0 -28
- data/rakelib/manifest.rake +0 -24
- data/rakelib/proto.rake +0 -17
- data/rakelib/rubocop.rake +0 -17
- data/rakelib/test.rake +0 -144
- data/test/gcloud/datastore/proto/test_cursor.rb +0 -36
- data/test/gcloud/datastore/proto/test_direction.rb +0 -60
- data/test/gcloud/datastore/proto/test_operator.rb +0 -76
- data/test/gcloud/datastore/proto/test_value.rb +0 -231
- data/test/gcloud/datastore/test_connection.rb +0 -93
- data/test/gcloud/datastore/test_credentials.rb +0 -38
- data/test/gcloud/datastore/test_dataset.rb +0 -413
- data/test/gcloud/datastore/test_entity.rb +0 -161
- data/test/gcloud/datastore/test_entity_exclude.rb +0 -225
- data/test/gcloud/datastore/test_key.rb +0 -189
- data/test/gcloud/datastore/test_query.rb +0 -271
- data/test/gcloud/datastore/test_transaction.rb +0 -121
- data/test/gcloud/storage/test_backoff.rb +0 -127
- data/test/gcloud/storage/test_bucket.rb +0 -270
- data/test/gcloud/storage/test_bucket_acl.rb +0 -253
- data/test/gcloud/storage/test_default_acl.rb +0 -256
- data/test/gcloud/storage/test_file.rb +0 -221
- data/test/gcloud/storage/test_file_acl.rb +0 -367
- data/test/gcloud/storage/test_project.rb +0 -180
- data/test/gcloud/storage/test_storage.rb +0 -29
- data/test/gcloud/storage/test_verifier.rb +0 -62
- data/test/gcloud/test_version.rb +0 -8
- data/test/helper.rb +0 -91
@@ -1,3 +1,4 @@
|
|
1
|
+
#--
|
1
2
|
# Copyright 2014 Google Inc. All rights reserved.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -17,16 +18,22 @@ require "gcloud"
|
|
17
18
|
module Gcloud
|
18
19
|
module Datastore
|
19
20
|
##
|
21
|
+
# = Datastore Error
|
22
|
+
#
|
20
23
|
# Base Datastore exception class.
|
21
24
|
class Error < Gcloud::Error
|
22
25
|
end
|
23
26
|
|
24
27
|
##
|
28
|
+
# = KeyfileError
|
29
|
+
#
|
25
30
|
# Raised when a keyfile is not correct.
|
26
31
|
class KeyfileError < Gcloud::Datastore::Error
|
27
32
|
end
|
28
33
|
|
29
34
|
##
|
35
|
+
# = ApiError
|
36
|
+
#
|
30
37
|
# Raised when an API call is not successful.
|
31
38
|
class ApiError < Gcloud::Datastore::Error
|
32
39
|
##
|
@@ -37,7 +44,7 @@ module Gcloud
|
|
37
44
|
# The response object of the failed HTTP request.
|
38
45
|
attr_reader :response
|
39
46
|
|
40
|
-
def initialize method, response = nil
|
47
|
+
def initialize method, response = nil #:nodoc:
|
41
48
|
super("API call to #{method} was not successful")
|
42
49
|
@method = method
|
43
50
|
@response = response
|
@@ -45,18 +52,22 @@ module Gcloud
|
|
45
52
|
end
|
46
53
|
|
47
54
|
##
|
55
|
+
# = PropertyError
|
56
|
+
#
|
48
57
|
# Raised when a property is not correct.
|
49
58
|
class PropertyError < Gcloud::Datastore::Error
|
50
59
|
end
|
51
60
|
|
52
61
|
##
|
62
|
+
# = TransactionError
|
63
|
+
#
|
53
64
|
# General error for Transaction problems.
|
54
65
|
class TransactionError < Gcloud::Datastore::Error
|
55
66
|
##
|
56
67
|
# An error that occurred within the transaction. (optional)
|
57
68
|
attr_reader :inner
|
58
69
|
|
59
|
-
def initialize message, inner = nil
|
70
|
+
def initialize message, inner = nil #:nodoc:
|
60
71
|
super(message)
|
61
72
|
@inner = inner
|
62
73
|
end
|
data/lib/gcloud/datastore/key.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
#--
|
1
2
|
# Copyright 2014 Google Inc. All rights reserved.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -17,7 +18,7 @@ require "gcloud/datastore/proto"
|
|
17
18
|
module Gcloud
|
18
19
|
module Datastore
|
19
20
|
##
|
20
|
-
#
|
21
|
+
# = Key
|
21
22
|
#
|
22
23
|
# Every Datastore record has an identifying key, which includes the record's
|
23
24
|
# entity kind and a unique identifier. The identifier may be either a key
|
@@ -28,14 +29,55 @@ module Gcloud
|
|
28
29
|
class Key
|
29
30
|
##
|
30
31
|
# The kind of the Key.
|
32
|
+
#
|
33
|
+
# === Returns
|
34
|
+
#
|
35
|
+
# +String+
|
36
|
+
#
|
37
|
+
# === Example
|
38
|
+
#
|
39
|
+
# key = Gcloud::Datastore::Key.new "User"
|
40
|
+
# key.kind #=> "User"
|
41
|
+
# key.kind = "Task"
|
42
|
+
#
|
31
43
|
attr_accessor :kind
|
32
44
|
|
33
45
|
##
|
34
46
|
# The dataset_id of the Key.
|
47
|
+
#
|
48
|
+
# === Returns
|
49
|
+
#
|
50
|
+
# +String+
|
51
|
+
#
|
52
|
+
# === Example
|
53
|
+
#
|
54
|
+
# require "glcoud/datastore"
|
55
|
+
#
|
56
|
+
# dataset = Gcloud.datastore "my-todo-project",
|
57
|
+
# "/path/to/keyfile.json"
|
58
|
+
#
|
59
|
+
# entity = dataset.find "User", "heidi"
|
60
|
+
# entity.key.dataset_id #=> "my-todo-project"
|
61
|
+
#
|
35
62
|
attr_accessor :dataset_id
|
36
63
|
|
37
64
|
##
|
38
65
|
# The namespace of the Key.
|
66
|
+
#
|
67
|
+
# === Returns
|
68
|
+
#
|
69
|
+
# +String+ or +nil+
|
70
|
+
#
|
71
|
+
# === Example
|
72
|
+
#
|
73
|
+
# require "glcoud/datastore"
|
74
|
+
#
|
75
|
+
# dataset = Gcloud.datastore "my-todo-project",
|
76
|
+
# "/path/to/keyfile.json"
|
77
|
+
#
|
78
|
+
# entity = dataset.find "User", "heidi"
|
79
|
+
# entity.key.namespace #=> "ns~todo-project"
|
80
|
+
#
|
39
81
|
attr_accessor :namespace
|
40
82
|
|
41
83
|
def initialize kind = nil, id_or_name = nil
|
@@ -50,6 +92,20 @@ module Gcloud
|
|
50
92
|
##
|
51
93
|
# Set the id of the Key.
|
52
94
|
# If a name is already present it will be removed.
|
95
|
+
#
|
96
|
+
# === Returns
|
97
|
+
#
|
98
|
+
# +Integer+ or +nil+
|
99
|
+
#
|
100
|
+
# === Example
|
101
|
+
#
|
102
|
+
# key = Gcloud::Datastore::Key.new "User", "heidi"
|
103
|
+
# key.id #=> nil
|
104
|
+
# key.name #=> "heidi"
|
105
|
+
# key.id = 654321
|
106
|
+
# key.id #=> 654321
|
107
|
+
# key.name #=> nil
|
108
|
+
#
|
53
109
|
def id= new_id #:nodoc:
|
54
110
|
@name = nil if new_id
|
55
111
|
@id = new_id
|
@@ -57,11 +113,35 @@ module Gcloud
|
|
57
113
|
|
58
114
|
##
|
59
115
|
# The id of the Key.
|
116
|
+
#
|
117
|
+
# === Returns
|
118
|
+
#
|
119
|
+
# +Integer+ or +nil+
|
120
|
+
#
|
121
|
+
# === Example
|
122
|
+
#
|
123
|
+
# key = Gcloud::Datastore::Key.new "User", 123456
|
124
|
+
# key.id #=> 123456
|
125
|
+
#
|
60
126
|
attr_reader :id
|
61
127
|
|
62
128
|
##
|
63
129
|
# Set the name of the Key.
|
64
130
|
# If an id is already present it will be removed.
|
131
|
+
#
|
132
|
+
# === Returns
|
133
|
+
#
|
134
|
+
# +String+ or +nil+
|
135
|
+
#
|
136
|
+
# === Example
|
137
|
+
#
|
138
|
+
# key = Gcloud::Datastore::Key.new "User", 123456
|
139
|
+
# key.id #=> 123456
|
140
|
+
# key.name #=> nil
|
141
|
+
# key.name = "heidi"
|
142
|
+
# key.id #=> nil
|
143
|
+
# key.name #=> "heidi"
|
144
|
+
#
|
65
145
|
def name= new_name #:nodoc:
|
66
146
|
@id = nil if new_name
|
67
147
|
@name = new_name
|
@@ -69,10 +149,30 @@ module Gcloud
|
|
69
149
|
|
70
150
|
##
|
71
151
|
# The name of the Key.
|
152
|
+
#
|
153
|
+
# === Returns
|
154
|
+
#
|
155
|
+
# +String+ or +nil+
|
156
|
+
#
|
157
|
+
# === Example
|
158
|
+
#
|
159
|
+
# key = Gcloud::Datastore::Key.new "User", "heidi"
|
160
|
+
# key.name #=> "heidi"
|
161
|
+
#
|
72
162
|
attr_reader :name
|
73
163
|
|
74
164
|
##
|
75
165
|
# Set the parent of the Key.
|
166
|
+
#
|
167
|
+
# === Returns
|
168
|
+
#
|
169
|
+
# +Key+ or +nil+
|
170
|
+
#
|
171
|
+
# === Example
|
172
|
+
#
|
173
|
+
# key = Gcloud::Datastore::Key.new "List", "todos"
|
174
|
+
# key.parent = Gcloud::Datastore::Key.new "User", "heidi"
|
175
|
+
#
|
76
176
|
def parent= new_parent #:nodoc:
|
77
177
|
# store key if given an entity
|
78
178
|
new_parent = new_parent.key if new_parent.respond_to? :key
|
@@ -81,6 +181,24 @@ module Gcloud
|
|
81
181
|
|
82
182
|
##
|
83
183
|
# The parent of the Key.
|
184
|
+
#
|
185
|
+
# === Returns
|
186
|
+
#
|
187
|
+
# +Key+ or +nil+
|
188
|
+
#
|
189
|
+
# === Example
|
190
|
+
#
|
191
|
+
# require "glcoud/datastore"
|
192
|
+
#
|
193
|
+
# dataset = Gcloud.datastore
|
194
|
+
#
|
195
|
+
# user = dataset.find "User", "heidi"
|
196
|
+
# query = Gcloud::Datastore::Query.new
|
197
|
+
# query.kind("List").
|
198
|
+
# ancestor(user.key)
|
199
|
+
# lists = dataset.run query
|
200
|
+
# lists.first.key.parent #=> Key("User", "heidi")
|
201
|
+
#
|
84
202
|
attr_reader :parent
|
85
203
|
|
86
204
|
##
|
@@ -88,7 +206,16 @@ module Gcloud
|
|
88
206
|
# Each inner array contains two values, the kind and the id or name.
|
89
207
|
# If neither an id or name exist then nil will be returned.
|
90
208
|
#
|
91
|
-
#
|
209
|
+
# === Returns
|
210
|
+
#
|
211
|
+
# Array of arrays
|
212
|
+
#
|
213
|
+
# === Example
|
214
|
+
#
|
215
|
+
# key = Gcloud::Datastore::Key.new "List", "todos"
|
216
|
+
# key.parent = Gcloud::Datastore::Key.new "User", "heidi"
|
217
|
+
# key.path #=> [["User", "heidi"], ["List", "todos"]]
|
218
|
+
#
|
92
219
|
def path
|
93
220
|
new_path = parent ? parent.path : []
|
94
221
|
new_path << [kind, (id || name)]
|
@@ -97,6 +224,8 @@ module Gcloud
|
|
97
224
|
##
|
98
225
|
# Determine if the key is complete.
|
99
226
|
# A complete key has either an id or a name.
|
227
|
+
#
|
228
|
+
# Inverse of #incomplete?
|
100
229
|
def complete?
|
101
230
|
!incomplete?
|
102
231
|
end
|
@@ -104,6 +233,8 @@ module Gcloud
|
|
104
233
|
##
|
105
234
|
# Determine if the key is incomplete.
|
106
235
|
# An incomplete key has neither an id nor a name.
|
236
|
+
#
|
237
|
+
# Inverse of #complete?
|
107
238
|
def incomplete?
|
108
239
|
kind.nil? || (id.nil? && (name.nil? || name.empty?))
|
109
240
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
#--
|
1
2
|
# Copyright 2015 Google Inc. All rights reserved.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -15,7 +16,11 @@
|
|
15
16
|
module Gcloud
|
16
17
|
module Datastore
|
17
18
|
##
|
18
|
-
# Properties
|
19
|
+
# = Properties
|
20
|
+
#
|
21
|
+
# Hash-like data structure for Datastore properties.
|
22
|
+
#
|
23
|
+
# See Entity#properties
|
19
24
|
class Properties
|
20
25
|
def initialize properties = {}
|
21
26
|
@hash = {}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
#--
|
1
2
|
# Copyright 2014 Google Inc. All rights reserved.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -241,7 +242,7 @@ module Gcloud
|
|
241
242
|
end
|
242
243
|
end
|
243
244
|
|
244
|
-
class Key
|
245
|
+
class Key #:nodoc:
|
245
246
|
def dup
|
246
247
|
proto_request_body = ""
|
247
248
|
self.encode proto_request_body
|
@@ -1,3 +1,4 @@
|
|
1
|
+
#--
|
1
2
|
# Copyright 2014 Google Inc. All rights reserved.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -19,7 +20,9 @@ require "gcloud/datastore/proto"
|
|
19
20
|
module Gcloud
|
20
21
|
module Datastore
|
21
22
|
##
|
22
|
-
# Query
|
23
|
+
# = Query
|
24
|
+
#
|
25
|
+
# Represents the search criteria against a Datastore.
|
23
26
|
#
|
24
27
|
# query = Gcloud::Datastore::Query.new
|
25
28
|
# query.kind("Task").
|
@@ -178,12 +181,9 @@ module Gcloud
|
|
178
181
|
self
|
179
182
|
end
|
180
183
|
|
181
|
-
# rubocop:disable Style/TrivialAccessors
|
182
184
|
def to_proto #:nodoc:
|
183
|
-
# Disabled rubocop because this implementation will most likely change.
|
184
185
|
@_query
|
185
186
|
end
|
186
|
-
# rubocop:enable Style/TrivialAccessors
|
187
187
|
end
|
188
188
|
end
|
189
189
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
#--
|
1
2
|
# Copyright 2014 Google Inc. All rights reserved.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -15,6 +16,8 @@
|
|
15
16
|
module Gcloud
|
16
17
|
module Datastore
|
17
18
|
##
|
19
|
+
# = Transaction
|
20
|
+
#
|
18
21
|
# Special Connection instance for running transactions.
|
19
22
|
#
|
20
23
|
# See Gcloud::Datastore::Dataset.transaction
|
data/lib/gcloud/storage.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
#--
|
1
2
|
# Copyright 2014 Google Inc. All rights reserved.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -15,26 +16,38 @@
|
|
15
16
|
require "gcloud"
|
16
17
|
require "gcloud/storage/project"
|
17
18
|
|
18
|
-
|
19
|
+
#--
|
19
20
|
# Google Cloud Storage
|
20
21
|
module Gcloud
|
21
22
|
##
|
22
|
-
#
|
23
|
+
# Creates a new object for connecting to the Storage service.
|
24
|
+
# Each call creates a new connection.
|
25
|
+
#
|
26
|
+
# === Parameters
|
27
|
+
#
|
28
|
+
# +project+::
|
29
|
+
# Project identifier for the Storage service you are connecting to.
|
30
|
+
# (+String+)
|
31
|
+
# +keyfile+::
|
32
|
+
# Keyfile downloaded from Google Cloud. If file path the file must be
|
33
|
+
# readable. (+String+ or +Hash+)
|
34
|
+
#
|
35
|
+
# === Returns
|
36
|
+
#
|
37
|
+
# Gcloud::Storage::Project
|
38
|
+
#
|
39
|
+
# === Example
|
40
|
+
#
|
41
|
+
# require "glcoud/storage"
|
23
42
|
#
|
24
43
|
# storage = Gcloud.storage "my-todo-project",
|
25
44
|
# "/path/to/keyfile.json"
|
45
|
+
#
|
26
46
|
# bucket = storage.find_bucket "my-bucket"
|
27
47
|
# file = bucket.find_file "path/to/my-file.ext"
|
28
48
|
#
|
29
|
-
|
30
|
-
|
31
|
-
# @param keyfile [String] the path to the keyfile you downloaded from
|
32
|
-
# Google Cloud. The file must readable.
|
33
|
-
# @return [Gcloud::Storage::Project] storage project.
|
34
|
-
#
|
35
|
-
# See Gcloud::Storage::Project
|
36
|
-
def self.storage project = ENV["STORAGE_PROJECT"],
|
37
|
-
keyfile = nil
|
49
|
+
def self.storage project = nil, keyfile = nil
|
50
|
+
project ||= Gcloud::Storage::Project.default_project
|
38
51
|
if keyfile.nil?
|
39
52
|
credentials = Gcloud::Storage::Credentials.default
|
40
53
|
else
|
@@ -44,14 +57,268 @@ module Gcloud
|
|
44
57
|
end
|
45
58
|
|
46
59
|
##
|
47
|
-
# Google Cloud Storage
|
60
|
+
# = Google Cloud Storage
|
61
|
+
#
|
62
|
+
# Google Cloud Storage is an Internet service to store data in Google's cloud.
|
63
|
+
# It allows world-wide storage and retrieval of any amount of data and at any
|
64
|
+
# time, taking advantage of Google's own reliable and fast networking
|
65
|
+
# infrastructure to perform data operations in a cost effective manner.
|
66
|
+
#
|
67
|
+
# Gcloud's goal is to provide a API that is familiar and comfortable to
|
68
|
+
# Rubyists. Authentication is handled by Gcloud.storage. You can provide the
|
69
|
+
# project and credential information to connect to the Storage service, or if
|
70
|
+
# you are running on Google Compute Engine this configuration is taken care
|
71
|
+
# of for you.
|
72
|
+
#
|
73
|
+
# require "glcoud/storage"
|
48
74
|
#
|
49
75
|
# storage = Gcloud.storage "my-todo-project",
|
50
76
|
# "/path/to/keyfile.json"
|
77
|
+
#
|
51
78
|
# bucket = storage.find_bucket "my-bucket"
|
52
79
|
# file = bucket.find_file "path/to/my-file.ext"
|
53
80
|
#
|
54
|
-
#
|
81
|
+
# You can learn more about various options for connection on the
|
82
|
+
# {Authentication Guide}[link:AUTHENTICATION.md].
|
83
|
+
#
|
84
|
+
# To learn more about Datastore, read the
|
85
|
+
# {Google Cloud Storage Overview
|
86
|
+
# }[https://cloud.google.com/storage/docs/overview].
|
87
|
+
#
|
88
|
+
# == Retrieving Buckets
|
89
|
+
#
|
90
|
+
# A Bucket is the container for your data. There is no limit on the number of
|
91
|
+
# buckets that you can create in a project. You can use buckets to organize
|
92
|
+
# and control access to your data. Each bucket has a unique name, which is how
|
93
|
+
# they are retrieved: (See Project#find_bucket)
|
94
|
+
#
|
95
|
+
# require "gcloud/storage"
|
96
|
+
#
|
97
|
+
# storage = Gcloud.storage
|
98
|
+
#
|
99
|
+
# bucket = storage.find_bucket "my-todo-app"
|
100
|
+
#
|
101
|
+
# You can also retrieve all buckets on a project: (See Project#buckets)
|
102
|
+
#
|
103
|
+
# require "gcloud/storage"
|
104
|
+
#
|
105
|
+
# storage = Gcloud.storage
|
106
|
+
#
|
107
|
+
# all_buckets = storage.buckets
|
108
|
+
#
|
109
|
+
# If you have a significant number of buckets, you may need to paginate
|
110
|
+
# through them: (See Bucket::List#token)
|
111
|
+
#
|
112
|
+
# require "gcloud/storage"
|
113
|
+
#
|
114
|
+
# storage = Gcloud.storage
|
115
|
+
#
|
116
|
+
# all_buckets = []
|
117
|
+
# tmp_buckets = storage.buckets
|
118
|
+
# while tmp_buckets.any? do
|
119
|
+
# tmp_buckets.each do |bucket|
|
120
|
+
# all_buckets << bucket
|
121
|
+
# end
|
122
|
+
# # break loop if no more buckets available
|
123
|
+
# break if tmp_buckets.token.nil?
|
124
|
+
# # get the next group of buckets
|
125
|
+
# tmp_buckets = storage.buckets token: tmp_buckets.token
|
126
|
+
# end
|
127
|
+
#
|
128
|
+
# == Creating a Bucket
|
129
|
+
#
|
130
|
+
# A unique name is all that is needed to create a new bucket:
|
131
|
+
# (See Project#create_bucket)
|
132
|
+
#
|
133
|
+
# require "gcloud/storage"
|
134
|
+
#
|
135
|
+
# storage = Gcloud.storage
|
136
|
+
#
|
137
|
+
# bucket = storage.create_bucket "my-todo-app-attachments"
|
138
|
+
#
|
139
|
+
# == Retrieving Files
|
140
|
+
#
|
141
|
+
# A File is an individual pieces of data that you store in Google Cloud
|
142
|
+
# Storage. Files contain the data stored as well as metadata describing the
|
143
|
+
# data. Files belong to a bucket and cannot be shared among buckets. There is
|
144
|
+
# no limit on the number of objects that you can create in a bucket.
|
145
|
+
#
|
146
|
+
# Files are retrieved by their name, which is the path of the file in the
|
147
|
+
# bucket: (See Bucket#find_file)
|
148
|
+
#
|
149
|
+
# require "gcloud/storage"
|
150
|
+
#
|
151
|
+
# storage = Gcloud.storage
|
152
|
+
#
|
153
|
+
# bucket = storage.find_bucket "my-todo-app"
|
154
|
+
# file = bucket.find_file "avatars/heidi/400x400.png"
|
155
|
+
#
|
156
|
+
# You can also retrieve all files in a bucket: (See Bucket#files)
|
157
|
+
#
|
158
|
+
# require "gcloud/storage"
|
159
|
+
#
|
160
|
+
# storage = Gcloud.storage
|
161
|
+
#
|
162
|
+
# bucket = storage.find_bucket "my-todo-app"
|
163
|
+
# all_files = bucket.files
|
164
|
+
#
|
165
|
+
# Or you can retrieve all files in a specified path:
|
166
|
+
#
|
167
|
+
# require "gcloud/storage"
|
168
|
+
#
|
169
|
+
# storage = Gcloud.storage
|
170
|
+
#
|
171
|
+
# bucket = storage.find_bucket "my-todo-app"
|
172
|
+
# avatar_files = bucket.files prefix: "avatars/"
|
173
|
+
#
|
174
|
+
# If you have a significant number of files, you may need to paginate through
|
175
|
+
# them: (See File::List#token)
|
176
|
+
#
|
177
|
+
# require "gcloud/storage"
|
178
|
+
#
|
179
|
+
# storage = Gcloud.storage
|
180
|
+
#
|
181
|
+
# bucket = storage.find_bucket "my-todo-app"
|
182
|
+
#
|
183
|
+
# all_files = []
|
184
|
+
# tmp_files = bucket.files
|
185
|
+
# while tmp_files.any? do
|
186
|
+
# tmp_files.each do |file|
|
187
|
+
# all_files << file
|
188
|
+
# end
|
189
|
+
# # break loop if no more files available
|
190
|
+
# break if tmp_files.token.nil?
|
191
|
+
# # get the next group of files
|
192
|
+
# tmp_files = bucket.files token: tmp_files.token
|
193
|
+
# end
|
194
|
+
#
|
195
|
+
# == Creating a File
|
196
|
+
#
|
197
|
+
# A new File can be uploaded by specifying the location of a file on the local
|
198
|
+
# file system, and the name/path that the file should be stored in the bucket.
|
199
|
+
# (See Bucket#create_file)
|
200
|
+
#
|
201
|
+
# require "gcloud/storage"
|
202
|
+
#
|
203
|
+
# storage = Gcloud.storage
|
204
|
+
#
|
205
|
+
# bucket = storage.find_bucket "my-todo-app"
|
206
|
+
# bucket.create_file "/var/todo-app/avatars/heidi/400x400.png",
|
207
|
+
# "avatars/heidi/400x400.png"
|
208
|
+
#
|
209
|
+
# == Downloading a File
|
210
|
+
#
|
211
|
+
# Files can be downloaded to the local file system. (See File#download)
|
212
|
+
#
|
213
|
+
# require "gcloud/storage"
|
214
|
+
#
|
215
|
+
# storage = Gcloud.storage
|
216
|
+
#
|
217
|
+
# bucket = storage.find_bucket "my-todo-app"
|
218
|
+
# file = bucket.find_file "avatars/heidi/400x400.png"
|
219
|
+
# file.download "/var/todo-app/avatars/heidi/400x400.png"
|
220
|
+
#
|
221
|
+
# == Using Signed URLs
|
222
|
+
#
|
223
|
+
# Access without authentication can be granted to a File for a specified
|
224
|
+
# period of time. This URL uses a cryptographic signature
|
225
|
+
# of your credentials to access the file. (See File#signed_url)
|
226
|
+
#
|
227
|
+
# require "gcloud/storage"
|
228
|
+
#
|
229
|
+
# storage = Gcloud.storage
|
230
|
+
#
|
231
|
+
# bucket = storage.find_bucket "my-todo-app"
|
232
|
+
# file = bucket.find_file "avatars/heidi/400x400.png"
|
233
|
+
# shared_url = file.signed_url method: "GET",
|
234
|
+
# expires: 300 # 5 minutes from now
|
235
|
+
#
|
236
|
+
# == Controlling Access to a Bucket
|
237
|
+
#
|
238
|
+
# Access to a bucket is controlled with Bucket#acl. A bucket has owners,
|
239
|
+
# writers, and readers. Permissions can be granted to an individual user's
|
240
|
+
# email address, a group's email address, as well as many predefined lists.
|
241
|
+
# See the
|
242
|
+
# {Access Control guide}[https://cloud.google.com/storage/docs/access-control]
|
243
|
+
# for more.
|
244
|
+
#
|
245
|
+
# Access to a bucket can be granted to a user by appending +"user-"+ to the
|
246
|
+
# email address:
|
247
|
+
#
|
248
|
+
# require "gcloud/storage"
|
249
|
+
#
|
250
|
+
# storage = Gcloud.storage
|
251
|
+
#
|
252
|
+
# bucket = storage.find_bucket "my-todo-app"
|
253
|
+
#
|
254
|
+
# email = "heidi@example.net"
|
255
|
+
# bucket.acl.add_reader "user-#{email}"
|
256
|
+
#
|
257
|
+
# Access to a bucket can be granted to a group by appending +"group-"+ to the
|
258
|
+
# email address:
|
259
|
+
#
|
260
|
+
# require "gcloud/storage"
|
261
|
+
#
|
262
|
+
# storage = Gcloud.storage
|
263
|
+
#
|
264
|
+
# bucket = storage.find_bucket "my-todo-app"
|
265
|
+
#
|
266
|
+
# email = "authors@example.net"
|
267
|
+
# bucket.acl.add_reader "group-#{email}"
|
268
|
+
#
|
269
|
+
# Access to a bucket can also be granted to a predefined list of permissions:
|
270
|
+
#
|
271
|
+
# require "gcloud/storage"
|
272
|
+
#
|
273
|
+
# storage = Gcloud.storage
|
274
|
+
#
|
275
|
+
# bucket = storage.find_bucket "my-todo-app"
|
276
|
+
#
|
277
|
+
# bucket.acl.public!
|
278
|
+
#
|
279
|
+
# == Controlling Access to a File
|
280
|
+
#
|
281
|
+
# Access to a file is controlled in two ways, either by the setting the
|
282
|
+
# default permissions to all files in a bucket with Bucket#default_acl, or by
|
283
|
+
# setting permissions to an individual file with File#acl.
|
284
|
+
#
|
285
|
+
# Access to a file can be granted to a user by appending +"user-"+ to the
|
286
|
+
# email address:
|
287
|
+
#
|
288
|
+
# require "gcloud/storage"
|
289
|
+
#
|
290
|
+
# storage = Gcloud.storage
|
291
|
+
#
|
292
|
+
# bucket = storage.find_bucket "my-todo-app"
|
293
|
+
# file = bucket.find_file "avatars/heidi/400x400.png"
|
294
|
+
#
|
295
|
+
# email = "heidi@example.net"
|
296
|
+
# file.acl.add_reader "user-#{email}"
|
297
|
+
#
|
298
|
+
# Access to a file can be granted to a group by appending +"group-"+ to the
|
299
|
+
# email address:
|
300
|
+
#
|
301
|
+
# require "gcloud/storage"
|
302
|
+
#
|
303
|
+
# storage = Gcloud.storage
|
304
|
+
#
|
305
|
+
# bucket = storage.find_bucket "my-todo-app"
|
306
|
+
# file = bucket.find_file "avatars/heidi/400x400.png"
|
307
|
+
#
|
308
|
+
# email = "authors@example.net"
|
309
|
+
# file.acl.add_reader "group-#{email}"
|
310
|
+
#
|
311
|
+
# Access to a file can also be granted to a predefined list of permissions:
|
312
|
+
#
|
313
|
+
# require "gcloud/storage"
|
314
|
+
#
|
315
|
+
# storage = Gcloud.storage
|
316
|
+
#
|
317
|
+
# bucket = storage.find_bucket "my-todo-app"
|
318
|
+
# file = bucket.find_file "avatars/heidi/400x400.png"
|
319
|
+
#
|
320
|
+
# file.acl.public!
|
321
|
+
#
|
55
322
|
module Storage
|
56
323
|
##
|
57
324
|
# Retrieve resumable threshold.
|