nylas-shipmnts 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 +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
|