nylas-shipmnts 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/account.rb +32 -0
- data/lib/api_account.rb +22 -0
- data/lib/api_thread.rb +85 -0
- data/lib/calendar.rb +16 -0
- data/lib/contact.rb +10 -0
- data/lib/draft.rb +49 -0
- data/lib/event.rb +47 -0
- data/lib/expanded_message.rb +20 -0
- data/lib/file.rb +40 -0
- data/lib/folder.rb +12 -0
- data/lib/label.rb +4 -0
- data/lib/message.rb +102 -0
- data/lib/mixins.rb +26 -0
- data/lib/nylas.rb +394 -0
- data/lib/parameters.rb +26 -0
- data/lib/restful_model.rb +82 -0
- data/lib/restful_model_collection.rb +162 -0
- data/lib/time_attr_accessor.rb +12 -0
- data/lib/version.rb +3 -0
- metadata +295 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: db4af9acaa2ecf89fa69b2bb09342e0625d28f11
|
4
|
+
data.tar.gz: cfe8a6b5aff642fe00b273e983705283c0594bb1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6510a2be9cfbf36a0f63e05d14348a96d19bacff9cceebb011ad7fe2460a360f2809112183f04d6fb51b6f739d14ceffeb430384575f39c507114e869739c675
|
7
|
+
data.tar.gz: 18a6acf9aea7d7a2165a830d6533ae44288c487b7f288856c80cbf7332f34053022b591864a2006af09cd3ea9f76ca951b80b19448500a404bed332a513d2306
|
data/lib/account.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'restful_model'
|
2
|
+
|
3
|
+
module Nylas
|
4
|
+
class Account < RestfulModel
|
5
|
+
|
6
|
+
parameter :account_id
|
7
|
+
parameter :trial
|
8
|
+
parameter :trial_expires
|
9
|
+
parameter :sync_state
|
10
|
+
parameter :billing_state
|
11
|
+
|
12
|
+
def _perform_account_action!(action)
|
13
|
+
raise UnexpectedAccountAction.new unless action == "upgrade" || action == "downgrade"
|
14
|
+
|
15
|
+
collection = ManagementModelCollection.new(Account, @_api, {:account_id=>@account_id})
|
16
|
+
::RestClient.post("#{collection.url}/#{@account_id}/#{action}",{}) do |response, request, result|
|
17
|
+
# Throw any exceptions
|
18
|
+
json = Nylas.interpret_response(result, response, :expected_class => Object)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def upgrade!
|
23
|
+
_perform_account_action!('upgrade')
|
24
|
+
end
|
25
|
+
|
26
|
+
def downgrade!
|
27
|
+
_perform_account_action!('downgrade')
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
data/lib/api_account.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# api_account.rb --- functions related to the /account endpoint.
|
2
|
+
# not to be confused with account.rb which is used by the hosted API
|
3
|
+
# account management endpoint.
|
4
|
+
require 'restful_model'
|
5
|
+
|
6
|
+
module Nylas
|
7
|
+
class APIAccount < RestfulModel
|
8
|
+
|
9
|
+
parameter :account_id
|
10
|
+
parameter :email_address
|
11
|
+
parameter :id
|
12
|
+
parameter :name
|
13
|
+
parameter :object
|
14
|
+
parameter :organization_unit
|
15
|
+
parameter :provider
|
16
|
+
parameter :sync_state
|
17
|
+
|
18
|
+
def self.collection_name
|
19
|
+
"accounts"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/api_thread.rb
ADDED
@@ -0,0 +1,85 @@
|
|
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
ADDED
@@ -0,0 +1,16 @@
|
|
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
ADDED
data/lib/draft.rb
ADDED
@@ -0,0 +1,49 @@
|
|
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
|
+
def attach(file)
|
12
|
+
file.save! unless file.id
|
13
|
+
@file_ids ||= []
|
14
|
+
@file_ids.push(file.id)
|
15
|
+
end
|
16
|
+
|
17
|
+
def as_json(options = {})
|
18
|
+
# FIXME @karim: this is a bit of a hack --- Draft inherits Message
|
19
|
+
# was okay until we overrode Message#as_json to allow updating folders/labels.
|
20
|
+
# This broke draft sending, which relies on RestfulModel::as_json to work.
|
21
|
+
grandparent = self.class.superclass.superclass
|
22
|
+
meth = grandparent.instance_method(:as_json)
|
23
|
+
meth.bind(self).call
|
24
|
+
end
|
25
|
+
|
26
|
+
def send!
|
27
|
+
url = @_api.url_for_path("/send")
|
28
|
+
if @id
|
29
|
+
data = {:draft_id => @id, :version => @version}
|
30
|
+
else
|
31
|
+
data = as_json()
|
32
|
+
end
|
33
|
+
|
34
|
+
::RestClient.post(url, data.to_json, :content_type => :json) do |response, request, result|
|
35
|
+
response = Nylas.interpret_response(result, response, {:expected_class => Object})
|
36
|
+
self.inflate(response)
|
37
|
+
end
|
38
|
+
|
39
|
+
self
|
40
|
+
end
|
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
|
+
|
48
|
+
end
|
49
|
+
end
|
data/lib/event.rb
ADDED
@@ -0,0 +1,47 @@
|
|
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
|
@@ -0,0 +1,20 @@
|
|
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
ADDED
@@ -0,0 +1,40 @@
|
|
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
ADDED
data/lib/label.rb
ADDED
data/lib/message.rb
ADDED
@@ -0,0 +1,102 @@
|
|
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
|