File: cloud.rb

package info (click to toggle)
ruby-google-cloud-core 1.6.1-1.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 136 kB
  • sloc: ruby: 422; makefile: 3
file content (170 lines) | stat: -rw-r--r-- 6,000 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# Copyright 2015 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


require "google/cloud/config"
require "google/cloud/core/version"

##
# # Google Cloud
#
# The google-cloud library is the official library for interacting with Google
# Cloud Platform. Google Cloud Platform is a set of modular cloud-based services
# that allow you to create anything from simple websites to complex
# applications.
#
# The goal of google-cloud is to provide an API that is comfortable to
# Rubyists. Your authentication credentials are detected automatically in
# Google Cloud Platform environments such as Google Compute Engine, Google
# App Engine and Google Kubernetes Engine. In other environments you can
# configure authentication easily, either directly in your code or via
# environment variables. Read more about the options for connecting in the
# {file:AUTHENTICATION.md Authentication Guide}.
#
module Google
  module Cloud
    ##
    # Creates a new object for connecting to Google Cloud.
    #
    # For more information on connecting to Google Cloud see the
    # {file:AUTHENTICATION.md Authentication Guide}.
    #
    # @param [String] project_id Project identifier for the service you are
    #   connecting to.
    # @param [String, Hash, Google::Auth::Credentials] credentials The path to
    #   the keyfile as a String, the contents of the keyfile as a Hash, or a
    #   Google::Auth::Credentials object.
    # @param [Integer] retries Number of times to retry requests on server
    #   error. The default value is `3`. Optional.
    # @param [Integer] timeout Default timeout to use in requests. Optional.
    #
    # @return [Google::Cloud]
    #
    # @example
    #   require "google/cloud"
    #
    #   gcloud  = Google::Cloud.new
    #   datastore = gcloud.datastore
    #   pubsub  = gcloud.pubsub
    #   storage = gcloud.storage
    #
    def self.new project_id = nil, credentials = nil, retries: nil, timeout: nil
      gcloud = Object.new
      gcloud.instance_variable_set :@project, project_id
      gcloud.instance_variable_set :@keyfile, credentials
      gcloud.instance_variable_set :@retries, retries
      gcloud.instance_variable_set :@timeout, timeout
      gcloud.extend Google::Cloud
      gcloud
    end

    ##
    # Configure the default parameter for Google::Cloud. The values defined on
    # this top level will be shared across all Google::Cloud libraries, which
    # may also add fields to this object or add sub configuration options under
    # this object.
    #
    # Possible configuration parameters:
    #
    # * `project_id`: The Google Cloud Project ID. Automatically discovered
    #                 when running from GCP environments.
    # * `credentials`: The service account JSON file path. Automatically
    #                  discovered when running from GCP environments.
    # * `on_error`: A Proc to be run when an error is encountered during on a
    #               background thread. The Proc must take the error object as
    #               the single argument.
    #
    # @return [Google::Cloud::Config] The top-level configuration object for
    #     Google::Cloud libraries.
    #
    def self.configure
      @config ||= Config.create

      yield @config if block_given?

      @config
    end

    ##
    # Initialize toplevel configuration
    # @private
    #
    def self.init_configuration
      configure do |config|
        default_project = Google::Cloud::Config.deferred do
          ENV["GOOGLE_CLOUD_PROJECT"] || ENV["GCLOUD_PROJECT"]
        end
        default_creds = Google::Cloud::Config.deferred do
          Google::Cloud::Config.credentials_from_env \
            "GOOGLE_CLOUD_CREDENTIALS", "GOOGLE_CLOUD_CREDENTIALS_JSON",
            "GOOGLE_CLOUD_KEYFILE", "GOOGLE_CLOUD_KEYFILE_JSON",
            "GCLOUD_KEYFILE", "GCLOUD_KEYFILE_JSON"
        end

        config.add_field! :project_id, default_project,
                          match: String, allow_nil: true
        config.add_alias! :project, :project_id
        config.add_field! :credentials, default_creds, match: Object
        config.add_alias! :keyfile, :credentials
        config.add_field! :on_error, nil, match: Proc
      end
    end

    ##
    # Safely load all google-cloud-* gems.
    # @private
    #
    def self.auto_load_gems
      currently_loaded_files = loaded_files

      auto_load_files.each do |auto_load_file|
        auto_load_file = File.realpath auto_load_file
        next if currently_loaded_files.include? auto_load_file
        require auto_load_file
      end
    end

    ##
    # Find files that are currently loaded.
    # @private
    #
    def self.loaded_files
      files = Array(caller).map do |backtrace_line|
        until backtrace_line.split(":").size < 2 || File.file?(backtrace_line)
          backtrace_line = backtrace_line.split(":")[0..-2].join ":"
        end
        backtrace_line
      end
      files.uniq!
      files.select! { |file| File.file? file }
      files.map { |file| File.realpath file }
    end

    ##
    # Find all google-cloud-* files for available gems.
    # @private
    #
    def self.auto_load_files
      return Gem.find_latest_files "google-cloud-*.rb" if Gem.respond_to? :find_latest_files
      # Ruby 2.0 does not have Gem.find_latest_files
      Gem.find_files "google-cloud-*.rb"
    end
  end
end

# Set the default top-level configuration
Google::Cloud.init_configuration

# Auto-load all Google Cloud service gems.
Google::Cloud.auto_load_gems