Class: TimeTree::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/timetree/client.rb

Overview

TimeTree apis client.

Constant Summary collapse

API_HOST =
'https://timetreeapis.com'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(token = nil) ⇒ Client

Returns a new instance of Client.

Parameters:

  • token (String) (defaults to: nil)

    a TimeTree’s access token.

Raises:



17
18
19
20
21
22
# File 'lib/timetree/client.rb', line 17

def initialize(token = nil)
  @token = token || TimeTree.configuration.token
  raise Error, 'token is required.' unless ready_token?

  @http_cmd = HttpCommand.new(API_HOST, self)
end

Instance Attribute Details

#ratelimit_limitInteger (readonly)

Returns:

  • (Integer)


10
11
12
# File 'lib/timetree/client.rb', line 10

def ratelimit_limit
  @ratelimit_limit
end

#ratelimit_remainingInteger (readonly)

Returns:

  • (Integer)


12
13
14
# File 'lib/timetree/client.rb', line 12

def ratelimit_remaining
  @ratelimit_remaining
end

#ratelimit_reset_atTime (readonly)

Returns:

  • (Time)


14
15
16
# File 'lib/timetree/client.rb', line 14

def ratelimit_reset_at
  @ratelimit_reset_at
end

#tokenString (readonly)

Returns:

  • (String)


8
9
10
# File 'lib/timetree/client.rb', line 8

def token
  @token
end

Instance Method Details

#calendar(cal_id, include_relationships: nil) ⇒ TimeTree::Calendar

Get a single calendar’s information.

includes association’s object in the response.

Parameters:

  • cal_id (String)

    calendar’s id.

  • include_relationships (Array<symbol>) (defaults to: nil)

Returns:

Raises:

Since:

  • 0.0.1



46
47
48
49
50
51
52
# File 'lib/timetree/client.rb', line 46

def calendar(cal_id, include_relationships: nil)
  params = relationships_params(include_relationships, Calendar::RELATIONSHIPS)
  res = @http_cmd.get "/calendars/#{cal_id}", params
  raise ApiError, res if res.status != 200

  to_model(res.body[:data], included: res.body[:included])
end

#calendar_labels(cal_id) ⇒ Array<TimeTree::Label>

Get a calendar’s label information used in event.

Parameters:

  • cal_id (String)

    calendar’s id.

Returns:

Raises:

Since:

  • 0.0.1



78
79
80
81
82
83
# File 'lib/timetree/client.rb', line 78

def calendar_labels(cal_id)
  res = @http_cmd.get "/calendars/#{cal_id}/labels"
  raise ApiError, res if res.status != 200

  res.body[:data].map { |item| to_model(item) }
end

#calendar_members(cal_id) ⇒ Array<TimeTree::User>

Get a calendar’s member information.

Parameters:

  • cal_id (String)

    calendar’s id.

Returns:

Raises:

Since:

  • 0.0.1



92
93
94
95
96
97
# File 'lib/timetree/client.rb', line 92

def calendar_members(cal_id)
  res = @http_cmd.get "/calendars/#{cal_id}/members"
  raise ApiError, res if res.status != 200

  res.body[:data].map { |item| to_model item }
end

#calendars(include_relationships: nil) ⇒ Array<TimeTree::Calendar>

Get calendar list that current user can access.

includes association’s object in the response.

Parameters:

  • include_relationships (Array<symbol>) (defaults to: nil)

Returns:

Raises:

Since:

  • 0.0.1



62
63
64
65
66
67
68
69
# File 'lib/timetree/client.rb', line 62

def calendars(include_relationships: nil)
  params = relationships_params(include_relationships, Calendar::RELATIONSHIPS)
  res = @http_cmd.get '/calendars', params
  raise ApiError, res if res.status != 200

  included = res.body[:included]
  res.body[:data].map { |item| to_model(item, included: included) }
end

#create_activity(cal_id, event_id, params) ⇒ TimeTree::Activity

Creates comment to an event.

comment’s information specified in TimeTree request body format.

Parameters:

  • cal_id (String)

    calendar’s id.

  • event_id (String)

    event’s id.

  • params (Hash)

Returns:

Raises:

Since:

  • 0.0.1



205
206
207
208
209
210
211
212
213
# File 'lib/timetree/client.rb', line 205

def create_activity(cal_id, event_id, params)
  res = @http_cmd.post "/calendars/#{cal_id}/events/#{event_id}/activities", params
  raise ApiError, res if res.status != 201

  activity = to_model res.body[:data]
  activity.calendar_id = cal_id
  activity.event_id = event_id
  activity
end

#create_event(cal_id, params) ⇒ TimeTree::Event

Creates an event to the calendar.

Parameters:

  • cal_id (String)

    calendar’s id.

  • params (Hash)

    TimeTree request body format.

Returns:

Raises:

Since:

  • 0.0.1



152
153
154
155
156
157
158
159
# File 'lib/timetree/client.rb', line 152

def create_event(cal_id, params)
  res = @http_cmd.post "/calendars/#{cal_id}/events", params
  raise ApiError, res if res.status != 201

  ev = to_model res.body[:data]
  ev.calendar_id = cal_id
  ev
end

#current_userTimeTree::User

Get current user information.

Returns:

Raises:

Since:

  • 0.0.1



30
31
32
33
34
35
# File 'lib/timetree/client.rb', line 30

def current_user
  res = @http_cmd.get '/user'
  raise ApiError, res if res.status != 200

  to_model res.body[:data]
end

#delete_event(cal_id, event_id) ⇒ true

Deletes an event.

Parameters:

  • cal_id (String)

    calendar’s id.

  • event_id (String)

    event’s id.

Returns:

  • (true)

    if the operation succeeded.

Raises:

Since:

  • 0.0.1



188
189
190
191
192
193
# File 'lib/timetree/client.rb', line 188

def delete_event(cal_id, event_id)
  res = @http_cmd.delete "/calendars/#{cal_id}/events/#{event_id}"
  raise ApiError, res if res.status != 204

  true
end

#event(cal_id, event_id, include_relationships: nil) ⇒ TimeTree::Event

Get the event’s information.

includes association’s object in the response.

Parameters:

  • cal_id (String)

    calendar’s id.

  • event_id (String)

    event’s id.

  • include_relationships (Array<symbol>) (defaults to: nil)

Returns:

Raises:

Since:

  • 0.0.1



109
110
111
112
113
114
115
116
117
# File 'lib/timetree/client.rb', line 109

def event(cal_id, event_id, include_relationships: nil)
  params = relationships_params(include_relationships, Event::RELATIONSHIPS)
  res = @http_cmd.get "/calendars/#{cal_id}/events/#{event_id}", params
  raise ApiError, res if res.status != 200

  ev = to_model(res.body[:data], included: res.body[:included])
  ev.calendar_id = cal_id
  ev
end

#inspectObject



215
216
217
218
219
220
221
222
223
224
# File 'lib/timetree/client.rb', line 215

def inspect
  limit_info = nil
  if @ratelimit_limit
    limit_info = " ratelimit:#{@ratelimit_remaining}/#{@ratelimit_limit}"
  end
  if @ratelimit_reset_at
    limit_info = "#{limit_info}, reset_at:#{@ratelimit_reset_at.strftime('%m/%d %R')}"
  end
  "\#<#{self.class}:#{object_id}#{limit_info}>"
end

#upcoming_events(cal_id, days: 7, timezone: 'UTC', include_relationships: nil) ⇒ Array<TimeTree::Event>

Get the events’ information after a request date.

includes association’s object in the response.

Parameters:

  • cal_id (String)

    calendar’s id.

  • days (Integer) (defaults to: 7)

    The number of days to get.

  • timezone (String) (defaults to: 'UTC')

    Timezone.

  • include_relationships (Array<symbol>) (defaults to: nil)

Returns:

Raises:

Since:

  • 0.0.1



130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/timetree/client.rb', line 130

def upcoming_events(cal_id, days: 7, timezone: 'UTC', include_relationships: nil)
  params = relationships_params(include_relationships, Event::RELATIONSHIPS)
  params.merge!(days: days, timezone: timezone)
  res = @http_cmd.get "/calendars/#{cal_id}/upcoming_events", params
  raise ApiError, res if res.status != 200

  included = res.body[:included]
  res.body[:data].map do |item|
    ev = to_model(item, included: included)
    ev.calendar_id = cal_id
    ev
  end
end

#update_event(cal_id, event_id, params) ⇒ TimeTree::Event

Updates an event.

event’s information specified in TimeTree request body format.

Parameters:

  • cal_id (String)

    calendar’s id.

  • event_id (String)

    event’s id.

  • params (Hash)

Returns:

Raises:

Since:

  • 0.0.1



171
172
173
174
175
176
177
178
# File 'lib/timetree/client.rb', line 171

def update_event(cal_id, event_id, params)
  res = @http_cmd.put "/calendars/#{cal_id}/events/#{event_id}", params
  raise ApiError, res if res.status != 200

  ev = to_model res.body[:data]
  ev.calendar_id = cal_id
  ev
end

#update_ratelimit(res) ⇒ Object

update ratelimit properties

apis http response.

Parameters:

  • res (Faraday::Response)


231
232
233
234
235
236
237
238
# File 'lib/timetree/client.rb', line 231

def update_ratelimit(res)
  limit = res.headers['x-ratelimit-limit']
  remaining = res.headers['x-ratelimit-remaining']
  reset = res.headers['x-ratelimit-reset']
  @ratelimit_limit = limit.to_i if limit
  @ratelimit_remaining = remaining.to_i if remaining
  @ratelimit_reset_at = Time.at reset.to_i if reset
end