nylas 5.4.1 → 5.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/nylas/api.rb +15 -1
- data/lib/nylas/calendar_collection.rb +100 -0
- data/lib/nylas/component.rb +30 -0
- data/lib/nylas/component_collection.rb +10 -0
- data/lib/nylas/draft.rb +1 -1
- data/lib/nylas/file.rb +1 -1
- data/lib/nylas/open_hours.rb +15 -0
- data/lib/nylas/scheduler.rb +47 -0
- data/lib/nylas/scheduler_config.rb +20 -0
- data/lib/nylas/version.rb +1 -1
- data/lib/nylas.rb +8 -1
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23edacaacec01d7cfd4c182647c30287d27b6ef790ec4abb7a83f98afa17782a
|
4
|
+
data.tar.gz: 3303d603caaf9a5be367fd5983f5350a61460575ddd7978c475c7eaf8be88727
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af4b7703eb190cbebcc2dac2777ea8cc3a9dbc77dc07604ffd11b3d5aaf4b8085afe60512cca8698bae58f1729c6adee6dd3fe03ae68bb0139ce0c0f208f91cb
|
7
|
+
data.tar.gz: f2060e79d3fe69ba18cb7fc35647504b4f5c66c0ba7c8e41d861b058991e109c5c2a0ec3c1a505eb9ec11d45c8ee9f359f988ade593685af5bf6a157b1029833
|
data/lib/nylas/api.rb
CHANGED
@@ -83,7 +83,7 @@ module Nylas
|
|
83
83
|
|
84
84
|
# @return [Collection<Calendar>] A queryable collection of {Calendar}s
|
85
85
|
def calendars
|
86
|
-
@calendars ||=
|
86
|
+
@calendars ||= CalendarCollection.new(model: Calendar, api: self)
|
87
87
|
end
|
88
88
|
|
89
89
|
# @return [DeltasCollection<Delta>] A queryable collection of Deltas, which are themselves a collection.
|
@@ -126,11 +126,24 @@ module Nylas
|
|
126
126
|
@room_resources ||= Collection.new(model: RoomResource, api: self)
|
127
127
|
end
|
128
128
|
|
129
|
+
# @return[Collection<Scheduler>] A queryable collection of {Scheduler} objects
|
130
|
+
def scheduler
|
131
|
+
# Make a deep copy of the API as the scheduler API uses a different base URL
|
132
|
+
scheduler_api = Marshal.load(Marshal.dump(self))
|
133
|
+
scheduler_api.client.api_server = "https://api.schedule.nylas.com"
|
134
|
+
@scheduler ||= Collection.new(model: Scheduler, api: scheduler_api)
|
135
|
+
end
|
136
|
+
|
129
137
|
# @return[Neural] A {Neural} object that provides
|
130
138
|
def neural
|
131
139
|
@neural ||= Neural.new(api: self)
|
132
140
|
end
|
133
141
|
|
142
|
+
# @return [Collection<Component>] A queryable collection of {Component}s
|
143
|
+
def components
|
144
|
+
@components ||= ComponentCollection.new(model: Component, api: as(client.app_secret))
|
145
|
+
end
|
146
|
+
|
134
147
|
# Revokes access to the Nylas API for the given access token
|
135
148
|
# @return [Boolean]
|
136
149
|
def revoke(access_token)
|
@@ -171,6 +184,7 @@ module Nylas
|
|
171
184
|
@webhooks ||= Collection.new(model: Webhook, api: as(client.app_secret))
|
172
185
|
end
|
173
186
|
|
187
|
+
# TODO: Move this into calendar collection
|
174
188
|
def free_busy(emails:, start_time:, end_time:)
|
175
189
|
FreeBusyCollection.new(
|
176
190
|
api: self,
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nylas
|
4
|
+
# Additional methods for some of Calendar's other functionality
|
5
|
+
# @see https://developer.nylas.com/docs/connectivity/calendar
|
6
|
+
class CalendarCollection < Collection
|
7
|
+
def availability(duration_minutes:,
|
8
|
+
interval:,
|
9
|
+
start_time:,
|
10
|
+
end_time:,
|
11
|
+
emails:,
|
12
|
+
buffer: nil,
|
13
|
+
round_robin: nil,
|
14
|
+
free_busy: [],
|
15
|
+
open_hours: [])
|
16
|
+
validate_open_hours(emails, free_busy, open_hours) unless open_hours.empty?
|
17
|
+
|
18
|
+
execute_availability("/calendars/availability",
|
19
|
+
duration_minutes: duration_minutes,
|
20
|
+
interval: interval,
|
21
|
+
start_time: start_time,
|
22
|
+
end_time: end_time,
|
23
|
+
emails: emails,
|
24
|
+
buffer: buffer,
|
25
|
+
round_robin: round_robin,
|
26
|
+
free_busy: free_busy,
|
27
|
+
open_hours: open_hours)
|
28
|
+
end
|
29
|
+
|
30
|
+
def consecutive_availability(duration_minutes:,
|
31
|
+
interval:,
|
32
|
+
start_time:,
|
33
|
+
end_time:,
|
34
|
+
emails:,
|
35
|
+
buffer: nil,
|
36
|
+
free_busy: [],
|
37
|
+
open_hours: [])
|
38
|
+
validate_open_hours(emails, free_busy, open_hours) unless open_hours.empty?
|
39
|
+
|
40
|
+
execute_availability("/calendars/availability/consecutive",
|
41
|
+
duration_minutes: duration_minutes,
|
42
|
+
interval: interval,
|
43
|
+
start_time: start_time,
|
44
|
+
end_time: end_time,
|
45
|
+
emails: emails,
|
46
|
+
buffer: buffer,
|
47
|
+
free_busy: free_busy,
|
48
|
+
open_hours: open_hours)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def execute_availability(path, **payload)
|
54
|
+
api.execute(
|
55
|
+
method: :post,
|
56
|
+
path: path,
|
57
|
+
payload: JSON.dump(payload)
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
def validate_open_hours(emails, free_busy, open_hours)
|
62
|
+
raise TypeError, "open_hours' must be an array." unless open_hours.is_a?(Array)
|
63
|
+
|
64
|
+
open_hours_emails = map_open_hours_emails(open_hours)
|
65
|
+
free_busy_emails = map_free_busy_emails(free_busy)
|
66
|
+
emails = merge_arrays(emails) if emails[0].is_a?(Array)
|
67
|
+
|
68
|
+
open_hours_emails.each do |email|
|
69
|
+
next if emails.include?(email) || free_busy_emails.include?(email)
|
70
|
+
|
71
|
+
raise ArgumentError, "Open Hours cannot contain an email not present in the main email list or
|
72
|
+
the free busy email list."
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def map_open_hours_emails(open_hours)
|
77
|
+
open_hours_emails = []
|
78
|
+
open_hours.map do |oh|
|
79
|
+
open_hours_emails += oh.emails
|
80
|
+
end
|
81
|
+
open_hours_emails
|
82
|
+
end
|
83
|
+
|
84
|
+
def map_free_busy_emails(free_busy)
|
85
|
+
free_busy_emails = []
|
86
|
+
free_busy.map do |fb|
|
87
|
+
free_busy_emails.append(fb.email)
|
88
|
+
end
|
89
|
+
free_busy_emails
|
90
|
+
end
|
91
|
+
|
92
|
+
def merge_arrays(array)
|
93
|
+
list = []
|
94
|
+
array.each do |x|
|
95
|
+
list += x
|
96
|
+
end
|
97
|
+
list
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nylas
|
4
|
+
# Structure to represent a the Component Schema.
|
5
|
+
class Component
|
6
|
+
include Model
|
7
|
+
allows_operations(creatable: true, listable: true, filterable: true, showable: true, updatable: true,
|
8
|
+
destroyable: true)
|
9
|
+
|
10
|
+
attribute :id, :string, read_only: true
|
11
|
+
attribute :account_id, :string
|
12
|
+
attribute :name, :string
|
13
|
+
attribute :type, :string
|
14
|
+
attribute :action, :integer
|
15
|
+
attribute :active, :boolean
|
16
|
+
attribute :settings, :hash
|
17
|
+
attribute :public_account_id, :string
|
18
|
+
attribute :public_token_id, :string
|
19
|
+
attribute :public_application_id, :string, read_only: true
|
20
|
+
attribute :access_token, :string
|
21
|
+
attribute :created_at, :date, read_only: true
|
22
|
+
attribute :updated_at, :date, read_only: true
|
23
|
+
|
24
|
+
has_n_of_attribute :allowed_domains, :string
|
25
|
+
|
26
|
+
def resources_path(*)
|
27
|
+
"/component/#{api.client.app_id}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/nylas/draft.rb
CHANGED
data/lib/nylas/file.rb
CHANGED
@@ -6,7 +6,7 @@ module Nylas
|
|
6
6
|
class File
|
7
7
|
include Model
|
8
8
|
self.resources_path = "/files"
|
9
|
-
allows_operations(listable: true, showable: true, filterable: true, creatable: true)
|
9
|
+
allows_operations(listable: true, showable: true, filterable: true, creatable: true, destroyable: true)
|
10
10
|
|
11
11
|
attribute :id, :string
|
12
12
|
attribute :account_id, :string
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nylas
|
4
|
+
# Additional times email accounts are available
|
5
|
+
# @see https://developer.nylas.com/docs/api/#post/calendars/availability
|
6
|
+
class OpenHours
|
7
|
+
include Model::Attributable
|
8
|
+
|
9
|
+
attribute :timezone, :string
|
10
|
+
attribute :start, :string
|
11
|
+
attribute :end, :string
|
12
|
+
has_n_of_attribute :emails, :string
|
13
|
+
has_n_of_attribute :days, :integer
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nylas
|
4
|
+
# Ruby representation of a the Nylas Scheduler API
|
5
|
+
# @see https://developer.nylas.com/docs/api/scheduler/#overview
|
6
|
+
class Scheduler
|
7
|
+
include Model
|
8
|
+
self.resources_path = "/manage/pages"
|
9
|
+
allows_operations(creatable: true, listable: true, filterable: true, showable: true, updatable: true,
|
10
|
+
destroyable: true)
|
11
|
+
|
12
|
+
attribute :id, :integer, read_only: true
|
13
|
+
attribute :app_client_id, :string
|
14
|
+
attribute :app_organization_id, :integer
|
15
|
+
attribute :config, :scheduler_config
|
16
|
+
attribute :edit_token, :string
|
17
|
+
attribute :name, :string
|
18
|
+
attribute :slug, :string
|
19
|
+
attribute :created_at, :date
|
20
|
+
attribute :modified_at, :date
|
21
|
+
|
22
|
+
has_n_of_attribute :access_tokens, :string
|
23
|
+
|
24
|
+
def get_available_calendars
|
25
|
+
raise ArgumentError, "Cannot get calendars for a page without an ID." if id.nil?
|
26
|
+
|
27
|
+
api.execute(
|
28
|
+
method: :get,
|
29
|
+
path: "/manage/pages/#{id}/calendars"
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
def upload_image(content_type:, object_name:)
|
34
|
+
raise ArgumentError, "Cannot upload an image to a page without an ID." if id.nil?
|
35
|
+
|
36
|
+
payload = {
|
37
|
+
contentType: content_type,
|
38
|
+
objectName: object_name
|
39
|
+
}
|
40
|
+
api.execute(
|
41
|
+
method: :put,
|
42
|
+
path: "/manage/pages/#{id}/upload-image",
|
43
|
+
payload: JSON.dump(payload)
|
44
|
+
)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nylas
|
4
|
+
# Configuration settings for a Scheduler page
|
5
|
+
# @see https://developer.nylas.com/docs/api/scheduler
|
6
|
+
class SchedulerConfig
|
7
|
+
include Model::Attributable
|
8
|
+
|
9
|
+
attribute :appearance, :hash
|
10
|
+
attribute :booking, :hash
|
11
|
+
attribute :calendar_ids, :hash
|
12
|
+
attribute :event, :hash
|
13
|
+
attribute :expire_after, :hash
|
14
|
+
attribute :locale, :string
|
15
|
+
attribute :locale_for_guests, :string
|
16
|
+
attribute :timezone, :string
|
17
|
+
|
18
|
+
has_n_of_attribute :reminders, :hash
|
19
|
+
end
|
20
|
+
end
|
data/lib/nylas/version.rb
CHANGED
data/lib/nylas.rb
CHANGED
@@ -35,7 +35,6 @@ require_relative "nylas/model"
|
|
35
35
|
# Attribute types supported by the API
|
36
36
|
require_relative "nylas/email_address"
|
37
37
|
require_relative "nylas/event"
|
38
|
-
require_relative "nylas/event_collection"
|
39
38
|
require_relative "nylas/file"
|
40
39
|
require_relative "nylas/folder"
|
41
40
|
require_relative "nylas/im_address"
|
@@ -53,14 +52,19 @@ require_relative "nylas/nylas_date"
|
|
53
52
|
require_relative "nylas/when"
|
54
53
|
require_relative "nylas/free_busy"
|
55
54
|
require_relative "nylas/time_slot"
|
55
|
+
require_relative "nylas/open_hours"
|
56
56
|
require_relative "nylas/event_conferencing"
|
57
57
|
require_relative "nylas/event_conferencing_details"
|
58
58
|
require_relative "nylas/event_conferencing_autocreate"
|
59
|
+
require_relative "nylas/component"
|
59
60
|
|
60
61
|
# Custom collection types
|
62
|
+
require_relative "nylas/event_collection"
|
61
63
|
require_relative "nylas/search_collection"
|
62
64
|
require_relative "nylas/deltas_collection"
|
63
65
|
require_relative "nylas/free_busy_collection"
|
66
|
+
require_relative "nylas/calendar_collection"
|
67
|
+
require_relative "nylas/component_collection"
|
64
68
|
|
65
69
|
# Models supported by the API
|
66
70
|
require_relative "nylas/account"
|
@@ -77,6 +81,7 @@ require_relative "nylas/new_message"
|
|
77
81
|
require_relative "nylas/raw_message"
|
78
82
|
require_relative "nylas/thread"
|
79
83
|
require_relative "nylas/webhook"
|
84
|
+
require_relative "nylas/scheduler"
|
80
85
|
|
81
86
|
# Neural specific types
|
82
87
|
require_relative "nylas/neural"
|
@@ -90,6 +95,7 @@ require_relative "nylas/neural_signature_contact"
|
|
90
95
|
require_relative "nylas/neural_signature_extraction"
|
91
96
|
require_relative "nylas/neural_message_options"
|
92
97
|
require_relative "nylas/categorize"
|
98
|
+
require_relative "nylas/scheduler_config"
|
93
99
|
|
94
100
|
require_relative "nylas/native_authentication"
|
95
101
|
|
@@ -134,4 +140,5 @@ module Nylas
|
|
134
140
|
Types.registry[:neural_signature_contact] = Types::ModelType.new(model: NeuralSignatureContact)
|
135
141
|
Types.registry[:neural_contact_link] = Types::ModelType.new(model: NeuralContactLink)
|
136
142
|
Types.registry[:neural_contact_name] = Types::ModelType.new(model: NeuralContactName)
|
143
|
+
Types.registry[:scheduler_config] = Types::ModelType.new(model: SchedulerConfig)
|
137
144
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nylas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nylas, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -270,8 +270,11 @@ files:
|
|
270
270
|
- lib/nylas/account.rb
|
271
271
|
- lib/nylas/api.rb
|
272
272
|
- lib/nylas/calendar.rb
|
273
|
+
- lib/nylas/calendar_collection.rb
|
273
274
|
- lib/nylas/categorize.rb
|
274
275
|
- lib/nylas/collection.rb
|
276
|
+
- lib/nylas/component.rb
|
277
|
+
- lib/nylas/component_collection.rb
|
275
278
|
- lib/nylas/constraints.rb
|
276
279
|
- lib/nylas/contact.rb
|
277
280
|
- lib/nylas/contact_group.rb
|
@@ -318,6 +321,7 @@ files:
|
|
318
321
|
- lib/nylas/neural_signature_extraction.rb
|
319
322
|
- lib/nylas/new_message.rb
|
320
323
|
- lib/nylas/nylas_date.rb
|
324
|
+
- lib/nylas/open_hours.rb
|
321
325
|
- lib/nylas/participant.rb
|
322
326
|
- lib/nylas/phone_number.rb
|
323
327
|
- lib/nylas/physical_address.rb
|
@@ -326,6 +330,8 @@ files:
|
|
326
330
|
- lib/nylas/registry.rb
|
327
331
|
- lib/nylas/room_resource.rb
|
328
332
|
- lib/nylas/rsvp.rb
|
333
|
+
- lib/nylas/scheduler.rb
|
334
|
+
- lib/nylas/scheduler_config.rb
|
329
335
|
- lib/nylas/search_collection.rb
|
330
336
|
- lib/nylas/thread.rb
|
331
337
|
- lib/nylas/time_slot.rb
|
@@ -360,7 +366,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
360
366
|
- !ruby/object:Gem::Version
|
361
367
|
version: '0'
|
362
368
|
requirements: []
|
363
|
-
rubygems_version: 3.
|
369
|
+
rubygems_version: 3.2.17
|
364
370
|
signing_key:
|
365
371
|
specification_version: 4
|
366
372
|
summary: Gem for interacting with the Nylas API
|