nylas 3.2.0 → 4.0.0.rc2
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.rb +33 -380
- data/lib/nylas/api.rb +43 -0
- data/lib/nylas/collection.rb +110 -0
- data/lib/nylas/constraints.rb +46 -0
- data/lib/nylas/contact.rb +30 -0
- data/lib/nylas/current_account.rb +23 -0
- data/lib/nylas/email_address.rb +14 -0
- data/lib/nylas/errors.rb +36 -0
- data/lib/nylas/http_client.rb +135 -0
- data/lib/nylas/im_address.rb +14 -0
- data/lib/nylas/logging.rb +41 -0
- data/lib/nylas/model.rb +92 -0
- data/lib/nylas/model/attributable.rb +57 -0
- data/lib/nylas/model/attribute_definition.rb +19 -0
- data/lib/nylas/model/attributes.rb +47 -0
- data/lib/nylas/model/list_attribute_definition.rb +28 -0
- data/lib/nylas/nylas_date.rb +20 -0
- data/lib/nylas/phone_number.rb +14 -0
- data/lib/nylas/physical_address.rb +19 -0
- data/lib/nylas/registry.rb +37 -0
- data/lib/nylas/types.rb +83 -0
- data/lib/nylas/version.rb +3 -0
- data/lib/nylas/web_page.rb +14 -0
- metadata +144 -98
- data/lib/account.rb +0 -32
- data/lib/api_account.rb +0 -22
- data/lib/api_thread.rb +0 -85
- data/lib/calendar.rb +0 -16
- data/lib/contact.rb +0 -10
- data/lib/draft.rb +0 -50
- data/lib/event.rb +0 -47
- data/lib/expanded_message.rb +0 -20
- data/lib/file.rb +0 -40
- data/lib/folder.rb +0 -12
- data/lib/label.rb +0 -4
- data/lib/message.rb +0 -102
- data/lib/mixins.rb +0 -26
- data/lib/parameters.rb +0 -26
- data/lib/restful_model.rb +0 -82
- data/lib/restful_model_collection.rb +0 -160
- data/lib/time_attr_accessor.rb +0 -12
- data/lib/version.rb +0 -3
data/lib/api_thread.rb
DELETED
@@ -1,85 +0,0 @@
|
|
1
|
-
require 'restful_model'
|
2
|
-
require 'time_attr_accessor'
|
3
|
-
require 'mixins'
|
4
|
-
|
5
|
-
module Nylas
|
6
|
-
class Thread < RestfulModel
|
7
|
-
extend TimeAttrAccessor
|
8
|
-
|
9
|
-
parameter :subject
|
10
|
-
parameter :participants
|
11
|
-
parameter :snippet
|
12
|
-
parameter :message_ids
|
13
|
-
parameter :draft_ids
|
14
|
-
parameter :labels
|
15
|
-
parameter :folder
|
16
|
-
parameter :starred
|
17
|
-
parameter :unread
|
18
|
-
parameter :has_attachments
|
19
|
-
time_attr_accessor :last_message_timestamp
|
20
|
-
time_attr_accessor :first_message_timestamp
|
21
|
-
|
22
|
-
include ReadUnreadMethods
|
23
|
-
|
24
|
-
def inflate(json)
|
25
|
-
super
|
26
|
-
@labels ||= []
|
27
|
-
@folder ||= nil
|
28
|
-
|
29
|
-
# This is a special case --- we receive label data from the API
|
30
|
-
# as JSON but we want it to behave like an API object.
|
31
|
-
@labels.map! do |label_json|
|
32
|
-
label = Label.new(@_api)
|
33
|
-
label.inflate(label_json)
|
34
|
-
label
|
35
|
-
end
|
36
|
-
|
37
|
-
if not folder.nil? and folder.is_a?(Hash)
|
38
|
-
folder = Folder.new(@_api)
|
39
|
-
folder.inflate(@folder)
|
40
|
-
@folder = folder
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def messages(expanded: false)
|
45
|
-
@messages ||= Hash.new do |h, is_expanded|
|
46
|
-
h[is_expanded] = \
|
47
|
-
if is_expanded
|
48
|
-
RestfulModelCollection.new(ExpandedMessage, @_api, thread_id: @id, view: 'expanded')
|
49
|
-
else
|
50
|
-
RestfulModelCollection.new(Message, @_api, thread_id: @id)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
@messages[expanded]
|
54
|
-
end
|
55
|
-
|
56
|
-
def drafts
|
57
|
-
@drafts ||= RestfulModelCollection.new(Draft, @_api, {:thread_id=>@id})
|
58
|
-
end
|
59
|
-
|
60
|
-
def as_json(options = {})
|
61
|
-
hash = {}
|
62
|
-
|
63
|
-
if not @unread.nil?
|
64
|
-
hash["unread"] = @unread
|
65
|
-
end
|
66
|
-
|
67
|
-
if not @starred.nil?
|
68
|
-
hash["starred"] = @starred
|
69
|
-
end
|
70
|
-
|
71
|
-
if not @labels.nil? and @labels != []
|
72
|
-
hash["label_ids"] = @labels.map do |label|
|
73
|
-
label.id
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
if not @folder.nil?
|
78
|
-
hash["folder_id"] = @folder.id
|
79
|
-
end
|
80
|
-
|
81
|
-
hash
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
85
|
-
end
|
data/lib/calendar.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'restful_model'
|
2
|
-
require 'event'
|
3
|
-
|
4
|
-
module Nylas
|
5
|
-
class Calendar < RestfulModel
|
6
|
-
|
7
|
-
parameter :name
|
8
|
-
parameter :description
|
9
|
-
parameter :read_only
|
10
|
-
|
11
|
-
def events
|
12
|
-
@events ||= RestfulModelCollection.new(Event, @_api, {:calendar_id=>@id})
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
data/lib/contact.rb
DELETED
data/lib/draft.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'restful_model'
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
class Draft < Message
|
5
|
-
|
6
|
-
parameter :thread_id
|
7
|
-
parameter :version
|
8
|
-
parameter :reply_to_message_id
|
9
|
-
parameter :file_ids
|
10
|
-
parameter :tracking
|
11
|
-
|
12
|
-
def attach(file)
|
13
|
-
file.save! unless file.id
|
14
|
-
@file_ids ||= []
|
15
|
-
@file_ids.push(file.id)
|
16
|
-
end
|
17
|
-
|
18
|
-
def as_json(options = {})
|
19
|
-
# FIXME @karim: this is a bit of a hack --- Draft inherits Message
|
20
|
-
# was okay until we overrode Message#as_json to allow updating folders/labels.
|
21
|
-
# This broke draft sending, which relies on RestfulModel::as_json to work.
|
22
|
-
grandparent = self.class.superclass.superclass
|
23
|
-
meth = grandparent.instance_method(:as_json)
|
24
|
-
meth.bind(self).call
|
25
|
-
end
|
26
|
-
|
27
|
-
def send!
|
28
|
-
url = @_api.url_for_path("/send")
|
29
|
-
if @id
|
30
|
-
data = {:draft_id => @id, :version => @version}
|
31
|
-
else
|
32
|
-
data = as_json()
|
33
|
-
end
|
34
|
-
|
35
|
-
::RestClient.post(url, data.to_json, :content_type => :json) do |response, request, result|
|
36
|
-
response = Nylas.interpret_response(result, response, {:expected_class => Object})
|
37
|
-
self.inflate(response)
|
38
|
-
end
|
39
|
-
|
40
|
-
self
|
41
|
-
end
|
42
|
-
|
43
|
-
def destroy
|
44
|
-
::RestClient::Request.execute(method: :delete, url: self.url, payload: ({ :version => self.version }).to_json) do |response, request, result|
|
45
|
-
response = Nylas.interpret_response(result, response, options={:raw_response=>true})
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
end
|
data/lib/event.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'restful_model'
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
class Event < RestfulModel
|
5
|
-
|
6
|
-
parameter :title
|
7
|
-
parameter :description
|
8
|
-
parameter :location
|
9
|
-
parameter :read_only
|
10
|
-
parameter :participants
|
11
|
-
parameter :when
|
12
|
-
parameter :calendar_id
|
13
|
-
parameter :namespace_id
|
14
|
-
parameter :recurrence
|
15
|
-
parameter :status
|
16
|
-
parameter :master_event_id
|
17
|
-
parameter :original_start_time
|
18
|
-
|
19
|
-
def as_json(options = {})
|
20
|
-
hash = super(options)
|
21
|
-
|
22
|
-
# Delete nil values from the hash
|
23
|
-
hash.delete_if { |key, value| value.nil? }
|
24
|
-
|
25
|
-
# The API doesn't like to receive: "object": "timespan" in the when block.
|
26
|
-
if hash.has_key?('when') and hash['when'].has_key?('object')
|
27
|
-
hash['when'].delete('object')
|
28
|
-
end
|
29
|
-
|
30
|
-
return hash
|
31
|
-
end
|
32
|
-
|
33
|
-
def rsvp!(status, comment)
|
34
|
-
url = @_api.url_for_path("/send-rsvp")
|
35
|
-
data = {:event_id => @id, :status => status, :comment => comment}
|
36
|
-
|
37
|
-
::RestClient.post(url, data.to_json, :content_type => :json) do |response, request, result|
|
38
|
-
json = Nylas.interpret_response(result, response, :expected_class => Object)
|
39
|
-
self.inflate(json)
|
40
|
-
end
|
41
|
-
|
42
|
-
self
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
end
|
47
|
-
end
|
data/lib/expanded_message.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
module Nylas
|
2
|
-
class ExpandedMessage < Message
|
3
|
-
# override inflate because expanded messages have some special parameters
|
4
|
-
# like In-Reply-To and Message-Id.
|
5
|
-
attr_reader :message_id
|
6
|
-
attr_reader :in_reply_to
|
7
|
-
attr_reader :references
|
8
|
-
|
9
|
-
def self.collection_name
|
10
|
-
'messages'
|
11
|
-
end
|
12
|
-
|
13
|
-
def inflate(json)
|
14
|
-
super
|
15
|
-
@message_id = json['headers']['Message-Id']
|
16
|
-
@in_reply_to = json['headers']['In-Reply-To']
|
17
|
-
@references = json['headers']['References']
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/lib/file.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'restful_model'
|
2
|
-
|
3
|
-
module Nylas
|
4
|
-
class File < RestfulModel
|
5
|
-
|
6
|
-
parameter :size
|
7
|
-
parameter :filename
|
8
|
-
parameter :content_id
|
9
|
-
parameter :content_type
|
10
|
-
parameter :is_embedded
|
11
|
-
parameter :message_id
|
12
|
-
|
13
|
-
# For uploading the file
|
14
|
-
parameter :file
|
15
|
-
|
16
|
-
def inflate(json)
|
17
|
-
super
|
18
|
-
content_type = json["content-type"] if json["content-type"]
|
19
|
-
end
|
20
|
-
|
21
|
-
def save!
|
22
|
-
::RestClient.post(url, {:file => @file}) do |response, request, result|
|
23
|
-
json = Nylas.interpret_response(result, response, :expected_class => Object)
|
24
|
-
json = json[0] if (json.class == Array)
|
25
|
-
inflate(json)
|
26
|
-
end
|
27
|
-
self
|
28
|
-
end
|
29
|
-
|
30
|
-
def download
|
31
|
-
download_url = self.url('download')
|
32
|
-
::RestClient.get(download_url) do |response, request, result|
|
33
|
-
Nylas.interpret_response(result, response, {:raw_response => true})
|
34
|
-
response
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
data/lib/folder.rb
DELETED
data/lib/label.rb
DELETED
data/lib/message.rb
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
require 'restful_model'
|
2
|
-
require 'file'
|
3
|
-
require 'mixins'
|
4
|
-
|
5
|
-
module Nylas
|
6
|
-
class Message < RestfulModel
|
7
|
-
|
8
|
-
parameter :subject
|
9
|
-
parameter :snippet
|
10
|
-
parameter :from
|
11
|
-
parameter :to
|
12
|
-
parameter :reply_to
|
13
|
-
parameter :cc
|
14
|
-
parameter :bcc
|
15
|
-
parameter :date
|
16
|
-
parameter :thread_id
|
17
|
-
parameter :body
|
18
|
-
parameter :unread
|
19
|
-
parameter :starred
|
20
|
-
parameter :folder
|
21
|
-
parameter :labels
|
22
|
-
|
23
|
-
include Nylas::ReadUnreadMethods
|
24
|
-
|
25
|
-
def inflate(json)
|
26
|
-
super
|
27
|
-
@to ||= []
|
28
|
-
@cc ||= []
|
29
|
-
@bcc ||= []
|
30
|
-
@labels ||= []
|
31
|
-
@folder ||= nil
|
32
|
-
|
33
|
-
# This is a special case --- we receive label data from the API
|
34
|
-
# as JSON but we want it to behave like an API object.
|
35
|
-
@labels.map! do |label_json|
|
36
|
-
label = Label.new(@_api)
|
37
|
-
label.inflate(label_json)
|
38
|
-
label
|
39
|
-
end
|
40
|
-
|
41
|
-
if not folder.nil? and folder.is_a?(Hash)
|
42
|
-
folder = Folder.new(@_api)
|
43
|
-
folder.inflate(@folder)
|
44
|
-
@folder = folder
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def as_json(options = {})
|
49
|
-
hash = {}
|
50
|
-
|
51
|
-
# unread, starred and labels/folder are the only attribute
|
52
|
-
# you can modify.
|
53
|
-
if not @unread.nil?
|
54
|
-
hash["unread"] = @unread
|
55
|
-
end
|
56
|
-
|
57
|
-
if not @starred.nil?
|
58
|
-
hash["starred"] = @starred
|
59
|
-
end
|
60
|
-
|
61
|
-
if not @labels.nil? and @labels != []
|
62
|
-
hash["label_ids"] = @labels.map do |label|
|
63
|
-
label.id
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
if not @folder.nil?
|
68
|
-
hash["folder_id"] = @folder.id
|
69
|
-
end
|
70
|
-
|
71
|
-
hash
|
72
|
-
end
|
73
|
-
|
74
|
-
def files
|
75
|
-
@files ||= RestfulModelCollection.new(File, @_api, {:message_id=>@id})
|
76
|
-
end
|
77
|
-
|
78
|
-
def files?
|
79
|
-
!@raw_json['files'].empty?
|
80
|
-
end
|
81
|
-
|
82
|
-
def raw
|
83
|
-
collection = RestfulModelCollection.new(Message, @_api, {:message_id=>@id})
|
84
|
-
RestClient.get("#{collection.url}/#{id}/", :accept => 'message/rfc822'){ |response,request,result|
|
85
|
-
Nylas.interpret_response(result, response, {:raw_response => true})
|
86
|
-
response
|
87
|
-
}
|
88
|
-
end
|
89
|
-
|
90
|
-
def expanded
|
91
|
-
expanded_url = url(action='?view=expanded')
|
92
|
-
|
93
|
-
RestClient.get(expanded_url){ |response,request,result|
|
94
|
-
json = Nylas.interpret_response(result, response, :expected_class => Object)
|
95
|
-
expanded_message = Nylas::ExpandedMessage.new(@_api)
|
96
|
-
expanded_message.inflate(json)
|
97
|
-
expanded_message
|
98
|
-
}
|
99
|
-
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
data/lib/mixins.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
module Nylas
|
2
|
-
module ReadUnreadMethods
|
3
|
-
def update_param!(param, value)
|
4
|
-
update('PUT', '', {
|
5
|
-
param => value,
|
6
|
-
})
|
7
|
-
end
|
8
|
-
|
9
|
-
def mark_as_read!
|
10
|
-
update_param!(:unread, false)
|
11
|
-
end
|
12
|
-
|
13
|
-
def mark_as_unread!
|
14
|
-
update_param!(:unread, true)
|
15
|
-
end
|
16
|
-
|
17
|
-
def star!
|
18
|
-
update_param!(:starred, true)
|
19
|
-
end
|
20
|
-
|
21
|
-
def unstar!
|
22
|
-
update_param!(:starred, false)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
data/lib/parameters.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
module Nylas
|
2
|
-
module Parameters
|
3
|
-
def self.included(base)
|
4
|
-
base.extend(ClassMethods)
|
5
|
-
end
|
6
|
-
|
7
|
-
def parameters
|
8
|
-
self.class.instance_variable_get("@parameters")
|
9
|
-
end
|
10
|
-
|
11
|
-
module ClassMethods
|
12
|
-
def parameter(*params)
|
13
|
-
@parameters ||= []
|
14
|
-
params.each do |param|
|
15
|
-
attr_accessor param
|
16
|
-
@parameters << param.to_s
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def inherited(subclass)
|
21
|
-
parameters = instance_variable_get("@parameters") || []
|
22
|
-
subclass.instance_variable_set("@parameters", parameters.clone)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|