nylas 5.17.0 → 6.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/nylas/client.rb +121 -0
- data/lib/nylas/config.rb +19 -0
- data/lib/nylas/errors.rb +63 -89
- data/lib/nylas/handler/api_operations.rb +162 -0
- data/lib/nylas/handler/http_client.rb +252 -0
- data/lib/nylas/resources/applications.rb +27 -0
- data/lib/nylas/resources/attachments.rb +65 -0
- data/lib/nylas/resources/auth.rb +209 -0
- data/lib/nylas/resources/calendars.rb +101 -0
- data/lib/nylas/resources/connectors.rb +80 -0
- data/lib/nylas/resources/contacts.rb +89 -0
- data/lib/nylas/resources/credentials.rb +75 -0
- data/lib/nylas/resources/drafts.rb +121 -0
- data/lib/nylas/resources/events.rb +98 -0
- data/lib/nylas/resources/folders.rb +73 -0
- data/lib/nylas/resources/grants.rb +59 -0
- data/lib/nylas/resources/messages.rb +135 -0
- data/lib/nylas/resources/redirect_uris.rb +68 -0
- data/lib/nylas/resources/resource.rb +18 -0
- data/lib/nylas/resources/smart_compose.rb +36 -0
- data/lib/nylas/resources/threads.rb +62 -0
- data/lib/nylas/resources/webhooks.rb +121 -0
- data/lib/nylas/utils/file_utils.rb +61 -0
- data/lib/nylas/version.rb +1 -1
- data/lib/nylas.rb +31 -148
- metadata +88 -247
- data/lib/nylas/account.rb +0 -56
- data/lib/nylas/api.rb +0 -246
- data/lib/nylas/application_details.rb +0 -13
- data/lib/nylas/calendar.rb +0 -46
- data/lib/nylas/calendar_collection.rb +0 -144
- data/lib/nylas/categorize.rb +0 -14
- data/lib/nylas/collection.rb +0 -175
- data/lib/nylas/component.rb +0 -35
- data/lib/nylas/component_collection.rb +0 -10
- data/lib/nylas/constraints.rb +0 -56
- data/lib/nylas/contact.rb +0 -53
- data/lib/nylas/contact_group.rb +0 -23
- data/lib/nylas/current_account.rb +0 -23
- data/lib/nylas/delta.rb +0 -56
- data/lib/nylas/deltas.rb +0 -19
- data/lib/nylas/deltas_collection.rb +0 -40
- data/lib/nylas/draft.rb +0 -100
- data/lib/nylas/email_address.rb +0 -12
- data/lib/nylas/event.rb +0 -144
- data/lib/nylas/event_collection.rb +0 -15
- data/lib/nylas/event_conferencing.rb +0 -12
- data/lib/nylas/event_conferencing_autocreate.rb +0 -10
- data/lib/nylas/event_conferencing_details.rb +0 -14
- data/lib/nylas/event_notification.rb +0 -17
- data/lib/nylas/file.rb +0 -75
- data/lib/nylas/filter_attributes.rb +0 -25
- data/lib/nylas/folder.rb +0 -26
- data/lib/nylas/free_busy.rb +0 -13
- data/lib/nylas/free_busy_collection.rb +0 -48
- data/lib/nylas/http_client.rb +0 -279
- data/lib/nylas/im_address.rb +0 -11
- data/lib/nylas/job_status.rb +0 -27
- data/lib/nylas/job_status_collection.rb +0 -21
- data/lib/nylas/label.rb +0 -27
- data/lib/nylas/logging.rb +0 -41
- data/lib/nylas/message.rb +0 -98
- data/lib/nylas/message_headers.rb +0 -27
- data/lib/nylas/message_tracking.rb +0 -13
- data/lib/nylas/model/attributable.rb +0 -89
- data/lib/nylas/model/attribute_definition.rb +0 -24
- data/lib/nylas/model/attributes.rb +0 -97
- data/lib/nylas/model/list_attribute_definition.rb +0 -39
- data/lib/nylas/model/transferable.rb +0 -53
- data/lib/nylas/model.rb +0 -217
- data/lib/nylas/native_authentication.rb +0 -39
- data/lib/nylas/neural.rb +0 -87
- data/lib/nylas/neural_categorizer.rb +0 -29
- data/lib/nylas/neural_clean_conversation.rb +0 -33
- data/lib/nylas/neural_contact_link.rb +0 -11
- data/lib/nylas/neural_contact_name.rb +0 -11
- data/lib/nylas/neural_message_options.rb +0 -35
- data/lib/nylas/neural_ocr.rb +0 -16
- data/lib/nylas/neural_sentiment_analysis.rb +0 -17
- data/lib/nylas/neural_signature_contact.rb +0 -81
- data/lib/nylas/neural_signature_extraction.rb +0 -18
- data/lib/nylas/new_message.rb +0 -39
- data/lib/nylas/nylas_date.rb +0 -25
- data/lib/nylas/open_hours.rb +0 -15
- data/lib/nylas/outbox.rb +0 -116
- data/lib/nylas/outbox_job_status.rb +0 -19
- data/lib/nylas/outbox_message.rb +0 -17
- data/lib/nylas/participant.rb +0 -13
- data/lib/nylas/phone_number.rb +0 -11
- data/lib/nylas/physical_address.rb +0 -17
- data/lib/nylas/raw_message.rb +0 -25
- data/lib/nylas/recurrence.rb +0 -11
- data/lib/nylas/registry.rb +0 -42
- data/lib/nylas/room_resource.rb +0 -19
- data/lib/nylas/rsvp.rb +0 -24
- data/lib/nylas/scheduler.rb +0 -51
- data/lib/nylas/scheduler_booking_confirmation.rb +0 -24
- data/lib/nylas/scheduler_booking_request.rb +0 -17
- data/lib/nylas/scheduler_collection.rb +0 -104
- data/lib/nylas/scheduler_config.rb +0 -20
- data/lib/nylas/scheduler_time_slot.rb +0 -14
- data/lib/nylas/search_collection.rb +0 -10
- data/lib/nylas/send_grid_verified_status.rb +0 -12
- data/lib/nylas/services/tunnel.rb +0 -128
- data/lib/nylas/thread.rb +0 -66
- data/lib/nylas/time_slot.rb +0 -16
- data/lib/nylas/time_slot_capacity.rb +0 -13
- data/lib/nylas/timespan.rb +0 -20
- data/lib/nylas/token_info.rb +0 -20
- data/lib/nylas/types.rb +0 -168
- data/lib/nylas/web_page.rb +0 -11
- data/lib/nylas/webhook.rb +0 -111
- data/lib/nylas/when.rb +0 -75
data/lib/nylas/constraints.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# The constraints a particular GET request will include in their query params
|
5
|
-
class Constraints
|
6
|
-
attr_accessor :where, :limit, :offset, :view, :per_page, :accept
|
7
|
-
|
8
|
-
def initialize(where: {}, limit: nil, offset: 0, view: nil, per_page: 100, accept: "application/json")
|
9
|
-
self.where = where
|
10
|
-
self.limit = limit
|
11
|
-
self.offset = offset
|
12
|
-
self.view = view
|
13
|
-
self.per_page = per_page
|
14
|
-
self.accept = accept
|
15
|
-
end
|
16
|
-
|
17
|
-
def merge(where: {}, limit: nil, offset: nil, view: nil, per_page: nil, accept: nil)
|
18
|
-
Constraints.new(where: self.where.merge(where),
|
19
|
-
limit: limit || self.limit,
|
20
|
-
per_page: per_page || self.per_page,
|
21
|
-
offset: offset || self.offset,
|
22
|
-
view: view || self.view,
|
23
|
-
accept: accept || self.accept)
|
24
|
-
end
|
25
|
-
|
26
|
-
def next_page
|
27
|
-
merge(offset: offset + per_page)
|
28
|
-
end
|
29
|
-
|
30
|
-
def to_query
|
31
|
-
query = where.each_with_object({}) do |(name, value), result|
|
32
|
-
result[name] = value
|
33
|
-
end
|
34
|
-
query[:limit] = limit_for_query
|
35
|
-
query[:offset] = offset unless offset.nil?
|
36
|
-
query[:view] = view unless view.nil?
|
37
|
-
query
|
38
|
-
end
|
39
|
-
|
40
|
-
def to_headers
|
41
|
-
accept == "application/json" ? {} : { "Accept" => accept, "Content-types" => accept }
|
42
|
-
end
|
43
|
-
|
44
|
-
def limit_for_query
|
45
|
-
!limit.nil? && limit < per_page ? limit : per_page
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.from_constraints(constraints = Constraints.new)
|
49
|
-
return constraints if constraints.is_a?(Constraints)
|
50
|
-
return new(**constraints) if constraints.respond_to?(:key?)
|
51
|
-
return new if constraints.nil?
|
52
|
-
|
53
|
-
raise TypeError, "passed in constraints #{constraints} cannot be cast to a set of constraints"
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
data/lib/nylas/contact.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# ActiveModel compliant interface for interacting with the Contacts API
|
5
|
-
# @see https://docs.nylas.com/reference#contacts
|
6
|
-
class Contact
|
7
|
-
include Model
|
8
|
-
self.resources_path = "/contacts"
|
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
|
-
|
16
|
-
attribute :id, :string, read_only: true
|
17
|
-
attribute :object, :string, default: "contact"
|
18
|
-
attribute :account_id, :string, read_only: true
|
19
|
-
|
20
|
-
attribute :given_name, :string
|
21
|
-
attribute :middle_name, :string
|
22
|
-
attribute :picture_url, :string
|
23
|
-
attribute :surname, :string
|
24
|
-
attribute :birthday, :string
|
25
|
-
attribute :suffix, :string
|
26
|
-
attribute :nickname, :string
|
27
|
-
attribute :company_name, :string
|
28
|
-
attribute :job_title, :string
|
29
|
-
attribute :manager_name, :string
|
30
|
-
attribute :office_location, :string
|
31
|
-
attribute :notes, :string
|
32
|
-
attribute :source, :string
|
33
|
-
attribute :job_status_id, :string, read_only: true
|
34
|
-
|
35
|
-
has_n_of_attribute :groups, :contact_group
|
36
|
-
has_n_of_attribute :emails, :email_address
|
37
|
-
has_n_of_attribute :im_addresses, :im_address
|
38
|
-
has_n_of_attribute :physical_addresses, :physical_address
|
39
|
-
has_n_of_attribute :phone_numbers, :phone_number
|
40
|
-
has_n_of_attribute :web_pages, :web_page
|
41
|
-
|
42
|
-
# @returns [Tempfile] path to the retrieved picture. It is preferrable to cache this in your system than
|
43
|
-
# to retrieve it from nylas every time.
|
44
|
-
def picture
|
45
|
-
return @picture_tempfile if @picture_tempfile
|
46
|
-
|
47
|
-
@picture_tempfile = Tempfile.new
|
48
|
-
@picture_tempfile.write(api.get(path: "#{resource_path}/picture"))
|
49
|
-
@picture_tempfile.close
|
50
|
-
@picture_tempfile
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
data/lib/nylas/contact_group.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Structure to represent the Contact Group schema
|
5
|
-
# @see https://docs.nylas.com/reference#contactsid
|
6
|
-
class ContactGroup
|
7
|
-
include Model
|
8
|
-
self.resources_path = "/contacts/groups"
|
9
|
-
|
10
|
-
self.creatable = false
|
11
|
-
self.destroyable = false
|
12
|
-
self.filterable = false
|
13
|
-
self.listable = true
|
14
|
-
self.showable = false
|
15
|
-
self.updatable = false
|
16
|
-
|
17
|
-
attribute :id, :string
|
18
|
-
attribute :object, :string
|
19
|
-
attribute :account_id, :string
|
20
|
-
attribute :name, :string
|
21
|
-
attribute :path, :string
|
22
|
-
end
|
23
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Ruby representation of the Nylas /account API
|
5
|
-
# @see https://docs.nylas.com/reference#account
|
6
|
-
class CurrentAccount
|
7
|
-
include Model
|
8
|
-
self.showable = true
|
9
|
-
|
10
|
-
self.resources_path = "/account"
|
11
|
-
|
12
|
-
attribute :id, :string
|
13
|
-
attribute :object, :string, default: "account"
|
14
|
-
|
15
|
-
attribute :account_id, :string
|
16
|
-
attribute :email_address, :string
|
17
|
-
attribute :name, :string
|
18
|
-
attribute :organization_unit, :string
|
19
|
-
attribute :provider, :string
|
20
|
-
attribute :sync_state, :string
|
21
|
-
attribute :linked_at, :unix_timestamp
|
22
|
-
end
|
23
|
-
end
|
data/lib/nylas/delta.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Ruby object to represent a single change. Used both when receiving a webhook, as well as the deltas API.
|
5
|
-
# @see https://docs.nylas.com/reference#receiving-notifications
|
6
|
-
# @see https://docs.nylas.com/reference#deltas
|
7
|
-
class Delta
|
8
|
-
include Model::Attributable
|
9
|
-
|
10
|
-
attribute :id, :string
|
11
|
-
attribute :type, :string
|
12
|
-
attribute :object, :string
|
13
|
-
attribute :event, :string
|
14
|
-
attribute :cursor, :string
|
15
|
-
attribute :namespace_id, :string
|
16
|
-
attribute :account_id, :string
|
17
|
-
|
18
|
-
attribute :headers, :message_headers
|
19
|
-
|
20
|
-
attribute :date, :unix_timestamp
|
21
|
-
attribute :metadata, :hash
|
22
|
-
attribute :object_attributes, :hash
|
23
|
-
|
24
|
-
def model
|
25
|
-
return nil if object.nil?
|
26
|
-
|
27
|
-
@model ||= Types.registry[object.to_sym].cast(object_attributes_with_ids)
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def object_attributes_with_ids
|
33
|
-
(object_attributes || {}).merge(id: id, account_id: account_id)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# Casts Delta data from either a webhook or a delta stream to a Delta
|
38
|
-
class DeltaType < Types::ModelType
|
39
|
-
def initialize
|
40
|
-
super(model: Delta)
|
41
|
-
end
|
42
|
-
|
43
|
-
def cast(data)
|
44
|
-
data = if data.key?(:object_data)
|
45
|
-
object_data = data.delete(:object_data)
|
46
|
-
data.merge(object_data)
|
47
|
-
else
|
48
|
-
data
|
49
|
-
end
|
50
|
-
|
51
|
-
data = data.merge(data[:attributes]) if data[:attributes]
|
52
|
-
data[:object_attributes] = data.delete(:attributes)
|
53
|
-
super(**data)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
data/lib/nylas/deltas.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Ruby object to represent a collection of changes. Used both when receiving a webhook, as well as the
|
5
|
-
# deltas API.
|
6
|
-
# @see https://docs.nylas.com/reference#receiving-notifications
|
7
|
-
# @see https://docs.nylas.com/reference#deltas
|
8
|
-
class Deltas
|
9
|
-
include Model
|
10
|
-
self.resources_path = "/delta"
|
11
|
-
self.filterable = true
|
12
|
-
has_n_of_attribute :deltas, :delta
|
13
|
-
attribute :cursor_start, :string
|
14
|
-
attribute :cursor_end, :string
|
15
|
-
|
16
|
-
extend Forwardable
|
17
|
-
def_delegators :deltas, :count, :length, :each, :map, :first, :last, :to_a, :empty?
|
18
|
-
end
|
19
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Special collection for delta objects
|
5
|
-
class DeltasCollection < Collection
|
6
|
-
attr_accessor :deltas
|
7
|
-
|
8
|
-
extend Forwardable
|
9
|
-
def_delegators :execute, :cursor_start, :cursor_end,
|
10
|
-
:count, :each, :to_h, :to_a, :empty?
|
11
|
-
|
12
|
-
def initialize(api:, constraints: nil, model: Deltas)
|
13
|
-
super(api: api, model: model, constraints: constraints)
|
14
|
-
end
|
15
|
-
|
16
|
-
def latest_cursor
|
17
|
-
api.execute(method: :post, path: "#{resources_path}/latest_cursor")[:cursor]
|
18
|
-
end
|
19
|
-
|
20
|
-
def latest
|
21
|
-
since(latest_cursor)
|
22
|
-
end
|
23
|
-
|
24
|
-
def since(cursor)
|
25
|
-
where(cursor: cursor)
|
26
|
-
end
|
27
|
-
|
28
|
-
def next_page(*)
|
29
|
-
return nil if empty?
|
30
|
-
|
31
|
-
where(cursor: cursor_end)
|
32
|
-
end
|
33
|
-
|
34
|
-
# Retrieves the data from the API for the particular constraints
|
35
|
-
# @return [Detlas]
|
36
|
-
def execute
|
37
|
-
self.deltas ||= Deltas.new(**api.execute(**to_be_executed))
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
data/lib/nylas/draft.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Ruby representatin of a Nylas Draft object
|
5
|
-
# @see https://docs.nylas.com/reference#drafts
|
6
|
-
class Draft
|
7
|
-
include Model
|
8
|
-
self.resources_path = "/drafts"
|
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
|
16
|
-
|
17
|
-
attribute :id, :string
|
18
|
-
attribute :object, :string
|
19
|
-
attribute :version, :integer
|
20
|
-
attribute :account_id, :string
|
21
|
-
attribute :thread_id, :string
|
22
|
-
attribute :reply_to_message_id, :string
|
23
|
-
|
24
|
-
has_n_of_attribute :to, :email_address
|
25
|
-
has_n_of_attribute :from, :email_address
|
26
|
-
has_n_of_attribute :cc, :email_address
|
27
|
-
has_n_of_attribute :bcc, :email_address
|
28
|
-
has_n_of_attribute :reply_to, :email_address
|
29
|
-
|
30
|
-
attribute :date, :unix_timestamp
|
31
|
-
attribute :subject, :string
|
32
|
-
attribute :snippet, :string
|
33
|
-
attribute :body, :string
|
34
|
-
attribute :starred, :boolean
|
35
|
-
attribute :unread, :boolean
|
36
|
-
attribute :metadata, :hash
|
37
|
-
|
38
|
-
has_n_of_attribute :events, :event
|
39
|
-
has_n_of_attribute :files, :file, read_only: true
|
40
|
-
has_n_of_attribute :file_ids, :string
|
41
|
-
attribute :folder, :folder
|
42
|
-
has_n_of_attribute :labels, :label
|
43
|
-
|
44
|
-
attribute :tracking, :message_tracking
|
45
|
-
attribute :job_status_id, :string, read_only: true
|
46
|
-
|
47
|
-
transfer :api, to: %i[events files folder labels]
|
48
|
-
|
49
|
-
def update(**data)
|
50
|
-
# If files are provided, replace files with file IDs
|
51
|
-
self.files = data[:files] if data[:files]
|
52
|
-
extract_file_ids!
|
53
|
-
data[:file_ids] = file_ids
|
54
|
-
# If version is not provided, add version or request will fail
|
55
|
-
data[:version] = version unless data[:version]
|
56
|
-
|
57
|
-
super
|
58
|
-
end
|
59
|
-
|
60
|
-
def create
|
61
|
-
extract_file_ids!
|
62
|
-
|
63
|
-
super
|
64
|
-
end
|
65
|
-
|
66
|
-
def send!
|
67
|
-
return execute(method: :post, path: "/send", payload: to_json) unless id
|
68
|
-
|
69
|
-
data = { draft_id: id, version: version }
|
70
|
-
data[:tracking] = tracking.to_h if tracking
|
71
|
-
execute(method: :post, path: "/send", payload: JSON.dump(data))
|
72
|
-
end
|
73
|
-
|
74
|
-
def starred?
|
75
|
-
starred
|
76
|
-
end
|
77
|
-
|
78
|
-
def unread?
|
79
|
-
unread
|
80
|
-
end
|
81
|
-
|
82
|
-
def destroy
|
83
|
-
execute(method: :delete, path: resource_path, payload: attributes.serialize_for_api(keys: [:version]))
|
84
|
-
end
|
85
|
-
|
86
|
-
def save
|
87
|
-
extract_file_ids!
|
88
|
-
|
89
|
-
super
|
90
|
-
end
|
91
|
-
|
92
|
-
private
|
93
|
-
|
94
|
-
def extract_file_ids!
|
95
|
-
files = self.files || []
|
96
|
-
|
97
|
-
self.file_ids ||= files.map(&:id)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
data/lib/nylas/email_address.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Structure to represent the Email Address Schema
|
5
|
-
# @see https://docs.nylas.com/reference#contactsid
|
6
|
-
class EmailAddress
|
7
|
-
include Model::Attributable
|
8
|
-
attribute :type, :string
|
9
|
-
attribute :email, :string
|
10
|
-
attribute :name, :string
|
11
|
-
end
|
12
|
-
end
|
data/lib/nylas/event.rb
DELETED
@@ -1,144 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Structure to represent a the Event Schema.
|
5
|
-
# @see https://docs.nylas.com/reference#events
|
6
|
-
class Event
|
7
|
-
include Model
|
8
|
-
self.resources_path = "/events"
|
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
|
17
|
-
|
18
|
-
attribute :id, :string, read_only: true
|
19
|
-
attribute :object, :string, read_only: true
|
20
|
-
attribute :account_id, :string, read_only: true
|
21
|
-
attribute :calendar_id, :string
|
22
|
-
attribute :master_event_id, :string
|
23
|
-
attribute :message_id, :string
|
24
|
-
attribute :ical_uid, :string
|
25
|
-
attribute :event_collection_id, :string
|
26
|
-
|
27
|
-
attribute :capacity, :integer
|
28
|
-
attribute :busy, :boolean
|
29
|
-
attribute :description, :string
|
30
|
-
attribute :location, :string
|
31
|
-
attribute :owner, :string
|
32
|
-
attribute :recurrence, :recurrence
|
33
|
-
has_n_of_attribute :participants, :participant
|
34
|
-
attribute :read_only, :boolean
|
35
|
-
attribute :status, :string
|
36
|
-
attribute :title, :string
|
37
|
-
attribute :when, :when
|
38
|
-
attribute :metadata, :hash
|
39
|
-
attribute :conferencing, :event_conferencing
|
40
|
-
has_n_of_attribute :notifications, :event_notification
|
41
|
-
has_n_of_attribute :round_robin_order, :string
|
42
|
-
attribute :original_start_time, :unix_timestamp
|
43
|
-
attribute :organizer_email, :string
|
44
|
-
attribute :organizer_name, :string
|
45
|
-
attribute :reminder_minutes, :string
|
46
|
-
attribute :reminder_method, :string
|
47
|
-
attribute :job_status_id, :string, read_only: true
|
48
|
-
attribute :visibility, :string
|
49
|
-
attribute :updated_at, :unix_timestamp, read_only: true
|
50
|
-
|
51
|
-
attr_accessor :notify_participants
|
52
|
-
|
53
|
-
def busy?
|
54
|
-
busy
|
55
|
-
end
|
56
|
-
|
57
|
-
def read_only?
|
58
|
-
read_only
|
59
|
-
end
|
60
|
-
|
61
|
-
def save
|
62
|
-
validate
|
63
|
-
format_reminder_minutes
|
64
|
-
|
65
|
-
super
|
66
|
-
end
|
67
|
-
|
68
|
-
def rsvp(status, notify_participants:)
|
69
|
-
rsvp = Rsvp.new(api: api, status: status, notify_participants: notify_participants,
|
70
|
-
event_id: id, account_id: account_id)
|
71
|
-
rsvp.save
|
72
|
-
end
|
73
|
-
|
74
|
-
# Generate an ICS file server-side, from an Event
|
75
|
-
# @param ical_uid [String] Unique identifier used events across calendaring systems
|
76
|
-
# @param method [String] Description of invitation and response methods for attendees
|
77
|
-
# @param prodid [String] Company-specific unique product identifier
|
78
|
-
# @return [String] String for writing directly into an ICS file
|
79
|
-
def generate_ics(ical_uid: nil, method: nil, prodid: nil)
|
80
|
-
raise ArgumentError, "Cannot generate an ICS file for an event without a Calendar ID or when set" unless
|
81
|
-
calendar_id && self.when
|
82
|
-
|
83
|
-
payload = build_ics_event_payload(ical_uid, method, prodid)
|
84
|
-
response = api.execute(
|
85
|
-
method: :post,
|
86
|
-
path: "#{resources_path}/to-ics",
|
87
|
-
payload: JSON.dump(payload)
|
88
|
-
)
|
89
|
-
|
90
|
-
response[:ics]
|
91
|
-
end
|
92
|
-
|
93
|
-
private
|
94
|
-
|
95
|
-
def validate
|
96
|
-
if conferencing
|
97
|
-
body = to_h
|
98
|
-
if body.dig(:conferencing, :details) && body.dig(:conferencing, :autocreate)
|
99
|
-
raise ArgumentError, "Cannot set both 'details' and 'autocreate' in conferencing object."
|
100
|
-
end
|
101
|
-
end
|
102
|
-
return unless capacity && capacity != -1 && participants && participants.length > capacity
|
103
|
-
|
104
|
-
raise ArgumentError, "The number of participants in the event exceeds the set capacity."
|
105
|
-
end
|
106
|
-
|
107
|
-
def build_ics_event_payload(ical_uid, method, prodid)
|
108
|
-
payload = {}
|
109
|
-
if id
|
110
|
-
payload[:event_id] = id
|
111
|
-
else
|
112
|
-
payload = to_h(enforce_read_only: true)
|
113
|
-
end
|
114
|
-
ics_options = build_ics_options_payload(ical_uid, method, prodid)
|
115
|
-
payload["ics_options"] = ics_options unless ics_options.empty?
|
116
|
-
payload
|
117
|
-
end
|
118
|
-
|
119
|
-
def build_ics_options_payload(ical_uid, method, prodid)
|
120
|
-
payload = {}
|
121
|
-
payload["ical_uid"] = ical_uid if ical_uid
|
122
|
-
payload["method"] = method if method
|
123
|
-
payload["prodid"] = prodid if prodid
|
124
|
-
payload
|
125
|
-
end
|
126
|
-
|
127
|
-
# Formats the reminder minute field to match the API format: "[%d]"
|
128
|
-
def format_reminder_minutes
|
129
|
-
return if reminder_minutes.nil? || reminder_minutes.empty? || reminder_minutes.match(/\[\d+\]/)
|
130
|
-
|
131
|
-
self.reminder_minutes = "[#{reminder_minutes}]"
|
132
|
-
end
|
133
|
-
|
134
|
-
def query_params
|
135
|
-
if notify_participants.nil?
|
136
|
-
{}
|
137
|
-
else
|
138
|
-
{
|
139
|
-
notify_participants: notify_participants
|
140
|
-
}
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Syntactical sugar methods for some of the Event's filters
|
5
|
-
# @see https://docs.nylas.com/reference#get-events
|
6
|
-
class EventCollection < Collection
|
7
|
-
def expand_recurring
|
8
|
-
where(expand_recurring: true)
|
9
|
-
end
|
10
|
-
|
11
|
-
def show_cancelled
|
12
|
-
where(show_cancelled: true)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Structure to represent the Event Conferencing object
|
5
|
-
# @see https://developer.nylas.com/docs/connectivity/calendar/conference-sync-beta
|
6
|
-
class EventConferencing
|
7
|
-
include Model::Attributable
|
8
|
-
attribute :provider, :string
|
9
|
-
attribute :details, :event_conferencing_details
|
10
|
-
attribute :autocreate, :event_conferencing_autocreate
|
11
|
-
end
|
12
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Structure to represent the autocreate object within the Event Conferencing object
|
5
|
-
# @see https://developer.nylas.com/docs/connectivity/calendar/conference-sync-beta
|
6
|
-
class EventConferencingAutocreate
|
7
|
-
include Model::Attributable
|
8
|
-
attribute :settings, :hash, default: {}
|
9
|
-
end
|
10
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Structure to represent the details object within the Event Conferencing object
|
5
|
-
# @see https://developer.nylas.com/docs/connectivity/calendar/conference-sync-beta
|
6
|
-
class EventConferencingDetails
|
7
|
-
include Model::Attributable
|
8
|
-
attribute :meeting_code, :string
|
9
|
-
attribute :password, :string
|
10
|
-
attribute :pin, :string
|
11
|
-
attribute :url, :string
|
12
|
-
has_n_of_attribute :phone, :string
|
13
|
-
end
|
14
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Structure to represent the Event Notification object
|
5
|
-
# @see https://developer.nylas.com/docs/connectivity/calendar/event-notifications
|
6
|
-
class EventNotification
|
7
|
-
include Model::Attributable
|
8
|
-
|
9
|
-
attribute :type, :string
|
10
|
-
attribute :minutes_before_event, :integer
|
11
|
-
attribute :url, :string
|
12
|
-
attribute :payload, :string
|
13
|
-
attribute :subject, :string
|
14
|
-
attribute :body, :string
|
15
|
-
attribute :message, :string
|
16
|
-
end
|
17
|
-
end
|
data/lib/nylas/file.rb
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
# Structure to represent a the File Schema.
|
5
|
-
# @see https://docs.nylas.com/reference#events
|
6
|
-
class File
|
7
|
-
include Model
|
8
|
-
self.resources_path = "/files"
|
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
|
16
|
-
|
17
|
-
attribute :id, :string
|
18
|
-
attribute :account_id, :string
|
19
|
-
attribute :content_id, :string
|
20
|
-
has_n_of_attribute :message_ids, :string
|
21
|
-
|
22
|
-
attribute :object, :string
|
23
|
-
|
24
|
-
attribute :content_type, :string
|
25
|
-
attribute :filename, :string
|
26
|
-
attribute :size, :integer
|
27
|
-
attribute :content_disposition, :string
|
28
|
-
|
29
|
-
attr_accessor :file
|
30
|
-
|
31
|
-
# Downloads and caches a local copy of the file.
|
32
|
-
# @return [Tempfile] - Local copy of the file
|
33
|
-
def download
|
34
|
-
return file if file
|
35
|
-
|
36
|
-
self.file = retrieve_file
|
37
|
-
end
|
38
|
-
|
39
|
-
# Redownloads a file even if it's been cached. Closes and unlinks the tempfile to help memory usage.
|
40
|
-
def download!
|
41
|
-
return download if file.nil?
|
42
|
-
|
43
|
-
file.close
|
44
|
-
file.unlink
|
45
|
-
self.file = nil
|
46
|
-
download
|
47
|
-
end
|
48
|
-
|
49
|
-
def create
|
50
|
-
save
|
51
|
-
end
|
52
|
-
|
53
|
-
def save
|
54
|
-
raise ModelNotUpdatableError if persisted?
|
55
|
-
|
56
|
-
response = api.execute(path: "/files", method: :post, headers: { multipart: true },
|
57
|
-
payload: { file: file })
|
58
|
-
attributes.merge(response.first)
|
59
|
-
true
|
60
|
-
end
|
61
|
-
|
62
|
-
private
|
63
|
-
|
64
|
-
def retrieve_file
|
65
|
-
response = api.get(path: "#{resource_path}/download")
|
66
|
-
filename = response.headers.fetch(:content_disposition, "").gsub("attachment; filename=", "")
|
67
|
-
# The returned filename can be longer than 256 chars which isn't supported by rb_sysopen.
|
68
|
-
# 128 chars here is more than enough given that TempFile ensure the filename will be unique.
|
69
|
-
temp_file = Tempfile.new(filename[0..127], encoding: "ascii-8bit")
|
70
|
-
temp_file.write(response.body)
|
71
|
-
temp_file.seek(0)
|
72
|
-
temp_file
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|