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.
@@ -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