nylas 2.0.1 → 3.0.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 +4 -4
- data/lib/account.rb +2 -2
- data/lib/api_account.rb +1 -1
- data/lib/api_thread.rb +1 -1
- data/lib/calendar.rb +1 -1
- data/lib/contact.rb +2 -2
- data/lib/draft.rb +9 -16
- data/lib/event.rb +2 -2
- data/lib/file.rb +3 -3
- data/lib/folder.rb +1 -1
- data/lib/label.rb +1 -1
- data/lib/message.rb +5 -6
- data/lib/mixins.rb +1 -1
- data/lib/nylas.rb +56 -46
- data/lib/parameters.rb +1 -1
- data/lib/restful_model.rb +7 -7
- data/lib/restful_model_collection.rb +5 -5
- data/lib/time_attr_accessor.rb +2 -2
- data/lib/version.rb +2 -2
- metadata +102 -58
- data/LICENSE.txt +0 -22
- data/README.md +0 -599
- data/lib/inbox.rb +0 -375
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab2bbc150ba9969544a9044e70426435899ce892
|
4
|
+
data.tar.gz: ef8eaf6732b5dba963c8a6e4fbc238e91de70950
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05aea3e3090be4f44562970ca4e80eb127825d4fef4565800e1d2a40a2063c250583ffb782f456e7d0ac5d2cb5bc1323879f3703b3fa12b433b6bbe2af723f4a
|
7
|
+
data.tar.gz: 90ef6270c015fe24d10e968679fbe7b2e33e29cec4d282c561a997708cc011cf260578b4306d59877c691d790ab128c89e2e79c13bb9fee0a3fcf33cc18b9b39
|
data/lib/account.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'restful_model'
|
2
2
|
|
3
|
-
module
|
3
|
+
module Nylas
|
4
4
|
class Account < RestfulModel
|
5
5
|
|
6
6
|
parameter :account_id
|
@@ -15,7 +15,7 @@ module Inbox
|
|
15
15
|
collection = ManagementModelCollection.new(Account, @_api, {:account_id=>@account_id})
|
16
16
|
::RestClient.post("#{collection.url}/#{@account_id}/#{action}",{}) do |response, request, result|
|
17
17
|
# Throw any exceptions
|
18
|
-
json =
|
18
|
+
json = Nylas.interpret_response(result, response, :expected_class => Object)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
data/lib/api_account.rb
CHANGED
data/lib/api_thread.rb
CHANGED
data/lib/calendar.rb
CHANGED
data/lib/contact.rb
CHANGED
data/lib/draft.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'restful_model'
|
2
2
|
|
3
|
-
module
|
3
|
+
module Nylas
|
4
4
|
class Draft < Message
|
5
5
|
|
6
6
|
parameter :thread_id
|
@@ -32,25 +32,18 @@ module Inbox
|
|
32
32
|
end
|
33
33
|
|
34
34
|
::RestClient.post(url, data.to_json, :content_type => :json) do |response, request, result|
|
35
|
-
|
36
|
-
|
37
|
-
# because we need to pass an additional error message to the Exception constructor.
|
38
|
-
Inbox.interpret_http_status(result)
|
39
|
-
json = JSON.parse(response)
|
40
|
-
if json.is_a?(Hash) && (json['type'] == 'api_error' or json['type'] == 'invalid_request_error')
|
41
|
-
exc = Inbox.http_code_to_exception(result.code.to_i)
|
42
|
-
exc_type = json['type']
|
43
|
-
exc_message = json['message']
|
44
|
-
exc_server_error = json['server_error']
|
45
|
-
raise exc.new(exc_type, exc_message, server_error=exc_server_error)
|
46
|
-
end
|
47
|
-
raise UnexpectedResponse.new(result.msg) if result.is_a?(Net::HTTPClientError)
|
48
|
-
|
49
|
-
self.inflate(json)
|
35
|
+
response = Nylas.interpret_response(result, response, {:expected_class => Object})
|
36
|
+
self.inflate(response)
|
50
37
|
end
|
51
38
|
|
52
39
|
self
|
53
40
|
end
|
54
41
|
|
42
|
+
def destroy
|
43
|
+
::RestClient::Request.execute(method: :delete, url: self.url, payload: ({ :version => self.version }).to_json) do |response, request, result|
|
44
|
+
response = Nylas.interpret_response(result, response, options={:raw_response=>true})
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
55
48
|
end
|
56
49
|
end
|
data/lib/event.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'restful_model'
|
2
2
|
|
3
|
-
module
|
3
|
+
module Nylas
|
4
4
|
class Event < RestfulModel
|
5
5
|
|
6
6
|
parameter :title
|
@@ -35,7 +35,7 @@ module Inbox
|
|
35
35
|
data = {:event_id => @id, :status => status, :comment => comment}
|
36
36
|
|
37
37
|
::RestClient.post(url, data.to_json, :content_type => :json) do |response, request, result|
|
38
|
-
json =
|
38
|
+
json = Nylas.interpret_response(result, response, :expected_class => Object)
|
39
39
|
self.inflate(json)
|
40
40
|
end
|
41
41
|
|
data/lib/file.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'restful_model'
|
2
2
|
|
3
|
-
module
|
3
|
+
module Nylas
|
4
4
|
class File < RestfulModel
|
5
5
|
|
6
6
|
parameter :size
|
@@ -20,7 +20,7 @@ module Inbox
|
|
20
20
|
|
21
21
|
def save!
|
22
22
|
::RestClient.post(url, {:file => @file}) do |response, request, result|
|
23
|
-
json =
|
23
|
+
json = Nylas.interpret_response(result, response, :expected_class => Object)
|
24
24
|
json = json[0] if (json.class == Array)
|
25
25
|
inflate(json)
|
26
26
|
end
|
@@ -30,7 +30,7 @@ module Inbox
|
|
30
30
|
def download
|
31
31
|
download_url = self.url('download')
|
32
32
|
::RestClient.get(download_url) do |response, request, result|
|
33
|
-
|
33
|
+
Nylas.interpret_response(result, response, {:raw_response => true})
|
34
34
|
response
|
35
35
|
end
|
36
36
|
end
|
data/lib/folder.rb
CHANGED
data/lib/label.rb
CHANGED
data/lib/message.rb
CHANGED
@@ -2,7 +2,7 @@ require 'restful_model'
|
|
2
2
|
require 'file'
|
3
3
|
require 'mixins'
|
4
4
|
|
5
|
-
module
|
5
|
+
module Nylas
|
6
6
|
class Message < RestfulModel
|
7
7
|
|
8
8
|
parameter :subject
|
@@ -20,7 +20,7 @@ module Inbox
|
|
20
20
|
parameter :folder
|
21
21
|
parameter :labels
|
22
22
|
|
23
|
-
include
|
23
|
+
include Nylas::ReadUnreadMethods
|
24
24
|
|
25
25
|
def inflate(json)
|
26
26
|
super
|
@@ -80,10 +80,9 @@ module Inbox
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def raw
|
83
|
-
model = nil
|
84
83
|
collection = RestfulModelCollection.new(Message, @_api, {:message_id=>@id})
|
85
84
|
RestClient.get("#{collection.url}/#{id}/", :accept => 'message/rfc822'){ |response,request,result|
|
86
|
-
|
85
|
+
Nylas.interpret_response(result, response, {:raw_response => true})
|
87
86
|
response
|
88
87
|
}
|
89
88
|
end
|
@@ -92,8 +91,8 @@ module Inbox
|
|
92
91
|
expanded_url = url(action='?view=expanded')
|
93
92
|
|
94
93
|
RestClient.get(expanded_url){ |response,request,result|
|
95
|
-
json =
|
96
|
-
expanded_message =
|
94
|
+
json = Nylas.interpret_response(result, response, :expected_class => Object)
|
95
|
+
expanded_message = Nylas::ExpandedMessage.new(@_api)
|
97
96
|
expanded_message.inflate(json)
|
98
97
|
expanded_message
|
99
98
|
}
|
data/lib/mixins.rb
CHANGED
data/lib/nylas.rb
CHANGED
@@ -2,6 +2,8 @@ require 'json'
|
|
2
2
|
require 'rest-client'
|
3
3
|
require 'yajl'
|
4
4
|
require 'em-http'
|
5
|
+
|
6
|
+
|
5
7
|
require 'ostruct'
|
6
8
|
require 'active_support/core_ext/hash'
|
7
9
|
|
@@ -21,41 +23,43 @@ require 'restful_model'
|
|
21
23
|
require 'restful_model_collection'
|
22
24
|
require 'version'
|
23
25
|
|
24
|
-
module
|
26
|
+
module Nylas
|
25
27
|
Error = Class.new(::StandardError)
|
26
|
-
AccessDenied = Class.new(Error)
|
27
|
-
ResourceNotFound = Class.new(Error)
|
28
28
|
NoAuthToken = Class.new(Error)
|
29
29
|
UnexpectedAccountAction = Class.new(Error)
|
30
30
|
UnexpectedResponse = Class.new(Error)
|
31
31
|
class APIError < Error
|
32
|
-
attr_accessor :
|
32
|
+
attr_accessor :type
|
33
|
+
attr_accessor :message
|
33
34
|
attr_accessor :server_error
|
34
35
|
|
35
|
-
def initialize(type,
|
36
|
-
super(
|
37
|
-
self.
|
36
|
+
def initialize(type, message, server_error = nil)
|
37
|
+
super(message)
|
38
|
+
self.type = type
|
39
|
+
self.message = message
|
38
40
|
self.server_error = server_error
|
39
41
|
end
|
40
42
|
end
|
43
|
+
AccessDenied = Class.new(APIError)
|
44
|
+
ResourceNotFound = Class.new(APIError)
|
41
45
|
InvalidRequest = Class.new(APIError)
|
42
46
|
MessageRejected = Class.new(APIError)
|
43
47
|
SendingQuotaExceeded = Class.new(APIError)
|
44
48
|
ServiceUnavailable = Class.new(APIError)
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
raise ResourceNotFound.new if result.code.to_i == 404
|
49
|
-
raise AccessDenied.new if result.code.to_i == 403
|
50
|
-
end
|
49
|
+
BadGateway = Class.new(APIError)
|
50
|
+
InternalError = Class.new(APIError)
|
51
|
+
MailProviderError = Class.new(APIError)
|
51
52
|
|
52
53
|
HTTP_CODE_TO_EXCEPTIONS = {
|
53
54
|
400 => InvalidRequest,
|
54
55
|
402 => MessageRejected,
|
55
56
|
403 => AccessDenied,
|
56
57
|
404 => ResourceNotFound,
|
58
|
+
422 => MailProviderError,
|
57
59
|
429 => SendingQuotaExceeded,
|
58
|
-
|
60
|
+
500 => InternalError,
|
61
|
+
502 => BadGateway,
|
62
|
+
503 => ServiceUnavailable,
|
59
63
|
}.freeze
|
60
64
|
|
61
65
|
def self.http_code_to_exception(http_code)
|
@@ -63,19 +67,27 @@ module Inbox
|
|
63
67
|
end
|
64
68
|
|
65
69
|
def self.interpret_response(result, result_content, options = {})
|
66
|
-
# Handle HTTP errors
|
67
|
-
self.interpret_http_status(result)
|
68
70
|
|
69
|
-
#
|
71
|
+
# We expected a certain kind of object, but the API didn't return anything
|
70
72
|
raise UnexpectedResponse.new if options[:expected_class] && result_content.empty?
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
73
|
+
|
74
|
+
# If it's already parsed, or if we've received an actual raw payload on success, don't parse
|
75
|
+
if options[:result_parsed] || (options[:raw_response] && result.code.to_i == 200)
|
76
|
+
response = result_content
|
77
|
+
else
|
78
|
+
response = JSON.parse(result_content)
|
75
79
|
end
|
80
|
+
|
81
|
+
if result.code.to_i != 200
|
82
|
+
exc = Nylas.http_code_to_exception(result.code.to_i)
|
83
|
+
if response.is_a?(Hash)
|
84
|
+
raise exc.new(response['type'], response['message'], response.fetch('server_error', nil))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
76
88
|
raise UnexpectedResponse.new(result.msg) if result.is_a?(Net::HTTPClientError)
|
77
|
-
raise UnexpectedResponse.new if options[:expected_class] && !
|
78
|
-
|
89
|
+
raise UnexpectedResponse.new if options[:expected_class] && !response.is_a?(options[:expected_class])
|
90
|
+
response
|
79
91
|
|
80
92
|
rescue JSON::ParserError => e
|
81
93
|
# Handle parsing errors
|
@@ -91,13 +103,13 @@ module Inbox
|
|
91
103
|
|
92
104
|
def initialize(app_id, app_secret, access_token = nil, api_server = 'https://api.nylas.com',
|
93
105
|
service_domain = 'api.nylas.com')
|
94
|
-
raise "When overriding the
|
106
|
+
raise "When overriding the Nylas API server address, you must include https://" unless api_server.include?('://')
|
95
107
|
@api_server = api_server
|
96
108
|
@access_token = access_token
|
97
109
|
@app_secret = app_secret
|
98
110
|
@app_id = app_id
|
99
111
|
@service_domain = service_domain
|
100
|
-
@version =
|
112
|
+
@version = Nylas::VERSION
|
101
113
|
|
102
114
|
if ::RestClient.before_execution_procs.empty?
|
103
115
|
::RestClient.add_before_execution_proc do |req, params|
|
@@ -148,7 +160,7 @@ module Inbox
|
|
148
160
|
}
|
149
161
|
|
150
162
|
::RestClient.post("https://#{@service_domain}/oauth/token", data) do |response, request, result|
|
151
|
-
json =
|
163
|
+
json = Nylas.interpret_response(result, response, :expected_class => Object)
|
152
164
|
return json['access_token']
|
153
165
|
end
|
154
166
|
end
|
@@ -194,7 +206,7 @@ module Inbox
|
|
194
206
|
path = self.url_for_path("/account")
|
195
207
|
|
196
208
|
RestClient.get(path, {}) do |response,request,result|
|
197
|
-
json =
|
209
|
+
json = Nylas.interpret_response(result, response, {:expected_class => Object})
|
198
210
|
model = APIAccount.new(self)
|
199
211
|
model.inflate(json)
|
200
212
|
model
|
@@ -220,7 +232,7 @@ module Inbox
|
|
220
232
|
cursor = nil
|
221
233
|
|
222
234
|
RestClient.post(path, :content_type => :json) do |response,request,result|
|
223
|
-
json =
|
235
|
+
json = Nylas.interpret_response(result, response, {:expected_class => Object})
|
224
236
|
cursor = json["cursor"]
|
225
237
|
end
|
226
238
|
|
@@ -228,23 +240,23 @@ module Inbox
|
|
228
240
|
end
|
229
241
|
|
230
242
|
OBJECTS_TABLE = {
|
231
|
-
"account" =>
|
232
|
-
"calendar" =>
|
233
|
-
"draft" =>
|
234
|
-
"thread" =>
|
235
|
-
"contact" =>
|
236
|
-
"event" =>
|
237
|
-
"file" =>
|
238
|
-
"message" =>
|
239
|
-
"folder" =>
|
240
|
-
"label" =>
|
243
|
+
"account" => Nylas::Account,
|
244
|
+
"calendar" => Nylas::Calendar,
|
245
|
+
"draft" => Nylas::Draft,
|
246
|
+
"thread" => Nylas::Thread,
|
247
|
+
"contact" => Nylas::Contact,
|
248
|
+
"event" => Nylas::Event,
|
249
|
+
"file" => Nylas::File,
|
250
|
+
"message" => Nylas::Message,
|
251
|
+
"folder" => Nylas::Folder,
|
252
|
+
"label" => Nylas::Label,
|
241
253
|
}
|
242
254
|
|
243
255
|
# It's possible to ask the API to expand objects.
|
244
256
|
# In this case, we do the right thing and return
|
245
257
|
# an expanded object.
|
246
258
|
EXPANDED_OBJECTS_TABLE = {
|
247
|
-
"message" =>
|
259
|
+
"message" => Nylas::ExpandedMessage,
|
248
260
|
}
|
249
261
|
|
250
262
|
def _build_exclude_types(exclude_types)
|
@@ -280,7 +292,7 @@ module Inbox
|
|
280
292
|
json = nil
|
281
293
|
|
282
294
|
RestClient.get(path) do |response,request,result|
|
283
|
-
json =
|
295
|
+
json = Nylas.interpret_response(result, response, {:expected_class => Object})
|
284
296
|
end
|
285
297
|
|
286
298
|
start_cursor = json["cursor_start"]
|
@@ -332,7 +344,7 @@ module Inbox
|
|
332
344
|
|
333
345
|
parser = Yajl::Parser.new(:symbolize_keys => false)
|
334
346
|
parser.on_parse_complete = proc do |data|
|
335
|
-
delta =
|
347
|
+
delta = Nylas.interpret_response(OpenStruct.new(:code => '200'), data, {:expected_class => Object, :result_parsed => true})
|
336
348
|
|
337
349
|
if not OBJECTS_TABLE.has_key?(delta['object'])
|
338
350
|
next
|
@@ -356,10 +368,10 @@ module Inbox
|
|
356
368
|
yield delta["event"], obj
|
357
369
|
end
|
358
370
|
end
|
359
|
-
|
371
|
+
|
360
372
|
http = EventMachine::HttpRequest.new(path, :connect_timeout => 0, :inactivity_timeout => timeout).get(:keepalive => true)
|
361
373
|
|
362
|
-
# set a callback on the HTTP stream that parses incoming chunks as they come in
|
374
|
+
# set a callback on the HTTP stream that parses incoming chunks as they come in
|
363
375
|
http.stream do |chunk|
|
364
376
|
parser << chunk
|
365
377
|
end
|
@@ -367,9 +379,7 @@ module Inbox
|
|
367
379
|
http.errback do
|
368
380
|
raise UnexpectedResponse.new http.error
|
369
381
|
end
|
370
|
-
|
382
|
+
|
371
383
|
end
|
372
384
|
end
|
373
385
|
end
|
374
|
-
|
375
|
-
Nylas = Inbox.clone
|
data/lib/parameters.rb
CHANGED