Skip to content

koshilife/timetree-api-ruby-client

Repository files navigation

TimeTree APIs client

Test codecov Gem Version license

About

These client libraries are created for TimeTree APIs.

Installation

Add this line to your application's Gemfile:

gem 'timetree'

And then execute:

$ bundle

Or install it yourself as:

$ gem install timetree

Usage for Calendar App

The APIs client for Calendar App needs installation_id, application_id and private key.

# set token by TimeTree.configure methods.
TimeTree.configure do |config|
  config.calendar_app_application_id = '<YOUR_APPLICATION_ID>'
  config.calendar_app_private_key = File.read('<YOUR_PATH_TO_PEM>')
end
client = TimeTree::CalendarApp::Client.new('<INSTALLATION_ID>')

# set token by TimeTree::CalendarApp::Client initializer.
client = TimeTree::CalendarApp::Client.new('<INSTALLATION_ID>', '<YOUR_APPLICATION_ID>', '<YOUR_PRIVATE_KEY_CONTENT>')

# get connected calendar's information.
cal = client.calendar
# => #<TimeTree::Calendar id:xxx_cal001>

# get upcoming events on the calendar.
evs = cal.upcoming_events
# => [#<TimeTree::Event id:xxx_ev001>, #<TimeTree::Event id:xxx_ev002>, ...]
ev = evs.first.title
# => "Event Title"

Usage for OAuth App

The APIs client for OAuth App needs access token.

# set token by TimeTree.configure methods.
TimeTree.configure do |config|
  config.oauth_app_token = '<YOUR_ACCESS_TOKEN>'
end
client = TimeTree::OAuthApp::Client.new

# set token by TimeTree::OAuthApp::Client initializer.
client = TimeTree::OAuthApp::Client.new('<YOUR_ACCESS_TOKEN>')

# get a current user's information.
user = client.current_user
# => #<TimeTree::User id:xxx_u001>
user.name
# => "USER Name"

# get current user's calendars.
cals = client.calendars
# => [#<TimeTree::Calendar id:xxx_cal001>, #<TimeTree::Calendar id:xxx_cal002>, ...]
cal = cals.first
cal.name
# => "Calendar Name"

# get upcoming events on the calendar.
evs = cal.upcoming_events
# => [#<TimeTree::Event id:xxx_ev001>, #<TimeTree::Event id:xxx_ev002>, ...]
ev = evs.first
ev.title
# => "Event Title"

# updates an event.
ev.title += ' Updated'
ev.start_at = Time.parse('2020-06-20 09:00 +09:00')
ev.end_at = Time.parse('2020-06-20 10:00 +09:00')
ev.update
# => #<TimeTree::Event id:xxx_ev001>

# creates an event.
copy_ev = ev.dup
new_ev = copy_ev.create
# => #<TimeTree::Event id:xxx_new_ev001>

# deletes an event.
ev.delete
# => true

# creates a comment to an event.
ev.create_comment 'Hi there!'
# => #<TimeTree::Activity id:xxx_act001>

# handles APIs error.
begin
  ev.delete
  ev.delete # 404 Error occured.
rescue TimeTree::ApiError => e
  e
  => #<TimeTree::ApiError title:Not Found, status:404>
  e.response
  => #<Faraday::Response>
end

Logging

# if the log level set :debug, you can get the request/response information.
TimeTree.configuration.logger.level = :debug
=> #<TimeTree::Event id:event_id_001_not_found>
>> client.event 'cal_id_001', 'event_id_001_not_found'
I, [2020-06-24T10:05:07.294807]  INFO -- : GET https://timetreeapis.com/calendars/cal_id_001/events/event_id_001_not_found?include=creator%2Clabel%2Cattendees
D, [2020-06-24T10:05:07.562038] DEBUG -- : Response status:404, body:{:type=>"https://developers.timetreeapp.com/en/docs/api#client-failure", :title=>"Not Found", :status=>404, :errors=>"Event not found"}

More in-depth method documentation can be found at RubyDoc.info.

Contributing

Bug reports and pull requests are welcome on GitHub. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the TimeTree Api Client project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.