nylas 5.7.0 → 5.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/nylas/account.rb +3 -0
- data/lib/nylas/api.rb +20 -6
- data/lib/nylas/calendar.rb +8 -2
- data/lib/nylas/calendar_collection.rb +69 -25
- data/lib/nylas/collection.rb +18 -4
- data/lib/nylas/component.rb +7 -2
- data/lib/nylas/deltas.rb +1 -1
- data/lib/nylas/draft.rb +7 -1
- data/lib/nylas/event.rb +34 -8
- data/lib/nylas/file.rb +7 -1
- data/lib/nylas/folder.rb +2 -0
- data/lib/nylas/http_client.rb +66 -15
- data/lib/nylas/job_status.rb +3 -2
- data/lib/nylas/job_status_collection.rb +21 -0
- data/lib/nylas/label.rb +2 -0
- data/lib/nylas/message.rb +8 -1
- data/lib/nylas/model.rb +33 -17
- data/lib/nylas/neural_categorizer.rb +1 -1
- data/lib/nylas/neural_clean_conversation.rb +1 -1
- data/lib/nylas/neural_ocr.rb +1 -1
- data/lib/nylas/neural_sentiment_analysis.rb +1 -1
- data/lib/nylas/new_message.rb +7 -1
- data/lib/nylas/outbox.rb +116 -0
- data/lib/nylas/outbox_job_status.rb +19 -0
- data/lib/nylas/outbox_message.rb +17 -0
- data/lib/nylas/participant.rb +1 -0
- data/lib/nylas/room_resource.rb +1 -1
- data/lib/nylas/rsvp.rb +1 -1
- data/lib/nylas/scheduler.rb +6 -2
- data/lib/nylas/send_grid_verified_status.rb +12 -0
- data/lib/nylas/thread.rb +6 -1
- data/lib/nylas/time_slot.rb +2 -0
- data/lib/nylas/time_slot_capacity.rb +13 -0
- data/lib/nylas/version.rb +1 -1
- data/lib/nylas/webhook.rb +81 -4
- data/lib/nylas.rb +10 -3
- 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: c1e352b09e650aa0cbc5dff7363b8a0997aab35c94e73a5f4a77b5503de70448
|
4
|
+
data.tar.gz: a7830ea4cc6a9028669ca6c0e502cba4f2dfc70402a2c00f85cd1f6d315d0594
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7aeed921859461105491d8394f845b79d6419ecc10a17ae0989f2239382cce8e4ad1fb3936bd7a4cebd730e40bac60b28dafe8e145e63a10d424a9e9b46915f0
|
7
|
+
data.tar.gz: 47fdeaa77f5e1037934fc421b7b869edc031f956aad054d2888d29aee0a75ecb537c063e4c89e3c30e4f14f2be2da0860b5ec546e39034590f137773b73ef3cc
|
data/lib/nylas/account.rb
CHANGED
@@ -9,12 +9,15 @@ module Nylas
|
|
9
9
|
self.showable = true
|
10
10
|
self.updatable = true
|
11
11
|
self.destroyable = true
|
12
|
+
self.filterable = true
|
13
|
+
self.auth_method = HttpClient::AuthMethod::BASIC
|
12
14
|
|
13
15
|
attribute :id, :string, read_only: true
|
14
16
|
attribute :account_id, :string, read_only: true
|
15
17
|
attribute :billing_state, :string, read_only: true
|
16
18
|
attribute :sync_state, :string, read_only: true
|
17
19
|
attribute :provider, :string, read_only: true
|
20
|
+
attribute :authentication_type, :string, read_only: true
|
18
21
|
|
19
22
|
attribute :email, :string, read_only: true
|
20
23
|
attribute :trial, :boolean, read_only: true
|
data/lib/nylas/api.rb
CHANGED
@@ -35,15 +35,19 @@ module Nylas
|
|
35
35
|
)
|
36
36
|
end
|
37
37
|
|
38
|
-
def authentication_url(redirect_uri:, scopes:, response_type: "code", login_hint: nil, state: nil
|
38
|
+
def authentication_url(redirect_uri:, scopes:, response_type: "code", login_hint: nil, state: nil,
|
39
|
+
provider: nil, redirect_on_error: nil)
|
39
40
|
params = {
|
40
41
|
client_id: app_id,
|
41
42
|
redirect_uri: redirect_uri,
|
42
43
|
response_type: response_type,
|
43
44
|
login_hint: login_hint
|
44
45
|
}
|
46
|
+
|
45
47
|
params[:state] = state if state
|
46
48
|
params[:scopes] = scopes.join(",") if scopes
|
49
|
+
params[:provider] = provider if provider
|
50
|
+
params[:redirect_on_error] = redirect_on_error if redirect_on_error
|
47
51
|
|
48
52
|
"#{api_server}/oauth/authorize?#{URI.encode_www_form(params)}"
|
49
53
|
end
|
@@ -132,7 +136,12 @@ module Nylas
|
|
132
136
|
|
133
137
|
# @return[Collection<JobStatus>] A queryable collection of {JobStatus} objects
|
134
138
|
def job_statuses
|
135
|
-
@job_statuses ||=
|
139
|
+
@job_statuses ||= JobStatusCollection.new(model: JobStatus, api: self)
|
140
|
+
end
|
141
|
+
|
142
|
+
# @return[OutboxCollection] A collection of Outbox operations
|
143
|
+
def outbox
|
144
|
+
@outbox ||= Outbox.new(api: self)
|
136
145
|
end
|
137
146
|
|
138
147
|
# @return[SchedulerCollection<Scheduler>] A queryable collection of {Scheduler} objects
|
@@ -143,7 +152,7 @@ module Nylas
|
|
143
152
|
@scheduler ||= SchedulerCollection.new(model: Scheduler, api: scheduler_api)
|
144
153
|
end
|
145
154
|
|
146
|
-
# @return[Neural] A
|
155
|
+
# @return[Neural] A collection of Neural operations
|
147
156
|
def neural
|
148
157
|
@neural ||= Neural.new(api: self)
|
149
158
|
end
|
@@ -163,7 +172,11 @@ module Nylas
|
|
163
172
|
# Returns the application details
|
164
173
|
# @return [ApplicationDetail] The application details
|
165
174
|
def application_details
|
166
|
-
response = client.as(client.app_secret).execute(
|
175
|
+
response = client.as(client.app_secret).execute(
|
176
|
+
method: :get,
|
177
|
+
path: "/a/#{app_id}",
|
178
|
+
auth_method: HttpClient::AuthMethod::BASIC
|
179
|
+
)
|
167
180
|
ApplicationDetail.new(**response)
|
168
181
|
end
|
169
182
|
|
@@ -174,7 +187,8 @@ module Nylas
|
|
174
187
|
response = client.as(client.app_secret).execute(
|
175
188
|
method: :put,
|
176
189
|
path: "/a/#{app_id}",
|
177
|
-
payload: JSON.dump(application_details.to_h)
|
190
|
+
payload: JSON.dump(application_details.to_h),
|
191
|
+
auth_method: HttpClient::AuthMethod::BASIC
|
178
192
|
)
|
179
193
|
ApplicationDetail.new(**response)
|
180
194
|
end
|
@@ -184,7 +198,7 @@ module Nylas
|
|
184
198
|
# hash has keys of :updated_at (unix timestamp) and :ip_addresses (array of strings)
|
185
199
|
def ip_addresses
|
186
200
|
path = "/a/#{app_id}/ip_addresses"
|
187
|
-
client.as(client.app_secret).get(path: path)
|
201
|
+
client.as(client.app_secret).get(path: path, auth_method: HttpClient::AuthMethod::BASIC)
|
188
202
|
end
|
189
203
|
|
190
204
|
# @param message [Hash, String, #send!]
|
data/lib/nylas/calendar.rb
CHANGED
@@ -6,8 +6,14 @@ module Nylas
|
|
6
6
|
class Calendar
|
7
7
|
include Model
|
8
8
|
self.resources_path = "/calendars"
|
9
|
-
|
10
|
-
|
9
|
+
self.creatable = true
|
10
|
+
self.listable = true
|
11
|
+
self.showable = true
|
12
|
+
self.filterable = true
|
13
|
+
self.updatable = true
|
14
|
+
self.destroyable = true
|
15
|
+
self.id_listable = true
|
16
|
+
self.countable = true
|
11
17
|
|
12
18
|
attribute :id, :string
|
13
19
|
attribute :account_id, :string
|
@@ -4,48 +4,86 @@ module Nylas
|
|
4
4
|
# Additional methods for some of Calendar's other functionality
|
5
5
|
# @see https://developer.nylas.com/docs/connectivity/calendar
|
6
6
|
class CalendarCollection < Collection
|
7
|
+
# Check multiple calendars to find available time slots for a single meeting
|
8
|
+
# @param duration_minutes [Integer] The total number of minutes the event should last
|
9
|
+
# @param interval_minutes [Integer] How many minutes it should check for availability
|
10
|
+
# @param start_time [Integer] The timestamp for the beginning of the event
|
11
|
+
# @param end_time [Integer] The timestamp for the end of the event
|
12
|
+
# @param emails [Array<String>] Emails on the same domain to check
|
13
|
+
# @param buffer [Integer] The amount of buffer time in minutes that you want around existing meetings
|
14
|
+
# @param round_robin [String] Finds available meeting times in a round-robin style
|
15
|
+
# @param event_collection_id [String] Unique identifier for a collection of events that are created
|
16
|
+
# @param free_busy [Array<Nylas::FreeBusy>] A list of free-busy data for users not in your organization
|
17
|
+
# @param open_hours [Array<Nylas::OpenHours>] Additional times email accounts are available
|
18
|
+
# @param calendars [Array] Check account and calendar IDs for free/busy status
|
19
|
+
# @return [Hash] The availability information; a list of time slots where all participants are available
|
7
20
|
def availability(duration_minutes:,
|
8
|
-
|
21
|
+
interval_minutes:,
|
9
22
|
start_time:,
|
10
23
|
end_time:,
|
11
|
-
emails
|
24
|
+
emails: [],
|
12
25
|
buffer: nil,
|
13
26
|
round_robin: nil,
|
27
|
+
event_collection_id: nil,
|
14
28
|
free_busy: [],
|
15
|
-
open_hours: []
|
29
|
+
open_hours: [],
|
30
|
+
calendars: [])
|
31
|
+
validate_calendars_or_emails(calendars, emails)
|
16
32
|
validate_open_hours(emails, free_busy, open_hours) unless open_hours.empty?
|
17
33
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
34
|
+
payload = {
|
35
|
+
duration_minutes: duration_minutes,
|
36
|
+
interval_minutes: interval_minutes,
|
37
|
+
start_time: start_time,
|
38
|
+
end_time: end_time,
|
39
|
+
emails: emails,
|
40
|
+
free_busy: free_busy.map(&:to_h),
|
41
|
+
open_hours: open_hours.map(&:to_h),
|
42
|
+
calendars: calendars
|
43
|
+
}
|
44
|
+
payload[:buffer] = buffer if buffer
|
45
|
+
payload[:round_robin] = round_robin if round_robin
|
46
|
+
payload[:event_collection_id] = event_collection_id if event_collection_id
|
47
|
+
|
48
|
+
execute_availability("/calendars/availability", **payload)
|
28
49
|
end
|
29
50
|
|
51
|
+
# Check multiple calendars to find availability for multiple meetings with several participants
|
52
|
+
# @param duration_minutes [Integer] The total number of minutes the event should last
|
53
|
+
# @param interval_minutes [Integer] How many minutes it should check for availability
|
54
|
+
# @param start_time [Integer] The timestamp for the beginning of the event
|
55
|
+
# @param end_time [Integer] The timestamp for the end of the event
|
56
|
+
# @param emails [Array<Array<String>>] Emails on the same domain to check
|
57
|
+
# @param buffer [Integer] The amount of buffer time in minutes that you want around existing meetings
|
58
|
+
# @param free_busy [Array<Nylas::FreeBusy>] A list of free-busy data for users not in your organization
|
59
|
+
# @param open_hours [Array<Nylas::OpenHours>] Additional times email accounts are available
|
60
|
+
# @param calendars [Array] Check account and calendar IDs for free/busy status
|
61
|
+
# @return [Hash] The availability information; a list of all possible groupings that share time slots
|
30
62
|
def consecutive_availability(duration_minutes:,
|
31
|
-
|
63
|
+
interval_minutes:,
|
32
64
|
start_time:,
|
33
65
|
end_time:,
|
34
|
-
emails
|
66
|
+
emails: [],
|
35
67
|
buffer: nil,
|
36
68
|
free_busy: [],
|
37
|
-
open_hours: []
|
69
|
+
open_hours: [],
|
70
|
+
calendars: [])
|
71
|
+
validate_calendars_or_emails(emails, calendars)
|
38
72
|
validate_open_hours(emails, free_busy, open_hours) unless open_hours.empty?
|
39
73
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
74
|
+
payload = {
|
75
|
+
duration_minutes: duration_minutes,
|
76
|
+
interval_minutes: interval_minutes,
|
77
|
+
start_time: start_time,
|
78
|
+
end_time: end_time,
|
79
|
+
emails: emails,
|
80
|
+
free_busy: free_busy.map(&:to_h),
|
81
|
+
open_hours: open_hours.map(&:to_h),
|
82
|
+
calendars: calendars
|
83
|
+
}
|
84
|
+
payload[:buffer] = buffer if buffer
|
85
|
+
|
86
|
+
execute_availability("/calendars/availability/consecutive", **payload)
|
49
87
|
end
|
50
88
|
|
51
89
|
private
|
@@ -58,6 +96,12 @@ module Nylas
|
|
58
96
|
)
|
59
97
|
end
|
60
98
|
|
99
|
+
def validate_calendars_or_emails(calendars, emails)
|
100
|
+
return unless calendars.empty? && emails.empty?
|
101
|
+
|
102
|
+
raise ArgumentError, "You must provide at least one of 'emails' or 'calendars'"
|
103
|
+
end
|
104
|
+
|
61
105
|
def validate_open_hours(emails, free_busy, open_hours)
|
62
106
|
raise TypeError, "open_hours' must be an array." unless open_hours.is_a?(Array)
|
63
107
|
|
data/lib/nylas/collection.rb
CHANGED
@@ -17,7 +17,7 @@ module Nylas
|
|
17
17
|
|
18
18
|
# Instantiates a new model
|
19
19
|
def new(**attributes)
|
20
|
-
model.new(attributes.merge(api: api))
|
20
|
+
model.new(**attributes.merge(api: api))
|
21
21
|
end
|
22
22
|
|
23
23
|
def create(**attributes)
|
@@ -51,7 +51,14 @@ module Nylas
|
|
51
51
|
|
52
52
|
# @return [Integer]
|
53
53
|
def count
|
54
|
-
self.class.new(model: model, api: api, constraints: constraints
|
54
|
+
collection = self.class.new(model: model, api: api, constraints: constraints)
|
55
|
+
|
56
|
+
if model.countable
|
57
|
+
collection.constraints = collection.constraints.merge(view: "count")
|
58
|
+
collection.execute[:count]
|
59
|
+
else
|
60
|
+
collection.find_each.map.count
|
61
|
+
end
|
55
62
|
end
|
56
63
|
|
57
64
|
# @return [Collection<Model>]
|
@@ -61,7 +68,14 @@ module Nylas
|
|
61
68
|
|
62
69
|
# @return [Array<String>]
|
63
70
|
def ids
|
64
|
-
self.class.new(model: model, api: api, constraints: constraints
|
71
|
+
collection = self.class.new(model: model, api: api, constraints: constraints)
|
72
|
+
|
73
|
+
if model.id_listable
|
74
|
+
collection.constraints = collection.constraints.merge(view: "ids")
|
75
|
+
collection.execute
|
76
|
+
else
|
77
|
+
collection.find_each.map(&:id)
|
78
|
+
end
|
65
79
|
end
|
66
80
|
|
67
81
|
# Iterates over a single page of results based upon current pagination settings
|
@@ -139,7 +153,7 @@ module Nylas
|
|
139
153
|
# @return [Hash] Specification for request to be passed to {API#execute}
|
140
154
|
def to_be_executed
|
141
155
|
{ method: :get, path: resources_path, query: constraints.to_query,
|
142
|
-
headers: constraints.to_headers }
|
156
|
+
headers: constraints.to_headers, auth_method: model.auth_method }
|
143
157
|
end
|
144
158
|
|
145
159
|
# Retrieves the data from the API for the particular constraints
|
data/lib/nylas/component.rb
CHANGED
@@ -4,8 +4,13 @@ module Nylas
|
|
4
4
|
# Structure to represent a the Component Schema.
|
5
5
|
class Component
|
6
6
|
include Model
|
7
|
-
|
8
|
-
|
7
|
+
self.creatable = true
|
8
|
+
self.listable = true
|
9
|
+
self.showable = true
|
10
|
+
self.filterable = true
|
11
|
+
self.updatable = true
|
12
|
+
self.destroyable = true
|
13
|
+
self.auth_method = HttpClient::AuthMethod::BASIC
|
9
14
|
|
10
15
|
attribute :id, :string, read_only: true
|
11
16
|
attribute :account_id, :string
|
data/lib/nylas/deltas.rb
CHANGED
data/lib/nylas/draft.rb
CHANGED
@@ -6,7 +6,13 @@ module Nylas
|
|
6
6
|
class Draft
|
7
7
|
include Model
|
8
8
|
self.resources_path = "/drafts"
|
9
|
-
|
9
|
+
self.creatable = true
|
10
|
+
self.listable = true
|
11
|
+
self.showable = true
|
12
|
+
self.updatable = true
|
13
|
+
self.destroyable = true
|
14
|
+
self.id_listable = true
|
15
|
+
self.countable = true
|
10
16
|
|
11
17
|
attribute :id, :string
|
12
18
|
attribute :object, :string
|
data/lib/nylas/event.rb
CHANGED
@@ -6,8 +6,14 @@ module Nylas
|
|
6
6
|
class Event
|
7
7
|
include Model
|
8
8
|
self.resources_path = "/events"
|
9
|
-
|
10
|
-
|
9
|
+
self.creatable = true
|
10
|
+
self.listable = true
|
11
|
+
self.showable = true
|
12
|
+
self.filterable = true
|
13
|
+
self.updatable = true
|
14
|
+
self.destroyable = true
|
15
|
+
self.id_listable = true
|
16
|
+
self.countable = true
|
11
17
|
|
12
18
|
attribute :id, :string, read_only: true
|
13
19
|
attribute :object, :string, read_only: true
|
@@ -16,7 +22,9 @@ module Nylas
|
|
16
22
|
attribute :master_event_id, :string
|
17
23
|
attribute :message_id, :string
|
18
24
|
attribute :ical_uid, :string
|
25
|
+
attribute :event_collection_id, :string
|
19
26
|
|
27
|
+
attribute :capacity, :integer
|
20
28
|
attribute :busy, :boolean
|
21
29
|
attribute :description, :string
|
22
30
|
attribute :location, :string
|
@@ -30,7 +38,10 @@ module Nylas
|
|
30
38
|
attribute :metadata, :hash
|
31
39
|
attribute :conferencing, :event_conferencing
|
32
40
|
has_n_of_attribute :notifications, :event_notification
|
41
|
+
has_n_of_attribute :round_robin_order, :string
|
33
42
|
attribute :original_start_time, :unix_timestamp
|
43
|
+
attribute :reminder_minutes, :string
|
44
|
+
attribute :reminder_method, :string
|
34
45
|
attribute :job_status_id, :string, read_only: true
|
35
46
|
|
36
47
|
attr_accessor :notify_participants
|
@@ -44,12 +55,8 @@ module Nylas
|
|
44
55
|
end
|
45
56
|
|
46
57
|
def save
|
47
|
-
|
48
|
-
|
49
|
-
if body.dig(:conferencing, :details) && body.dig(:conferencing, :autocreate)
|
50
|
-
raise ArgumentError, "Cannot set both 'details' and 'autocreate' in conferencing object."
|
51
|
-
end
|
52
|
-
end
|
58
|
+
validate
|
59
|
+
format_reminder_minutes
|
53
60
|
|
54
61
|
super
|
55
62
|
end
|
@@ -81,6 +88,18 @@ module Nylas
|
|
81
88
|
|
82
89
|
private
|
83
90
|
|
91
|
+
def validate
|
92
|
+
if conferencing
|
93
|
+
body = to_h
|
94
|
+
if body.dig(:conferencing, :details) && body.dig(:conferencing, :autocreate)
|
95
|
+
raise ArgumentError, "Cannot set both 'details' and 'autocreate' in conferencing object."
|
96
|
+
end
|
97
|
+
end
|
98
|
+
return unless capacity && capacity != -1 && participants && participants.length > capacity
|
99
|
+
|
100
|
+
raise ArgumentError, "The number of participants in the event exceeds the set capacity."
|
101
|
+
end
|
102
|
+
|
84
103
|
def build_ics_event_payload(ical_uid, method, prodid)
|
85
104
|
payload = {}
|
86
105
|
if id
|
@@ -101,6 +120,13 @@ module Nylas
|
|
101
120
|
payload
|
102
121
|
end
|
103
122
|
|
123
|
+
# Formats the reminder minute field to match the API format: "[%d]"
|
124
|
+
def format_reminder_minutes
|
125
|
+
return if reminder_minutes.nil? || reminder_minutes.empty? || reminder_minutes.match(/\[\d+\]/)
|
126
|
+
|
127
|
+
self.reminder_minutes = "[#{reminder_minutes}]"
|
128
|
+
end
|
129
|
+
|
104
130
|
def query_params
|
105
131
|
if notify_participants.nil?
|
106
132
|
{}
|
data/lib/nylas/file.rb
CHANGED
@@ -6,7 +6,13 @@ module Nylas
|
|
6
6
|
class File
|
7
7
|
include Model
|
8
8
|
self.resources_path = "/files"
|
9
|
-
|
9
|
+
self.creatable = true
|
10
|
+
self.listable = true
|
11
|
+
self.showable = true
|
12
|
+
self.filterable = true
|
13
|
+
self.destroyable = true
|
14
|
+
self.id_listable = true
|
15
|
+
self.countable = true
|
10
16
|
|
11
17
|
attribute :id, :string
|
12
18
|
attribute :account_id, :string
|
data/lib/nylas/folder.rb
CHANGED
data/lib/nylas/http_client.rb
CHANGED
@@ -2,10 +2,16 @@
|
|
2
2
|
|
3
3
|
module Nylas
|
4
4
|
require "yajl"
|
5
|
+
require "base64"
|
5
6
|
|
6
7
|
# Plain HTTP client that can be used to interact with the Nylas API sans any type casting.
|
7
|
-
class HttpClient
|
8
|
-
|
8
|
+
class HttpClient
|
9
|
+
module AuthMethod
|
10
|
+
BEARER = 1
|
11
|
+
BASIC = 2
|
12
|
+
end
|
13
|
+
|
14
|
+
HTTP_SUCCESS_CODES = [200, 201, 202, 302].freeze
|
9
15
|
|
10
16
|
HTTP_CODE_TO_EXCEPTIONS = {
|
11
17
|
400 => InvalidRequest,
|
@@ -33,7 +39,8 @@ module Nylas
|
|
33
39
|
"/delta/longpoll" => 3650,
|
34
40
|
"/delta/streaming" => 3650
|
35
41
|
}.freeze
|
36
|
-
|
42
|
+
|
43
|
+
SUPPORTED_API_VERSION = "2.5"
|
37
44
|
|
38
45
|
include Logging
|
39
46
|
attr_accessor :api_server
|
@@ -73,9 +80,10 @@ module Nylas
|
|
73
80
|
# @param query [Hash] (Optional, defaults to {}) - Hash of names and values to include in the query
|
74
81
|
# section of the URI fragment
|
75
82
|
# @param payload [String,Hash] (Optional, defaults to nil) - Body to send with the request.
|
83
|
+
# @param auth_method [AuthMethod] (Optional, defaults to BEARER) - The authentication method.
|
76
84
|
# @return [Array Hash Stringn]
|
77
85
|
# rubocop:disable Metrics/MethodLength
|
78
|
-
def execute(method:, path: nil, headers: {}, query: {}, payload: nil)
|
86
|
+
def execute(method:, path: nil, headers: {}, query: {}, payload: nil, auth_method: nil)
|
79
87
|
timeout = ENDPOINT_TIMEOUTS.fetch(path, 230)
|
80
88
|
request = build_request(
|
81
89
|
method: method,
|
@@ -83,7 +91,8 @@ module Nylas
|
|
83
91
|
headers: headers,
|
84
92
|
query: query,
|
85
93
|
payload: payload,
|
86
|
-
timeout: timeout
|
94
|
+
timeout: timeout,
|
95
|
+
auth_method: auth_method || AuthMethod::BEARER
|
87
96
|
)
|
88
97
|
rest_client_execute(**request) do |response, _request, result|
|
89
98
|
content_type = nil
|
@@ -107,35 +116,64 @@ module Nylas
|
|
107
116
|
inform_on :execute, level: :debug,
|
108
117
|
also_log: { result: true, values: %i[method url path headers query payload] }
|
109
118
|
|
110
|
-
def build_request(
|
119
|
+
def build_request(
|
120
|
+
method:,
|
121
|
+
path: nil,
|
122
|
+
headers: {},
|
123
|
+
query: {},
|
124
|
+
payload: nil,
|
125
|
+
timeout: nil,
|
126
|
+
auth_method: nil
|
127
|
+
)
|
111
128
|
url ||= url_for_path(path)
|
112
129
|
url = add_query_params_to_url(url, query)
|
113
|
-
resulting_headers = default_headers.merge(headers)
|
130
|
+
resulting_headers = default_headers.merge(headers).merge(auth_header(auth_method))
|
114
131
|
{ method: method, url: url, payload: payload, headers: resulting_headers, timeout: timeout }
|
115
132
|
end
|
116
133
|
|
117
134
|
# Syntactical sugar for making GET requests via the API.
|
118
135
|
# @see #execute
|
119
|
-
def get(path: nil, headers: {}, query: {})
|
120
|
-
execute(method: :get, path: path, query: query, headers: headers)
|
136
|
+
def get(path: nil, headers: {}, query: {}, auth_method: nil)
|
137
|
+
execute(method: :get, path: path, query: query, headers: headers, auth_method: auth_method)
|
121
138
|
end
|
122
139
|
|
123
140
|
# Syntactical sugar for making POST requests via the API.
|
124
141
|
# @see #execute
|
125
|
-
def post(path: nil, payload: nil, headers: {}, query: {})
|
126
|
-
execute(
|
142
|
+
def post(path: nil, payload: nil, headers: {}, query: {}, auth_method: nil)
|
143
|
+
execute(
|
144
|
+
method: :post,
|
145
|
+
path: path,
|
146
|
+
headers: headers,
|
147
|
+
query: query,
|
148
|
+
payload: payload,
|
149
|
+
auth_method: auth_method
|
150
|
+
)
|
127
151
|
end
|
128
152
|
|
129
153
|
# Syntactical sugar for making PUT requests via the API.
|
130
154
|
# @see #execute
|
131
|
-
def put(path: nil, payload:, headers: {}, query: {})
|
132
|
-
execute(
|
155
|
+
def put(path: nil, payload:, headers: {}, query: {}, auth_method: nil)
|
156
|
+
execute(
|
157
|
+
method: :put,
|
158
|
+
path: path,
|
159
|
+
headers: headers,
|
160
|
+
query: query,
|
161
|
+
payload: payload,
|
162
|
+
auth_method: auth_method
|
163
|
+
)
|
133
164
|
end
|
134
165
|
|
135
166
|
# Syntactical sugar for making DELETE requests via the API.
|
136
167
|
# @see #execute
|
137
|
-
def delete(path: nil, payload: nil, headers: {}, query: {})
|
138
|
-
execute(
|
168
|
+
def delete(path: nil, payload: nil, headers: {}, query: {}, auth_method: nil)
|
169
|
+
execute(
|
170
|
+
method: :delete,
|
171
|
+
path: path,
|
172
|
+
headers: headers,
|
173
|
+
query: query,
|
174
|
+
payload: payload,
|
175
|
+
auth_method: auth_method
|
176
|
+
)
|
139
177
|
end
|
140
178
|
|
141
179
|
def default_headers
|
@@ -216,5 +254,18 @@ module Nylas
|
|
216
254
|
|
217
255
|
query
|
218
256
|
end
|
257
|
+
|
258
|
+
def auth_header(auth_method)
|
259
|
+
authorization_string = case auth_method
|
260
|
+
when AuthMethod::BEARER
|
261
|
+
"Bearer #{access_token}"
|
262
|
+
when AuthMethod::BASIC
|
263
|
+
"Basic #{Base64.encode64("#{access_token}:")}"
|
264
|
+
else
|
265
|
+
"Bearer #{access_token}"
|
266
|
+
end
|
267
|
+
|
268
|
+
{ "Authorization" => authorization_string }
|
269
|
+
end
|
219
270
|
end
|
220
271
|
end
|
data/lib/nylas/job_status.rb
CHANGED
@@ -6,7 +6,7 @@ module Nylas
|
|
6
6
|
class JobStatus
|
7
7
|
include Model
|
8
8
|
self.resources_path = "/job-statuses"
|
9
|
-
|
9
|
+
self.listable = true
|
10
10
|
|
11
11
|
attribute :id, :string, read_only: true
|
12
12
|
attribute :account_id, :string, read_only: true
|
@@ -15,7 +15,8 @@ module Nylas
|
|
15
15
|
attribute :object, :string, read_only: true
|
16
16
|
attribute :status, :string, read_only: true
|
17
17
|
attribute :created_at, :unix_timestamp, read_only: true
|
18
|
-
attribute :
|
18
|
+
attribute :reason, :string, read_only: true
|
19
|
+
attribute :metadata, :hash, read_only: true
|
19
20
|
|
20
21
|
# Returns the status of a job as a boolean
|
21
22
|
# @return [Boolean] If the job was successful
|
@@ -0,0 +1,21 @@
|
|
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 JobStatusCollection < Collection
|
7
|
+
def find_model(id)
|
8
|
+
response = api.execute(
|
9
|
+
**to_be_executed.merge(
|
10
|
+
path: "#{resources_path}/#{id}",
|
11
|
+
query: view_query
|
12
|
+
)
|
13
|
+
)
|
14
|
+
|
15
|
+
object_type = response[:object]
|
16
|
+
return OutboxJobStatus.from_hash(response, api: api) if object_type == "message"
|
17
|
+
|
18
|
+
model.from_hash(response, api: api)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/nylas/label.rb
CHANGED
data/lib/nylas/message.rb
CHANGED
@@ -7,7 +7,13 @@ module Nylas
|
|
7
7
|
include Model
|
8
8
|
self.raw_mime_type = "message/rfc822"
|
9
9
|
self.resources_path = "/messages"
|
10
|
-
|
10
|
+
self.listable = true
|
11
|
+
self.showable = true
|
12
|
+
self.filterable = true
|
13
|
+
self.updatable = true
|
14
|
+
self.searchable = true
|
15
|
+
self.id_listable = true
|
16
|
+
self.countable = true
|
11
17
|
UPDATABLE_ATTRIBUTES = %i[label_ids folder_id starred unread metadata].freeze
|
12
18
|
|
13
19
|
attribute :id, :string
|
@@ -37,6 +43,7 @@ module Nylas
|
|
37
43
|
attribute :folder, :folder
|
38
44
|
attribute :folder_id, :string
|
39
45
|
attribute :metadata, :hash
|
46
|
+
attribute :reply_to_message_id, :string, read_only: true
|
40
47
|
attribute :job_status_id, :string, read_only: true
|
41
48
|
|
42
49
|
has_n_of_attribute :labels, :label, read_only: true
|