Giter VIP home page Giter VIP logo

google-cloud-ruby's Introduction

Google Cloud Ruby Clients

Idiomatic Ruby client libraries for Google Cloud Platform APIs.

This repository includes client libraries for Google Cloud Platform services, along with a selected set of Google services unrelated to the cloud platform.

What's here

Client library gems

Most directories each correspond to a client library RubyGem, including its code, tests, gemspec, and documentation. Some client libraries also include handwritten samples in the samples directory, and/or autogenerated samples in the snippets directory.

Most client libraries in this repository are automatically generated by the GAPIC Generator. A small number are written and maintained by hand. You can identify a generated client library by the presence of .OwlBot.yaml in the library directory. For the most part, do not try to edit generated libraries by hand, because changes will be overwritten by the code generator.

Other directories

A few directories include support files, including:

  • .github includes configuration for GitHub Actions and bots that help to maintain this repository.
  • .kokoro includes configuration for internal Google processes that help to maintain this repository.
  • .toys includes scripts for running CI, releases, and maintenance tasks.
  • acceptance and integration include shared fixtures for acceptance tests.
  • obsolete contains older libraries that are obsolete and no longer maintained.

GitHub facilities

Issues for client libraries hosted here can be filed in the issues tab. However, this is not an official support channel. If you have support questions, file a support request through the normal Google support channels, or post questions on a forum such as StackOverflow.

Pull requests are welcome. Please see the section below on contributing.

Some maintenance tasks can be run in the actions tab by authorized personnel.

Using the client libraries

These client library RubyGems each include classes and methods that can be used to make authenticated calls to specific Google APIs. Some libraries also include additional convenience code implementing common client-side workflows or best practices.

In general, you can expect to:

  1. Activate access to the API by creating a project on the Google Cloud Console, enabling billing if necessary, and enabling the API.

  2. Choose a library and install it, typically by adding it to your bundle. For example, here is how you might add a the Translation service client to your Gemfile:

    # Gemfile
    
    # ... previous libraries ...
    gem "google-cloud-translate", "~> 3.2"
  3. Instantiate a client object. This object represents an authenticated connection to the service. For example, here is how you might create a client for the translation service:

    require "google/cloud/translate"
    
    translation_client = Google::Cloud::Translate.translation_service

    Depending on your environment and authentication needs, you might need to provide credentials to the client object.

  4. Make API calls by invoking methods on the client. For example, here is how you might translate a phrase:

    result = translation_client.translate_text contents: ["Hello, world!"],
                                               mime_type: "text/plain",
                                               source_language_code: "en-US",
                                               target_language_code: "ja-JP",
                                               parent: "projects/my-project-name"
    puts result.translations.first.translated_text
    # => "こんにちは世界!"

Activating the API

To access a Google Cloud API, you will generally need to activate it in the cloud console. This typically involves three steps:

  1. If you have not created a Google Cloud Project, do so. Point your browser to the Google Cloud Console, sign up if needed, and create or choose a project. Make note of the project number (which is numeric) or project ID (which is usually three or more words separated by hyphens). Many services will require you to pass that information in when calling an API.

  2. For most services, you will need to provide billing information. If this is your first time using Google Cloud Platform, you may be eligible for a free trial.

  3. Enable the API you want to use. Click the "APIs & Services" tab in the left navigation, then click the "Enable APIs and Services" button near the top. Search for the API you want by name, and click "Enable". A few APIs may be enabled automatically for you, but most APIs need to be enabled explicitly.

Once you have a project set up and have enabled an API, you are ready to begin using a client library to call the API.

Choosing a client library

This repository contains two types of API client RubyGems: the main library for the API (e.g. the google-cloud-translate gem for the Translation service), and one ore more versioned libraries for different versions of the service (e.g. google-cloud-translate-v2 and google-cloud-translate-v3 for versions 2 and 3 of the service, respectively). Note that we're referring to different versions of the backend service, not of the client library gem.

In most cases, you should install the main library (the one without a service version in the name). This library will provide all the required code for making calls to the API. It may also provide additional convenience code implementing common client-side workflows or best practices. Often the main library will bring in one or more versioned libraries as dependencies, and the client and data type classes you will use may actually be defined in a versioned library, but installing the main library will ensure you have access to the best tools and interfaces for interacting with the service.

The versioned libraries are lower-level libraries that target a specific version of the service. You may choose to intall a versioned library directly, instead of or in addition to the main library, to handle advanced use cases that require lower level access.

Note: Many services may also provide client libraries with names beginning with google-apis-. Those clients are developed in a different repository, and utilize an older client technology that lacks some of the performance and ease of use benefits of the clients in the google-cloud-ruby repository. The older clients may cover some services for which a google-cloud-ruby client is not yet available, but for services that are covered, we generally recommend the clients in the google-cloud-ruby repository over the older ones.

Most client libraries have directories in this repository, or you can look up the name of the client library to use in the documentation for the service you are using. Install this library as a RubyGem, or add it to your Gemfile.

Authentication

Most API calls must be accompanied by authentication information proving that the caller has sufficient permissions to make the call.

These API client libraries provide several mechanisms for attaching credentials to API calls.

  • If your application runs on an Google Cloud Platform hosting environment such as Google Compute Engine, Google Container Engine, Google App Engine, Google Cloud Run, or Google Cloud Functions, the environment will provide "ambient" credentials which client libraries will recognize and use automatically. You can generally configure these credentials in the hosting environment, for example per-VM in Google Compute Engine.

  • You can also provide your own service account credentials by including a service account key file in your application's file system and setting the environment variable GOOGLE_APPLICATION_CREDENTIALS to the path to that file. Client libraries will read this environment variable if it is set.

  • Finally, you can override credentials in code by setting the credentials field in the client configuration. This can be set globally on the client class or provided when you construct a client object.

For more information, see the authentication documentation for the client library you are using, or the Cloud authentication documentation.

Supported Ruby Versions

These libraries are currently supported on Ruby 2.6 through Ruby 3.1. Older versions of Ruby may still work, but are unsupported and not recommended.

In general, Google provides official support for Ruby versions that are actively supported by Ruby Core--that is, Ruby versions that are either in normal maintenance or in security maintenance, and not end of life. See https://www.ruby-lang.org/en/downloads/branches/ for details about the Ruby support schedule.

Library Versioning

The libraries in this repository follow Semantic Versioning.

Libraries are released at one of two different support quality levels:

GA: Libraries defined at the GA (general availability) quality level, indicated by a gem version number greater than or equal to 1.0, are stable. The code surface will not change in backwards-incompatible ways unless absolutely necessary (e.g. because of critical security issues), or unless accompanying a semver-major version update (such as version 1.x to 2.x.) Issues and requests against GA libraries are addressed with the highest priority.

Preview: Libraries defined at a Preview quality level, indicated by a gem version number less than 1.0, are expected to be mostly stable and we're working towards their release candidate. However, these libraries may get backwards-incompatible updates from time to time. We will still address issues and requests with a high priority.

Note that the gem version is distinct from the service version. Some backend services have mulitple versions, for example versions v2 and v3 of the translation service. These are treated as separate services and will have separate versioned clients, e.g. the google-cloud-translate-v2 and google-cloud-translate-v3 gems. These gems will in turn have their own gem versions, tracking the development of the two services.

Contributing

Contributions to this repository are welcome. However, please note that many of the clients in this repository are automatically generated. The Ruby files in those clients will have a comment to that effect near the top; changes to those files will not be accepted as they will simply be overwritten by the code generator. If in doubt, please open an issue and ask the maintainers. See the CONTRIBUTING document for more information on how to get started.

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See Code of Conduct for more information.

License

This library is licensed under Apache 2.0. Full license text is available in LICENSE.

Support

Please report bugs at the project on Github.

If you have questions about how to use the clients or APIs, ask on Stack Overflow.

google-cloud-ruby's People

Contributors

bajajneha27 avatar blowmage avatar crwilcox avatar dazuma avatar diptanshumittal avatar dpebot avatar frankyn avatar gcf-owl-bot[bot] avatar geigerj avatar hengfengli avatar hxiong388 avatar irataxy avatar jbolinger avatar jiren avatar jmuk avatar landrito avatar munkhuushmgl avatar nivedhasenthil avatar quartzmo avatar release-please[bot] avatar renovate-bot avatar sandeeptuniki avatar shivgautam avatar silvolu avatar swcloud avatar theroyaltnetennba avatar tswast avatar viacheslav-rostovtsev avatar yoshi-automation avatar yoshi-code-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

google-cloud-ruby's Issues

core: design

Document the design of the Ruby gcloud library

Add support for specifying if a property is indexed

There is no support for specified if a property is indexed. Any user who uses gcloud-ruby with existing data will have all their indexing specifications reset when doing a put.

In gcloud-node this is exposed as an 'excludeFromIndexes' boolean property that get's translated to the opposite value for 'Indexed' (the current name for the property in the API). This is because 'Indexed' can be misleading regarding the effect of setting the property (discussion here)

datastore: transactions

A transaction is an operation or set of operations that is atomic—either all of the operations in the transaction occur, or none of them occur. An application can perform multiple operations and calculations in a single transaction.

Details at /datastore/docs/concepts/transactions

Generate docs on successful Travis-CI build

We want the docs in the gh-pages branch to be updated on a successful build of the master branch.

We are running the build for each commit against multiple versions of Ruby, and while there are hooks for a successful individual build, there is no hook yet for a total successful build. We don't want to generate the docs for each version of Ruby, just once for the commit. The solution needs to take this into account.

The implementation should use the GH_OAUTH_TOKEN, GH_OWNER, and GH_PROJECT_NAME environment variables for updating the gh-pages branch. The implementation should also commit the updated docs using "travis-ci" <[email protected]>.

We would prefer this is implemented as a rake task instead of a bash script.

Feedback requested for accessing property values

How should Datastore's Entity behave when accessing properties that have not yet been set?

entity = Gcloud::Datastore::Entity.new
entity["name"] = "John Jacob Jingleheimer Schmidt"
puts entity["name"] #=> John Jacob Jingleheimer Schmidt
puts entity["email"] #=> ???

The current behavior is to return nil. Another option is to raise an error.

IMO the behavior should be permissive. Consider the case of a projection query where entity records stored in Datastore have both name and email, but only name is projected in the query. In ActiveRecord the attributes that are not selected are set to nil.

query = Gcloud::Datastore::Query.new.kind("User").select("name")
entities = Gcloud::Datastore.connection.run query
entities.each do |entity|
  puts entity["email"]
end

Thoughts?

Get final review of Datastore API by GCD team from Google

Datastore stuff we probably need to have covered:

We should be able to...

  • get an entity (or set of entities) by key
  • run a GQL query
  • build a query using operations like .filter(), .order(), etc
  • iterate over items in a query (including multiple pages)
  • delete an entity (or set of entities)
  • update properties on an entity using ruby-ish semantics
  • save an entity (update)
  • perform an operation (or set of operations) inside a transaction using ruby-ish semantics
  • manually roll-back a transaction

We may have more to add...

Custom Error Classes

Add new Error classes that are thrown instead of raising a string. Users should be able to rescue a generic error (Gcloud::Error) or a specific error (Gcloud::Datastore::InvalidKeyfileError).

Document storage

I'd like to use this for uploading files to google cloud storage and notice there's some code hanging around for it but it's not documented in the README or the docs. Perhaps storage is not yet feature complete, so also wondering on ETA for it. Thanks! 👍

Improve Property Management

We need a better way to differentiate between removing an entity's property and setting that property to a NULL value. See #25 for previous discussion.

Handle NOT_FOUND responses

There are three API calls that a NOT_FOUND response is likely to occur:

  • Topic Get
  • Subscription Get
  • Subscription Create

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.