In today’s busy world, it’s critical to have an organized schedule and that means managing calendars and events. Thanks to Nylas’ Ruby SDK, this becomes a simple and productive task. We can manage calendar events with ease using Ruby.
Every project is going to need a .env file, and its content is going to be the same unless indicated.
V3_TOKEN_API=<YOUR_TOKEN_API> CALENDAR_ID=<YOUR_CALENDAR_ID> GRANT_ID=<YOUR_GRANT_ID>
Let’s start by reading a list of calendars, looking at the calendar id, name, and description. We are going to create a file called ReadCalendarsV3.rb:
# Load gems require 'dotenv/load' require 'nylas' # Initialize Nylas client nylas = Nylas::Client.new( api_key: ENV["V3_TOKEN"] ) # Get a list of calendars calendars, _request_ids = nylas.calendars.list(identifier: ENV["GRANT_ID"], query_params: {}) # Print the Id, Name and Description calendars.each {|calendar| puts("Id: #{calendar[:id]} | " \ "Name: #{calendar[:name]} | " \ "Description: #{calendar[:description]}") }
We can run it by calling it from our terminal window:
$ ruby ReadCalendarsV3.rb
Now, there’s a new feature included in V3, which is the ability to get calendar colours:
To showcase this functionality, we’re going to use the Ruby 2D gem:
$ gem install ruby2d
And we’re going to create a new script named ReadCalendarColorsV3.rb:
# Load gems require 'dotenv/load' require 'nylas' require 'ruby2d' # Initialize Nylas client nylas = Nylas::Client.new( api_key: ENV["V3_TOKEN"] ) # Define the window's width and height set width: 1500 set height: 300 # Global variable to increase the y position of the window y = 10 # Call a list of calendars calendars, _request_ids = nylas.calendars.list(identifier: ENV["GRANT_ID"], query_params: {}) # Print the Id, Name and Description calendars.each {|calendar| Text.new("Id: #{calendar[:id]} | " \ "Name: #{calendar[:name]} | " \ "Description: #{calendar[:description]}", x: 0, y: y, color: calendar[:hex_color]) # Add y to separate each line y = y + 25 } # Display the window show
We can run it by calling it from our terminal window:
$ ruby ReadCalendarsColorV3.rb
Sometimes, we need to create a new calendar to keep events separated. Let’s create a new file called CreateCalendarV3.rb:
# Load gems require 'dotenv/load' require 'nylas' # Initialize Nylas client nylas = Nylas::Client.new( api_key: ENV["V3_TOKEN"] ) # Body parameters request_body = { "name": "My New Calendar", "description": "Description of my new calendar", "location": "Location description", "timezone": "America/Toronto" } # Create new calendar calendars, _request_ids = nylas.calendars.create(identifier: ENV["GRANT_ID"], query_params: {}, request_body: request_body) # Print calendar information puts calendars
We can run it by calling it from our terminal window:
$ ruby CreateCalendarV3.rb
We just created a calendar but realized we did something wrong or maybe we don’t like the assigned colour. Let’s create a file called UpdateCalendarV3.rb:
# Load gems require 'dotenv/load' require 'nylas' # Initialize Nylas client nylas = Nylas::Client.new( api_key: ENV["V3_TOKEN"] ) # Body parameters request_body = { "name": "My New Calendar", "description": "Description of my new calendar", "location": "Location description", "timezone": "America/Toronto", "hex_color": "#039BE5" } # Create new calendar calendars, _request_ids = nylas.calendars.update(identifier: ENV["GRANT_ID"], object_id: "<CALENDARD_ID>", query_params: {}, request_body: request_body) # Print calendar information puts calendars
We can run it by calling it from our terminal window:
$ ruby UpdateCalendarV3.rb
Just like we can create and update calendars, we can delete them. So, let’s do that. Create a file called DeleteCalendarV3.rb:
# Load gems require 'dotenv/load' require 'nylas' # Initialize Nylas client nylas = Nylas::Client.new( api_key: ENV["V3_TOKEN"], api_uri: ENV["V3_HOST"] ) # Create new calendar result, _request_ids = nylas.calendars.destroy(identifier: ENV["GRANT_ID"], object_id: "<CALENDAR_ID>", query_params: {}) # Print result information puts result
We can run it by calling it from our terminal window:
$ ruby DeleteCalendarV3.rb
Before jumping into events, let’s take a look at an important calendar component. Getting available spots would help us if we were developing a schedule application or if we would want to let our users know when we are available for them.
Let’s create a file named GetAvailabilityV3.rb:
# Load gems require 'dotenv/load' require 'nylas' require 'date' # Initialize Nylas client nylas = Nylas::Client.new( api_key: ENV["V3_TOKEN"] ) # Get today’s date today = Date.today # When do we start and end searching for availability start_time = Time.local(today.year, today.month, today.day, 8, 0,0).strftime("%s").to_i end_time = Time.local(today.year, today.month, today.day, 17, 0,0).strftime("%s").to_i # Body of our request request_body = { "participants": [ { "email": ENV["GRANT_ID"], "calendar_ids": [ ENV["CALENDAR_ID"] ], }, ], "start_time": start_time, "end_time": end_time, "duration_minutes": 60, } # Call the get_availability endpoint available, _request_ids = nylas.calendars.get_availability(request_body: request_body) # Display available spots available[:time_slots].each {|slots| puts "From: #{Time.at(slots[:start_time]).to_datetime.strftime("%H:%M:%S")}" \ " To: #{Time.at(slots[:end_time]).to_datetime.strftime("%H:%M:%S")}" }
We can run it by calling it from our terminal window:
$ ruby GetAvailabilityV3.rb
Working with calendars is important, but working with events is mandatory. We might create one or two calendars, but when it comes to events, we create and receive a lot of them during the week. So it’s important to be able to manage them accordingly.
We’re going to read the events from our main calendar. Let’s create a file named ReadEventsV3.rb:
# Load gems require 'dotenv/load' require 'nylas' #require 'date' # Initialize Nylas client nylas = Nylas::Client.new( api_key: ENV["V3_TOKEN"] ) # Get today’s date today = Date.today # Query parameters query_params = { calendar_id: ENV["CALENDAR_ID"], limit: 5 } # Start and End date to filter our events query_params['start'] = Time.local(today.year, today.month, today.day, 8, 0,0).strftime("%s") query_params['end'] = Time.local(today.year, today.month, today.day, 22, 0,0).strftime("%s") # Read events from our main calendar in the specified date and time events, _request_ids = nylas.events.list(identifier: ENV["GRANT_ID"], query_params: query_params) #events, _request_ids = nylas.events.list(identifier: "[email protected]", query_params: query_params) # Loop events events.each {|event| case event[:when][:object] when 'timespan' start_time = Time.at(event[:when][:start_time]).strftime("%d/%m/%Y at %H:%M:%S") end_time = Time.at(event[:when][:end_time]).strftime("%d/%m/%Y at %H:%M:%S") event_date = "The time of the event is from: #{start_time} to #{end_time}" when 'datespan' start_time = event[:when][:start_date] end_time = event[:when][:end_date] event_date = "The date of the event is from: #{start_time} to: #{end_time}" when 'date' start_time = event[:when][:date] event_date = "The date of the event is: #{start_time}" end participant_details = "" event[:participants].each {|participant| participant_details += "Email: #{participant[:email]} Name: #{participant[:name]} Status: #{participant[:status]} - " } puts "Id: #{event[:id]} | Title: #{event[:title]} | #{event_date} | Participants: #{participant_details.chomp(' - ')}" #puts "Id: #{event[:id]} | Title: #{event[:title]}" #| #{event_date}" puts "\n" puts "#{event}" puts "\n" }
We can run it by calling it from our terminal window:
$ ruby ReadEventsV3.rb
Creating events is an important task because we might want to invite people to a party, meetup or lunch. Also, by creating events we can send notifications to the participants, instead of just promoting our event online. We’re going to create a file named CreateEventsV3.rb:
# Load gems require 'dotenv/load' require 'nylas' # Initialize Nylas client nylas = Nylas::Client.new( api_key: ENV["V3_TOKEN"], api_uri: ENV["V3_HOST"] ) # Query parameters query_params = { calendar_id: ENV["GRANT_ID"] } # Get today’s date today = Date.today # Define the time of the event start_time = Time.local(today.year, today.month, today.day, 10, 0,0).strftime("%s") end_time = Time.local(today.year, today.month, today.day, 12, 0,0).strftime("%s") # Request Body request_body = { when: { start_time: start_time.to_i, end_time: end_time.to_i }, title: "Let's learn some Nylas Ruby SDK!", location: "Blag's Den!", description: "Using the Nylas API with the Ruby SDK is easy. Come join us!\"", participants: [{ name: "Blag", email: "[email protected]", status: 'noreply' }] } # Read events from our main calendar in the specified date and time events, _request_ids = nylas.events.create(identifier: ENV["GRANT_ID"], query_params: query_params, request_body: request_body) if _request_ids != "" puts events[:id] puts events[:title] puts "Event created successfully" else puts "There was an error creating the event" end
We can run it by calling it from our terminal window:
$ ruby CreateEventsV3.rb
Once an event has been created, it can be easily updated by providing the event ID. Let’s create a file named UpdateEventsV3.rb:
# Load gems require 'dotenv/load' require 'nylas' # Initialize Nylas client nylas = Nylas::Client.new( api_key: ENV["V3_TOKEN"] ) # Body parameters request_body = { location: "Nylas Headquarters!", } # Query parameters query_params = { calendar_id: ENV["GRANT_ID"] } # Read events from our main calendar in the specified date and time event, _request_ids = nylas.events.update(identifier: ENV["GRANT_ID"], event_id: '<EVENT_ID>', query_params: query_params, request_body: request_body) puts event[:title] puts event[:location]
We can run it by calling it from our terminal window:
$ ruby UpdateEventsV3.rb
Just like we can create and update events, we can delete them. So, let’s do that. Create a file named DeleteEventsV3.rb:
# Load gems require 'dotenv/load' require 'nylas' # Initialize Nylas client nylas = Nylas::Client.new( api_key: ENV["V3_TOKEN"] ) # Query parameters query_params = { calendar_id: ENV["GRANT_ID"] } # Create new calendar result, _request_ids = nylas.events.destroy(identifier: ENV["GRANT_ID"], event_id: "t6cdduum8q204cgb5if9ta4ifg", query_params: query_params) # Print result information puts result
We can run it by calling it from our terminal window:
$ ruby DeleteEventsV3.rb
Now that we know how we can manage calendar events using Ruby, let’s create a Nylas account and start building.
Do you have any comments or feedback? Please use our forums 😎
You can sign up for Nylas for free and start building!
Also, don’t miss the action, join our LiveStream Coding with Nylas!