nylas-shipmnts 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -0,0 +1,10 @@
1
+ require 'restful_model'
2
+
3
+ module Nylas
4
+ class Contact < RestfulModel
5
+
6
+ parameter :name
7
+ parameter :email
8
+
9
+ end
10
+ end
@@ -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
@@ -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
@@ -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
+
@@ -0,0 +1,12 @@
1
+ require 'restful_model'
2
+
3
+ module Nylas
4
+ class Folder < RestfulModel
5
+
6
+ parameter :display_name
7
+ parameter :name
8
+
9
+ end
10
+
11
+ Label = Folder.clone
12
+ end
@@ -0,0 +1,4 @@
1
+ require 'folder'
2
+
3
+ module Nylas
4
+ end
@@ -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