nylas 5.5.0 → 5.6.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 23edacaacec01d7cfd4c182647c30287d27b6ef790ec4abb7a83f98afa17782a
4
- data.tar.gz: 3303d603caaf9a5be367fd5983f5350a61460575ddd7978c475c7eaf8be88727
3
+ metadata.gz: 0bcbd7a865f3b26271776f6e5358647e8e8d9d92d29b9e33f1e942bb0153ea80
4
+ data.tar.gz: 8a16ead2bc3cccb8f29dcdcf97cbb128722f0f68acf843a96788426c440fbe6c
5
5
  SHA512:
6
- metadata.gz: af4b7703eb190cbebcc2dac2777ea8cc3a9dbc77dc07604ffd11b3d5aaf4b8085afe60512cca8698bae58f1729c6adee6dd3fe03ae68bb0139ce0c0f208f91cb
7
- data.tar.gz: f2060e79d3fe69ba18cb7fc35647504b4f5c66c0ba7c8e41d861b058991e109c5c2a0ec3c1a505eb9ec11d45c8ee9f359f988ade593685af5bf6a157b1029833
6
+ metadata.gz: 2678a4be307e3870b12d605f5cac42878a884ac97e562ce9cb372d2db54135d9f12ebec4422910efff329e81f4beffa59fe485192f8974832a8d8957cf622431
7
+ data.tar.gz: 8f77887a487ee85104aae6557bbdf6a39f2fd96bd5fc5265f68e7923655fed39eb2269d9a59d6fc0209ead37cc3cc8b272fbe496ad08e027e64f2c5ab841ed6e
data/lib/nylas/account.rb CHANGED
@@ -7,15 +7,17 @@ module Nylas
7
7
  include Model
8
8
  self.listable = true
9
9
  self.showable = true
10
+ self.updatable = true
10
11
 
11
- attribute :id, :string
12
- attribute :account_id, :string
13
- attribute :billing_state, :string
14
- attribute :sync_state, :string
15
- attribute :provider, :string
12
+ attribute :id, :string, read_only: true
13
+ attribute :account_id, :string, read_only: true
14
+ attribute :billing_state, :string, read_only: true
15
+ attribute :sync_state, :string, read_only: true
16
+ attribute :provider, :string, read_only: true
16
17
 
17
- attribute :email, :string
18
- attribute :trial, :boolean
18
+ attribute :email, :string, read_only: true
19
+ attribute :trial, :boolean, read_only: true
20
+ attribute :metadata, :hash
19
21
 
20
22
  def upgrade
21
23
  response = execute(method: :post, path: "#{resource_path}/upgrade")
data/lib/nylas/api.rb CHANGED
@@ -48,7 +48,11 @@ module Nylas
48
48
  "#{api_server}/oauth/authorize?#{URI.encode_www_form(params)}"
49
49
  end
50
50
 
51
- def exchange_code_for_token(code)
51
+ # Exchanges an authorization code for an access token
52
+ # @param code [String] The authorization code to exchange
53
+ # @param return_full_response [Boolean] If true, returns the full response body instead of just the token
54
+ # @return [String | Hash] Returns just the access token as a string, or the full response as a hash
55
+ def exchange_code_for_token(code, return_full_response: false)
52
56
  data = {
53
57
  "client_id" => app_id,
54
58
  "client_secret" => client.app_secret,
@@ -56,8 +60,8 @@ module Nylas
56
60
  "code" => code
57
61
  }
58
62
 
59
- response_json = execute(method: :post, path: "/oauth/token", payload: data)
60
- response_json[:access_token]
63
+ response = execute(method: :post, path: "/oauth/token", payload: data)
64
+ return_full_response ? response : response[:access_token]
61
65
  end
62
66
 
63
67
  # @return [Collection<Contact>] A queryable collection of Contacts
@@ -81,7 +85,7 @@ module Nylas
81
85
  @accounts ||= Collection.new(model: Account, api: as(client.app_secret))
82
86
  end
83
87
 
84
- # @return [Collection<Calendar>] A queryable collection of {Calendar}s
88
+ # @return [CalendarCollection<Calendar>] A queryable collection of {Calendar}s
85
89
  def calendars
86
90
  @calendars ||= CalendarCollection.new(model: Calendar, api: self)
87
91
  end
@@ -96,7 +100,7 @@ module Nylas
96
100
  @drafts ||= Collection.new(model: Draft, api: self)
97
101
  end
98
102
 
99
- # @return [Collection<Event>] A queryable collection of {Event}s
103
+ # @return [EventCollection<Event>] A queryable collection of {Event}s
100
104
  def events
101
105
  @events ||= EventCollection.new(model: Event, api: self)
102
106
  end
@@ -126,12 +130,12 @@ module Nylas
126
130
  @room_resources ||= Collection.new(model: RoomResource, api: self)
127
131
  end
128
132
 
129
- # @return[Collection<Scheduler>] A queryable collection of {Scheduler} objects
133
+ # @return[SchedulerCollection<Scheduler>] A queryable collection of {Scheduler} objects
130
134
  def scheduler
131
135
  # Make a deep copy of the API as the scheduler API uses a different base URL
132
136
  scheduler_api = Marshal.load(Marshal.dump(self))
133
137
  scheduler_api.client.api_server = "https://api.schedule.nylas.com"
134
- @scheduler ||= Collection.new(model: Scheduler, api: scheduler_api)
138
+ @scheduler ||= SchedulerCollection.new(model: Scheduler, api: scheduler_api)
135
139
  end
136
140
 
137
141
  # @return[Neural] A {Neural} object that provides
@@ -6,7 +6,8 @@ module Nylas
6
6
  class Calendar
7
7
  include Model
8
8
  self.resources_path = "/calendars"
9
- allows_operations(listable: true, filterable: true, showable: true)
9
+ allows_operations(creatable: true, listable: true, filterable: true, showable: true, updatable: true,
10
+ destroyable: true)
10
11
 
11
12
  attribute :id, :string
12
13
  attribute :account_id, :string
@@ -20,6 +21,7 @@ module Nylas
20
21
  attribute :timezone, :string
21
22
 
22
23
  attribute :read_only, :boolean
24
+ attribute :metadata, :hash
23
25
 
24
26
  def read_only?
25
27
  read_only == true
data/lib/nylas/draft.rb CHANGED
@@ -75,14 +75,14 @@ module Nylas
75
75
  execute(method: :delete, path: resource_path, payload: attributes.serialize_for_api(keys: [:version]))
76
76
  end
77
77
 
78
- private
79
-
80
- def save_call
78
+ def save
81
79
  extract_file_ids!
82
80
 
83
81
  super
84
82
  end
85
83
 
84
+ private
85
+
86
86
  def extract_file_ids!
87
87
  files = self.files || []
88
88
 
data/lib/nylas/event.rb CHANGED
@@ -29,6 +29,7 @@ module Nylas
29
29
  attribute :when, :when
30
30
  attribute :metadata, :hash
31
31
  attribute :conferencing, :event_conferencing
32
+ has_n_of_attribute :notifications, :event_notification
32
33
  attribute :original_start_time, :unix_timestamp
33
34
 
34
35
  attr_accessor :notify_participants
@@ -0,0 +1,17 @@
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/message.rb CHANGED
@@ -8,7 +8,7 @@ module Nylas
8
8
  self.raw_mime_type = "message/rfc822"
9
9
  self.resources_path = "/messages"
10
10
  allows_operations(showable: true, listable: true, filterable: true, searchable: true, updatable: true)
11
- UPDATABLE_ATTRIBUTES = %i[label_ids folder_id starred unread].freeze
11
+ UPDATABLE_ATTRIBUTES = %i[label_ids folder_id starred unread metadata].freeze
12
12
 
13
13
  attribute :id, :string
14
14
  attribute :object, :string
@@ -36,6 +36,7 @@ module Nylas
36
36
  has_n_of_attribute :files, :file
37
37
  attribute :folder, :folder
38
38
  attribute :folder_id, :string
39
+ attribute :metadata, :hash
39
40
 
40
41
  has_n_of_attribute :labels, :label, read_only: true
41
42
  has_n_of_attribute :label_ids, :string
@@ -72,14 +73,10 @@ module Nylas
72
73
  self
73
74
  end
74
75
 
75
- def save_call
76
+ def save
76
77
  handle_folder
77
78
 
78
- execute(
79
- method: :put,
80
- payload: attributes.serialize_for_api,
81
- path: resource_path
82
- )
79
+ super
83
80
  end
84
81
 
85
82
  def handle_folder
data/lib/nylas/model.rb CHANGED
@@ -28,7 +28,7 @@ module Nylas
28
28
  result = if persisted?
29
29
  raise ModelNotUpdatableError, self unless updatable?
30
30
 
31
- save_call
31
+ update_call(attributes.serialize_for_api)
32
32
  else
33
33
  create
34
34
  end
@@ -120,14 +120,6 @@ module Nylas
120
120
 
121
121
  private
122
122
 
123
- def save_call
124
- execute(
125
- method: :put,
126
- payload: attributes.serialize_for_api,
127
- path: resource_path
128
- )
129
- end
130
-
131
123
  def update_call(payload)
132
124
  result = execute(
133
125
  method: :put,
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Nylas
4
+ # Structure to represent the booking response returned from the Scheduler API
5
+ class SchedulerBookingConfirmation
6
+ include Model::Attributable
7
+ attribute :id, :integer
8
+ attribute :account_id, :string
9
+ attribute :calendar_event_id, :string
10
+ attribute :calendar_id, :string
11
+ attribute :edit_hash, :string
12
+ attribute :location, :string
13
+ attribute :title, :string
14
+ attribute :recipient_email, :string
15
+ attribute :recipient_locale, :string
16
+ attribute :recipient_name, :string
17
+ attribute :recipient_tz, :string
18
+ attribute :additional_field_values, :hash
19
+ attribute :is_confirmed, :boolean
20
+ attribute :start_time, :unix_timestamp
21
+ attribute :end_time, :unix_timestamp
22
+ has_n_of_attribute :additional_emails, :string
23
+ end
24
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Nylas
4
+ # Structure to represent the booking request used for the Scheduler API
5
+ class SchedulerBookingRequest
6
+ include Model::Attributable
7
+ attribute :additional_values, :hash
8
+ attribute :email, :string
9
+ attribute :locale, :string
10
+ attribute :name, :string
11
+ attribute :page_hostname, :string
12
+ attribute :replaces_booking_hash, :string
13
+ attribute :timezone, :string
14
+ attribute :slot, :scheduler_time_slot
15
+ has_n_of_attribute :additional_emails, :string
16
+ end
17
+ end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Nylas
4
+ # Additional methods for some of Scheduler's other functionality
5
+ # @see https://developer.nylas.com/docs/api/scheduler#overview
6
+ class SchedulerCollection < Collection
7
+ # Retrieve Google availability
8
+ # @return [Hash] Returns the availability
9
+ def get_google_availability
10
+ execute_provider_availability("google")
11
+ end
12
+
13
+ # Retrieve Office 365 availability
14
+ # @return [Hash] Returns the availability
15
+ def get_office_365_availability
16
+ execute_provider_availability("o365")
17
+ end
18
+
19
+ # Retrieve public config for a scheduling page
20
+ # @param slug [String] The Scheduler page slug
21
+ # @return [Scheduler] Returns the Scheduler object representing the page configuration
22
+ def get_page_slug(slug)
23
+ page_response = api.execute(
24
+ method: :get,
25
+ path: "/schedule/#{slug}/info"
26
+ )
27
+
28
+ Scheduler.new(**page_response.merge(api: api))
29
+ end
30
+
31
+ # Retrieve available time slots
32
+ # @param slug [String] The Scheduler page slug
33
+ # @return [Array<SchedulerTimeSlot>] Returns the list of available timeslots
34
+ def get_available_time_slots(slug)
35
+ response = api.execute(
36
+ method: :get,
37
+ path: "/schedule/#{slug}/timeslots"
38
+ )
39
+
40
+ timeslots = []
41
+ response.each do |available_slot|
42
+ timeslots.push(SchedulerTimeSlot.new(**available_slot.merge(api: api)))
43
+ end
44
+ timeslots
45
+ end
46
+
47
+ # Book a time slot
48
+ # @param slug [String] The Scheduler page slug
49
+ # @param timeslot [SchedulerBookingRequest] The time slot booking request
50
+ # @return [SchedulerBookingConfirmation] Returns the booking confirmation
51
+ def book_time_slot(slug, timeslot)
52
+ payload = timeslot.to_h
53
+ # The booking endpoint requires additional_values and additional_emails
54
+ # to exist regardless if they are empty or not
55
+ payload[:additional_values] = {} unless payload[:additional_values]
56
+ payload[:additional_emails] = [] unless payload[:additional_emails]
57
+ booking_response = api.execute(
58
+ method: :post,
59
+ path: "/schedule/#{slug}/timeslots",
60
+ payload: JSON.dump(payload)
61
+ )
62
+
63
+ SchedulerBookingConfirmation.new(**booking_response.merge(api: api))
64
+ end
65
+
66
+ # Cancel a booking
67
+ # @param slug [String] The Scheduler page slug
68
+ # @param edit_hash [String] The token used for editing the booked time slot
69
+ # @param reason [String] The reason for cancelling the booking
70
+ # @return [Hash] Returns a hash of a boolean representing success of cancellation
71
+ def cancel_booking(slug, edit_hash, reason)
72
+ api.execute(
73
+ method: :post,
74
+ path: "/schedule/#{slug}/#{edit_hash}/cancel",
75
+ payload: JSON.dump(reason: reason)
76
+ )
77
+ end
78
+
79
+ # Confirm a booking
80
+ # @param slug [String] The Scheduler page slug
81
+ # @param edit_hash [String] The token used for editing the booked time slot
82
+ # @return [SchedulerBookingConfirmation] Returns the confirmed booking confirmation
83
+ def confirm_booking(slug, edit_hash)
84
+ booking_response = api.execute(
85
+ method: :post,
86
+ path: "/schedule/#{slug}/#{edit_hash}/confirm",
87
+ payload: {}
88
+ )
89
+
90
+ SchedulerBookingConfirmation.new(**booking_response.merge(api: api))
91
+ end
92
+
93
+ private
94
+
95
+ # Retrieve provider availability
96
+ # @return [Hash] Returns the availability
97
+ def execute_provider_availability(provider)
98
+ api.execute(
99
+ method: :get,
100
+ path: "/schedule/availability/#{provider}"
101
+ )
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Nylas
4
+ # Structure to represent the time slot object from the Scheduler API
5
+ class SchedulerTimeSlot
6
+ include Model::Attributable
7
+ attribute :account_id, :string
8
+ attribute :calendar_id, :string
9
+ attribute :host_name, :string
10
+ attribute :start, :unix_timestamp
11
+ attribute :end, :unix_timestamp
12
+ has_n_of_attribute :emails, :string
13
+ end
14
+ end
data/lib/nylas/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Nylas
4
- VERSION = "5.5.0"
4
+ VERSION = "5.6.0"
5
5
  end
data/lib/nylas.rb CHANGED
@@ -56,6 +56,7 @@ 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/event_notification"
59
60
  require_relative "nylas/component"
60
61
 
61
62
  # Custom collection types
@@ -65,6 +66,7 @@ require_relative "nylas/deltas_collection"
65
66
  require_relative "nylas/free_busy_collection"
66
67
  require_relative "nylas/calendar_collection"
67
68
  require_relative "nylas/component_collection"
69
+ require_relative "nylas/scheduler_collection"
68
70
 
69
71
  # Models supported by the API
70
72
  require_relative "nylas/account"
@@ -96,6 +98,9 @@ require_relative "nylas/neural_signature_extraction"
96
98
  require_relative "nylas/neural_message_options"
97
99
  require_relative "nylas/categorize"
98
100
  require_relative "nylas/scheduler_config"
101
+ require_relative "nylas/scheduler_time_slot"
102
+ require_relative "nylas/scheduler_booking_request"
103
+ require_relative "nylas/scheduler_booking_confirmation"
99
104
 
100
105
  require_relative "nylas/native_authentication"
101
106
 
@@ -135,10 +140,12 @@ module Nylas
135
140
  Types.registry[:event_conferencing] = Types::ModelType.new(model: EventConferencing)
136
141
  Types.registry[:event_conferencing_details] = Types::ModelType.new(model: EventConferencingDetails)
137
142
  Types.registry[:event_conferencing_autocreate] = Types::ModelType.new(model: EventConferencingAutocreate)
143
+ Types.registry[:event_notification] = Types::ModelType.new(model: EventNotification)
138
144
  Types.registry[:neural] = Types::ModelType.new(model: Neural)
139
145
  Types.registry[:categorize] = Types::ModelType.new(model: Categorize)
140
146
  Types.registry[:neural_signature_contact] = Types::ModelType.new(model: NeuralSignatureContact)
141
147
  Types.registry[:neural_contact_link] = Types::ModelType.new(model: NeuralContactLink)
142
148
  Types.registry[:neural_contact_name] = Types::ModelType.new(model: NeuralContactName)
143
149
  Types.registry[:scheduler_config] = Types::ModelType.new(model: SchedulerConfig)
150
+ Types.registry[:scheduler_time_slot] = Types::ModelType.new(model: SchedulerTimeSlot)
144
151
  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.5.0
4
+ version: 5.6.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-10-28 00:00:00.000000000 Z
11
+ date: 2021-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -290,6 +290,7 @@ files:
290
290
  - lib/nylas/event_conferencing.rb
291
291
  - lib/nylas/event_conferencing_autocreate.rb
292
292
  - lib/nylas/event_conferencing_details.rb
293
+ - lib/nylas/event_notification.rb
293
294
  - lib/nylas/file.rb
294
295
  - lib/nylas/filter_attributes.rb
295
296
  - lib/nylas/folder.rb
@@ -331,7 +332,11 @@ files:
331
332
  - lib/nylas/room_resource.rb
332
333
  - lib/nylas/rsvp.rb
333
334
  - lib/nylas/scheduler.rb
335
+ - lib/nylas/scheduler_booking_confirmation.rb
336
+ - lib/nylas/scheduler_booking_request.rb
337
+ - lib/nylas/scheduler_collection.rb
334
338
  - lib/nylas/scheduler_config.rb
339
+ - lib/nylas/scheduler_time_slot.rb
335
340
  - lib/nylas/search_collection.rb
336
341
  - lib/nylas/thread.rb
337
342
  - lib/nylas/time_slot.rb