This is a Ruby 1.9/2.0 library to read/write files/spreadsheets in Google Drive/Docs.

NOTE: This is NOT a library to create Google Drive App.

Incompatibility introduced in ver. 1.0.0

Ver. 1.0.0 is not 100% backward compatible with 0.3.x. Some methods have been removed. Especially, GoogleDrive.login has been removed, and you must use GoogleDrive.login_with_oauth instead, as in the example code below.

I recommend to switch to the new API. But if you somehow want to continue using the old API, you can keep using it by requiring “google_drive_v0” instead of “google_drive” and use GoogleDriveV0 class instead of GoogleDrive class. It should continue working at least until April 20, 2015 when Google stops support of Documents List API.

How to install

$ sudo gem install google_drive

How to use

First, follow “Create a client ID and client secret” in this page to get a client ID and client secret for OAuth.

Example to read/write files in Google Drive:

require "rubygems"
require "google/api_client"
require "google_drive"

# Authorizes with OAuth and gets an access token.
client =
auth = client.authorization
auth.client_id = "YOUR CLIENT ID"
auth.client_secret = "YOUR CLIENT SECRET"
auth.scope =
    " " +
auth.redirect_uri = "urn:ietf:wg:oauth:2.0:oob"
print("1. Open this page:\n%s\n\n" % auth.authorization_uri)
print("2. Enter the authorization code shown in the page: ")
auth.code = $stdin.gets.chomp
access_token = auth.access_token

# Creates a session.
session = GoogleDrive.(access_token)

# Gets list of remote files.
for file in session.files
  p file.title

# Uploads a local file.
session.upload_from_file("/path/to/hello.txt", "hello.txt", :convert => false)

# Downloads to a local file.
file = session.file_by_title("hello.txt")

# Updates content of the remote file.

Example to read/write spreadsheets:

require "rubygems"
require "google/api_client"
require "google_drive"

# Same as the code above to get access_token...

# Creates a session.
session = GoogleDrive.(access_token)

# First worksheet of
ws = session.spreadsheet_by_key("pz7XtlQC-PYx-jrVMJErTcg").worksheets[0]

# Gets content of A2 cell.
p ws[2, 1]  #==> "hoge"

# Changes content of cells.
# Changes are not sent to the server until you call
ws[2, 1] = "foo"
ws[2, 2] = "bar"

# Dumps all cells.
for row in
  for col in
    p ws[row, col]

# Yet another way to do so.
p ws.rows  #==> [["fuga", ""], ["foo", "bar]]

# Reloads the worksheet to get changes by other clients.

API document:

Source code

The license of this source is “New BSD Licence”

Supported environments

Ruby 1.9.x or later. Checked with Ruby 1.9.3 and 2.1.3.


Hiroshi Ichikawa -