Configuration
Manage global and client-specific configuration for the monday_ruby gem.
Overview
The Monday::Configuration class controls how the gem connects to the monday.com API. You can set configuration globally for all clients or customize it per-client instance.
Configuration Options
All configuration options with their types, defaults, and descriptions:
| Option | Type | Default | Description |
|---|---|---|---|
token | String | nil | API authentication token (required for all requests) |
host | String | "https://api.monday.com/v2" | monday.com API endpoint URL |
version | String | "2023-07" | API version to use (format: YYYY-MM) |
open_timeout | Integer | 10 | Seconds to wait for connection to open |
read_timeout | Integer | 30 | Seconds to wait for response data |
Global Configuration
Configure once and use across all clients:
require "monday_ruby"
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN"]
config.version = "2024-10"
config.open_timeout = 15
config.read_timeout = 60
end
# All clients use global configuration
client = Monday::Client.new
response = client.boardsWhen to Use Global Configuration
Use global configuration when your application uses a single monday.com account. This is the most common scenario.
Accessing Global Config
Read global configuration values:
Monday.configure do |config|
config.token = "my_token"
config.version = "2024-10"
end
# Access global config
puts Monday.config.token # => "my_token"
puts Monday.config.version # => "2024-10"
puts Monday.config.host # => "https://api.monday.com/v2"Instance Configuration
Configure individual clients with different settings:
require "monday_ruby"
# Client A with token A
client_a = Monday::Client.new(
token: ENV["MONDAY_TOKEN_A"],
version: "2024-10"
)
# Client B with token B and longer timeouts
client_b = Monday::Client.new(
token: ENV["MONDAY_TOKEN_B"],
version: "2024-01",
read_timeout: 120
)
# Each client uses its own configuration
response_a = client_a.boards
response_b = client_b.boardsWhen to Use Instance Configuration
Use instance configuration for multi-tenant applications or when connecting to multiple monday.com accounts simultaneously.
Accessing Instance Config
Read instance-specific configuration:
client = Monday::Client.new(
token: "my_token",
version: "2024-10"
)
# Access client's config
puts client.config.token # => "my_token"
puts client.config.version # => "2024-10"Methods
initialize
Creates a new configuration instance with optional parameters.
config = Monday::Configuration.new(
token: "your_token",
version: "2024-10",
open_timeout: 15,
read_timeout: 60
)Parameters:
token(String, optional) - API authentication tokenhost(String, optional) - API endpoint URLversion(String, optional) - API versionopen_timeout(Integer, optional) - Connection timeout in secondsread_timeout(Integer, optional) - Response timeout in seconds
Raises:
ArgumentError- When invalid configuration keys are provided
Example:
# Valid configuration
config = Monday::Configuration.new(token: "abc123")
# Invalid configuration (raises ArgumentError)
config = Monday::Configuration.new(invalid_key: "value")
# => ArgumentError: Unknown arguments: [:invalid_key]reset
Resets all configuration values to their defaults.
Monday.configure do |config|
config.token = "my_token"
config.version = "2024-10"
end
Monday.config.reset
puts Monday.config.token # => nil
puts Monday.config.version # => "2023-07"Note: This method is typically used in test environments to ensure clean state between tests.
Attribute Accessors
All configuration fields have getter and setter methods:
config = Monday::Configuration.new
# Setters
config.token = "new_token"
config.version = "2024-10"
config.host = "https://custom.monday.com/v2"
config.open_timeout = 20
config.read_timeout = 90
# Getters
config.token # => "new_token"
config.version # => "2024-10"
config.host # => "https://custom.monday.com/v2"
config.open_timeout # => 20
config.read_timeout # => 90API Versions
The version parameter specifies which monday.com API version to use.
Available Versions
monday.com uses dated API versions in YYYY-MM format:
"2024-10"- October 2024 version"2024-01"- January 2024 version"2023-10"- October 2023 version"2023-07"- July 2023 version (default)
Setting API Version
Global:
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN"]
config.version = "2024-10"
endPer-Client:
client = Monday::Client.new(
token: ENV["MONDAY_TOKEN"],
version: "2024-10"
)Version Usage
The version is sent in the API-Version header with every request:
# Internally, requests include:
# Headers:
# Authorization: your_token
# API-Version: 2024-10Breaking Changes
API versions may introduce breaking changes. Test thoroughly before upgrading to a new version.
Finding Available Versions
See monday.com's API versioning documentation for the complete list of available versions and their changes.
Timeouts
Control how long the gem waits for API responses.
open_timeout
Maximum seconds to wait while establishing a connection to monday.com's API.
Default: 10 seconds
When to Increase:
- Slow network connections
- Connecting through proxies
- High-latency environments
Example:
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN"]
config.open_timeout = 20 # Wait up to 20 seconds to connect
endread_timeout
Maximum seconds to wait for the API to return a response after the connection is established.
Default: 30 seconds
When to Increase:
- Large data exports
- Complex queries with many boards/items
- Bulk operations
- Known slow endpoints
Example:
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN"]
config.read_timeout = 120 # Wait up to 2 minutes for response
endTimeout Behavior
When a timeout is exceeded, a timeout error is raised:
client = Monday::Client.new(
token: ENV["MONDAY_TOKEN"],
read_timeout: 5 # Very short timeout
)
begin
# Large query that takes more than 5 seconds
response = client.boards.query(
args: { limit: 1000 },
select: ["id", "name", "items { id name }"]
)
rescue Net::ReadTimeout => e
puts "Request timed out: #{e.message}"
# Retry with longer timeout or smaller query
endUsage Examples
Development Environment
# config/initializers/monday.rb (Rails)
# or at the top of your script
require "dotenv/load"
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN"]
config.version = "2024-10"
config.read_timeout = 60 # Longer timeout for complex queries
endProduction Environment
Using Rails Credentials:
# config/initializers/monday.rb
Monday.configure do |config|
config.token = Rails.application.credentials.monday[:token]
config.version = Rails.application.credentials.monday[:version] || "2024-10"
config.open_timeout = 15
config.read_timeout = 90
endUsing Environment Variables:
Monday.configure do |config|
config.token = ENV.fetch("MONDAY_TOKEN")
config.version = ENV.fetch("MONDAY_API_VERSION", "2024-10")
config.open_timeout = ENV.fetch("MONDAY_OPEN_TIMEOUT", 10).to_i
config.read_timeout = ENV.fetch("MONDAY_READ_TIMEOUT", 30).to_i
endMulti-Tenant Application
Handle multiple monday.com accounts:
class MondayService
def initialize(user)
@client = Monday::Client.new(
token: user.monday_token,
version: user.monday_api_version || "2024-10"
)
end
def fetch_boards
@client.boards.query(
select: ["id", "name", "workspace_id"]
)
end
end
# Usage
service = MondayService.new(current_user)
response = service.fetch_boardsTesting Environment
Reset configuration between tests:
# spec/spec_helper.rb or test/test_helper.rb
RSpec.configure do |config|
config.before(:each) do
Monday.config.reset
Monday.configure do |c|
c.token = "test_token"
c.version = "2024-10"
end
end
endCustom API Host
For testing or custom deployments:
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN"]
config.host = "https://staging.monday.com/v2" # Custom endpoint
config.version = "2024-10"
endCustom Host Usage
Changing the host is rarely needed. Only modify this if you're connecting to a custom monday.com deployment or testing environment.
Dynamic Configuration
Change configuration at runtime:
# Start with default config
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN_DEFAULT"]
end
client = Monday::Client.new
# Later, switch to different account
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN_PREMIUM"]
end
# New clients use updated config
premium_client = Monday::Client.newBest Practices
Store Tokens Securely
Never hardcode tokens in your source code:
# Bad - Token in code
Monday.configure do |config|
config.token = "eyJhbGc..." # Never do this!
end
# Good - Token from environment
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN"]
end
# Better - Validate token exists
Monday.configure do |config|
config.token = ENV.fetch("MONDAY_TOKEN") do
raise "MONDAY_TOKEN environment variable not set"
end
endUse Environment-Specific Configuration
Separate configuration by environment:
# config/initializers/monday.rb
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN"]
case Rails.env
when "development"
config.read_timeout = 120 # Longer timeout for debugging
when "test"
config.token = "test_token"
when "production"
config.open_timeout = 10
config.read_timeout = 60
config.version = "2024-10"
end
endValidate Configuration on Startup
Ensure configuration is valid before running:
def validate_configuration!
raise "MONDAY_TOKEN not configured" if Monday.config.token.nil?
client = Monday::Client.new
response = client.account.query(select: ["id"])
unless response.success?
raise "Invalid monday.com configuration: #{response.code}"
end
puts "monday.com configuration valid"
end
# Call during application startup
validate_configuration!Document Configuration Requirements
Add a .env.example file to your project:
# .env.example
# monday.com API Configuration
MONDAY_TOKEN=your_token_here
MONDAY_API_VERSION=2024-10
MONDAY_READ_TIMEOUT=60Use Defaults When Appropriate
Only override defaults when necessary:
# Minimal configuration (uses defaults for everything else)
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN"]
end
# Override only what you need
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN"]
config.read_timeout = 120 # Only change this
endConstants
DEFAULT_HOST
Default monday.com API endpoint:
Monday::Configuration::DEFAULT_HOST
# => "https://api.monday.com/v2"DEFAULT_TOKEN
Default token value (nil):
Monday::Configuration::DEFAULT_TOKEN
# => nilDEFAULT_VERSION
Default API version:
Monday::Configuration::DEFAULT_VERSION
# => "2023-07"DEFAULT_OPEN_TIMEOUT
Default connection timeout in seconds:
Monday::Configuration::DEFAULT_OPEN_TIMEOUT
# => 10DEFAULT_READ_TIMEOUT
Default read timeout in seconds:
Monday::Configuration::DEFAULT_READ_TIMEOUT
# => 30CONFIGURATION_FIELDS
Array of valid configuration field names:
Monday::Configuration::CONFIGURATION_FIELDS
# => [:token, :host, :version, :open_timeout, :read_timeout]Related Documentation
- Client - Client initialization and usage
- Authentication - Token management and security
- Installation - Initial setup
- Error Handling - Handling configuration errors