Leash SDK for Ruby
Ruby SDK for the Leash platform integrations API. Access Gmail, Google Calendar, Google Drive, and more through the Leash platform proxy.
Installation
Add to your Gemfile:
gem "leash-sdk"
Or install directly:
gem install leash-sdk
Quick Start
require "leash"
client = Leash::Integrations.new(auth_token: ENV["LEASH_AUTH_TOKEN"])
# Gmail
= client.gmail.(query: "is:unread", max_results: 10)
= client.gmail.("msg_id_123")
client.gmail.(to: "friend@example.com", subject: "Hello", body: "Hi there!")
labels = client.gmail.list_labels
# Google Calendar
calendars = client.calendar.list_calendars
events = client.calendar.list_events(
time_min: "2026-04-10T00:00:00Z",
time_max: "2026-04-17T00:00:00Z",
single_events: true,
order_by: "startTime"
)
client.calendar.create_event(
summary: "Team standup",
start: { "dateTime" => "2026-04-11T09:00:00-04:00" },
end_time: { "dateTime" => "2026-04-11T09:30:00-04:00" }
)
# Google Drive
files = client.drive.list_files
file = client.drive.get_file("file_id_123")
results = client.drive.search_files("quarterly report", max_results: 5)
Connection Management
# Check if a provider is connected
client.connected?("gmail") # => true/false
# Get all connections
client.connections # => [{ "providerId" => "gmail", "status" => "active", ... }]
# Get OAuth connect URL (for UI buttons)
url = client.connect_url("gmail", return_url: "https://myapp.com/settings")
Error Handling
begin
client.gmail.
rescue Leash::NotConnectedError => e
# Redirect user to connect: e.connect_url
puts "Please connect Gmail: #{e.connect_url}"
rescue Leash::TokenExpiredError => e
# Token needs refresh: e.connect_url
puts "Token expired, reconnect: #{e.connect_url}"
rescue Leash::Error => e
# General API error
puts "Error (#{e.code}): #{e.}"
end
Configuration
# Custom platform URL
client = Leash::Integrations.new(
auth_token: "your-token",
platform_url: "https://your-instance.leash.build"
)
API Reference
Leash::Integrations.new(auth_token:, platform_url: "https://leash.build")
Creates a new client instance.
Gmail (client.gmail)
| Method | Description |
|---|---|
list_messages(query:, max_results:, label_ids:, page_token:) |
List messages |
get_message(message_id, format:) |
Get a message by ID |
send_message(to:, subject:, body:, cc:, bcc:) |
Send an email |
search_messages(query, max_results:) |
Search messages |
list_labels |
List all labels |
Calendar (client.calendar)
| Method | Description |
|---|---|
list_calendars |
List all calendars |
list_events(calendar_id:, time_min:, time_max:, max_results:, single_events:, order_by:) |
List events |
create_event(summary:, start:, end_time:, calendar_id:, description:, location:, attendees:) |
Create an event |
get_event(event_id, calendar_id:) |
Get an event by ID |
Drive (client.drive)
| Method | Description |
|---|---|
list_files(query:, max_results:, folder_id:) |
List files |
get_file(file_id) |
Get file metadata |
search_files(query, max_results:) |
Search files |
Connections
| Method | Description |
|---|---|
connected?(provider_id) |
Check if provider is connected |
connections |
Get all connection statuses |
connect_url(provider_id, return_url:) |
Get OAuth connect URL |
Requirements
- Ruby >= 3.0
- No external dependencies (uses stdlib
net/http,json,uri)
License
MIT