Class: Gcloud::Storage::Project

Inherits:
Object
  • Object
show all
Defined in:
lib/gcloud/storage/project.rb

Overview

Project

Represents the project that storage buckets and files belong to. All data in Google Cloud Storage belongs inside a project. A project consists of a set of users, a set of APIs, billing, authentication, and monitoring settings for those APIs.

Gcloud::Storage::Project is the main object for interacting with Google Storage. Gcloud::Storage::Bucket objects are created, read, updated, and deleted by Gcloud::Storage::Project.

require "gcloud"

gcloud = Gcloud.new
storage = gcloud.storage

bucket = storage.bucket "my-bucket"
file = bucket.file "path/to/my-file.ext"

See Gcloud#storage

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(project, credentials) ⇒ Project

Creates a new Project instance.

See Gcloud#storage



56
57
58
59
60
# File 'lib/gcloud/storage/project.rb', line 56

def initialize project, credentials #:nodoc:
  project = project.to_s # Always cast to a string
  fail ArgumentError, "project is missing" if project.empty?
  @connection = Connection.new project, credentials
end

Instance Attribute Details

#connectionObject

The Connection object.



50
51
52
# File 'lib/gcloud/storage/project.rb', line 50

def connection
  @connection
end

Class Method Details

.default_projectObject

Default project.



81
82
83
84
85
86
# File 'lib/gcloud/storage/project.rb', line 81

def self.default_project #:nodoc:
  ENV["STORAGE_PROJECT"] ||
    ENV["GCLOUD_PROJECT"] ||
    ENV["GOOGLE_CLOUD_PROJECT"] ||
    Gcloud::GCE.project_id
end

Instance Method Details

#bucket(bucket_name) ⇒ Object Also known as: find_bucket

Retrieves bucket by name.

Parameters

bucket_name

Name of a bucket. (String)

Returns

Gcloud::Storage::Bucket or nil if bucket does not exist

Example

require "gcloud"

gcloud = Gcloud.new
storage = gcloud.storage

bucket = storage.bucket "my-bucket"
puts bucket.name


181
182
183
184
185
186
187
188
189
# File 'lib/gcloud/storage/project.rb', line 181

def bucket bucket_name
  resp = connection.get_bucket bucket_name
  if resp.success?
    Bucket.from_gapi resp.data, connection
  else
    return nil if resp.data["error"]["code"] == 404
    fail ApiError.from_response(resp)
  end
end

#buckets(prefix: nil, token: nil, max: nil) ⇒ Object Also known as: find_buckets

Retrieves a list of buckets for the given project.

Parameters

prefix

Filter results to buckets whose names begin with this prefix. (String)

token

A previously-returned page token representing part of the larger set of results to view. (String)

max

Maximum number of buckets to return. (Integer)

Returns

Array of Gcloud::Storage::Bucket (See Gcloud::Storage::Bucket::List)

Examples

require "gcloud"

gcloud = Gcloud.new
storage = gcloud.storage

buckets = storage.buckets
buckets.each do |bucket|
  puts bucket.name
end

You can also retrieve all buckets whose names begin with a prefix using the :prefix option:

require "gcloud"

gcloud = Gcloud.new
storage = gcloud.storage

user_buckets = storage.buckets prefix: "user-"

If you have a significant number of buckets, you may need to paginate through them: (See Bucket::List#token)

require "gcloud"

gcloud = Gcloud.new
storage = gcloud.storage

all_buckets = []
tmp_buckets = storage.buckets
while tmp_buckets.any? do
  tmp_buckets.each do |bucket|
    all_buckets << bucket
  end
  # break loop if no more buckets available
  break if tmp_buckets.token.nil?
  # get the next group of buckets
  tmp_buckets = storage.buckets token: tmp_buckets.token
end


148
149
150
151
152
153
154
155
156
# File 'lib/gcloud/storage/project.rb', line 148

def buckets prefix: nil, token: nil, max: nil
  options = { prefix: prefix, token: token, max: max }
  resp = connection.list_buckets options
  if resp.success?
    Bucket::List.from_response resp, connection
  else
    fail ApiError.from_response(resp)
  end
end

#create_bucket(bucket_name, acl: nil, default_acl: nil, cors: nil, location: nil, logging_bucket: nil, logging_prefix: nil, retries: nil, storage_class: nil, versioning: nil, website_main: nil, website_404: nil) ⇒ Object

Creates a new bucket with optional attributes. Also accepts a block for defining the CORS configuration for a static website served from the bucket. See Bucket::Cors for details. For more information about configuring buckets as static websites, see How to Host a Static Website . For more information about CORS, see Cross-Origin Resource Sharing (CORS).

Parameters

bucket_name

Name of a bucket. (String)

acl

Apply a predefined set of access controls to this bucket. (String)

Acceptable values are:

  • auth, auth_read, authenticated, authenticated_read, authenticatedRead - Project team owners get OWNER access, and allAuthenticatedUsers get READER access.

  • private - Project team owners get OWNER access.

  • project_private, projectPrivate - Project team members get access according to their roles.

  • public, public_read, publicRead - Project team owners get OWNER access, and allUsers get READER access.

  • public_write, publicReadWrite - Project team owners get OWNER access, and allUsers get WRITER access.

default_acl

Apply a predefined set of default object access controls to this bucket. (String)

Acceptable values are:

  • auth, auth_read, authenticated, authenticated_read, authenticatedRead - File owner gets OWNER access, and allAuthenticatedUsers get READER access.

  • owner_full, bucketOwnerFullControl - File owner gets OWNER access, and project team owners get OWNER access.

  • owner_read, bucketOwnerRead - File owner gets OWNER access, and project team owners get READER access.

  • private - File owner gets OWNER access.

  • project_private, projectPrivate - File owner gets OWNER access, and project team members get access according to their roles.

  • public, public_read, publicRead - File owner gets OWNER access, and allUsers get READER access.

cors

The CORS rules for the bucket. Accepts an array of hashes containing the attributes specified for the resource description of cors.

location

The location of the bucket. Object data for objects in the bucket resides in physical storage within this region. Possible values include ASIA, EU, and US.(See the developer’s guide for the authoritative list. The default value is US. (String)

logging_bucket

The destination bucket for the bucket’s logs. For more information, see Access Logs. (String)

logging_prefix

The prefix used to create log object names for the bucket. It can be at most 900 characters and must be a valid object name . By default, the object prefix is the name of the bucket for which the logs are enabled. For more information, see Access Logs. (String)

retries

The number of times the API call should be retried. Default is Gcloud::Backoff.retries. (Integer)

storage_class

Defines how objects in the bucket are stored and determines the SLA and the cost of storage. Values include :standard, :nearline, and :dra (Durable Reduced Availability), as well as the strings returned by Bucket#storage_class. For more information, see Storage Classes. The default value is :standard. (Symbol or String)

versioning

Whether Object Versioning is to be enabled for the bucket. The default value is false. (Boolean)

website_main

The index page returned from a static website served from the bucket when a site visitor requests the top level directory. For more information, see How to Host a Static Website .

website_404

The page returned from a static website served from the bucket when a site visitor requests a resource that does not exist. For more information, see How to Host a Static Website .

Returns

Gcloud::Storage::Bucket

Examples

require "gcloud"

gcloud = Gcloud.new
storage = gcloud.storage

bucket = storage.create_bucket "my-bucket"

The API call to create the bucket may be retried under certain conditions. See Gcloud::Backoff to control this behavior, or specify the wanted behavior in the call with the :retries: option:

require "gcloud"

gcloud = Gcloud.new
storage = gcloud.storage

bucket = storage.create_bucket "my-bucket", retries: 5

You can pass website settings for the bucket, including a block that defines CORS rule. See Bucket::Cors for details.

require "gcloud"

gcloud = Gcloud.new
storage = gcloud.storage

options = {
  website_main: "index.html"
  website_404: "not_found.html"
}
bucket = storage.create_bucket "my-bucket", options do |c|
  c.add_rule ["http://example.org", "https://example.org"],
             "*",
             response_headers: ["X-My-Custom-Header"],
             max_age: 300
end


329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
# File 'lib/gcloud/storage/project.rb', line 329

def create_bucket bucket_name, acl: nil, default_acl: nil, cors: nil,
                  location: nil, logging_bucket: nil, logging_prefix: nil,
                  retries: nil, storage_class: nil, versioning: nil,
                  website_main: nil, website_404: nil
  opts = { acl: acl_rule(acl), default_acl: acl_rule(default_acl),
           cors: cors, location: location, logging_bucket: logging_bucket,
           logging_prefix: logging_prefix, retries: retries,
           storage_class: storage_class, versioning: versioning,
           website_main: website_main, website_404: website_404 }
  if block_given?
    cors_builder = Bucket::Cors.new
    yield cors_builder
    opts[:cors] = cors_builder if cors_builder.changed?
  end
  insert_bucket bucket_name, opts
end

#projectObject

The Storage project connected to.

Example

require "gcloud"

gcloud = Gcloud.new "my-todo-project",
                    "/path/to/keyfile.json"
storage = gcloud.storage

storage.project #=> "my-todo-project"


75
76
77
# File 'lib/gcloud/storage/project.rb', line 75

def project
  connection.project
end