nylas 0.17.4 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d061cfce1862deebf40819ca03388c5b0cd3ea13
4
- data.tar.gz: 753000eaca905c146cbfcd635096cf0c5116fe73
3
+ metadata.gz: f7c3e5a043311ee67a943f921c0589294fec6371
4
+ data.tar.gz: f1864ea6369f9f045fdcf56f545a4a8d7cea926a
5
5
  SHA512:
6
- metadata.gz: 751f373175171a2d5e49edfcbdfbbf14edd251e5bb79c40e43a054c37b52c566b127a144b350328adf36f118d21943580ba0bb7e5442e5682a07a2478ba8d524
7
- data.tar.gz: 00f5943bc9cf5b72a9d088a43e07b40523868ce5938e943bc873f80894ce2f17e3a7e4d7fc176e1a6e83b4c94ccb28db2df42301f724d97ed4d453097c299af4
6
+ metadata.gz: ad63f75f2368884bd1eb62b3fce3672c72629b41a7153f58c8b3d9c451ce37864c02472648ab30d463165584d07cd37d0d2d29c540c7bec16fdada80861c5fe9
7
+ data.tar.gz: d62061c5dbcf67094309f95cdb7568ec1649ef58fa4d6cac9266d35c24187878664b506d83b733a5d9b70a116cc299a123e29beac1fd78244329242e092eccdf
data/README.md CHANGED
@@ -173,11 +173,24 @@ thread.mark_as_read!
173
173
  # Archive
174
174
  thread.archive!
175
175
 
176
- # Add or remove arbitrary tags
176
+ # Add or remove arbitrary tags (DEPRECATED --- you should use the new labels and folders API)
177
177
  tagsToAdd = ['inbox', 'cfa1233ef123acd12']
178
178
  tagsToRemove = []
179
179
  thread.update_tags!(tagsToAdd, tagsToRemove)
180
180
 
181
+ # Add a new label to a message
182
+
183
+ important = nil
184
+ ns.labels.each do |label|
185
+ if label.display_name == 'Important'
186
+ important = label
187
+ end
188
+ end
189
+
190
+ thread = ns.threads.where(:from => "helena@nylas.com").first
191
+ thread.labels.push(important)
192
+ thread.save!
193
+
181
194
  # List messages
182
195
  thread.messages.each do |message|
183
196
  puts message.subject
@@ -198,6 +211,37 @@ file = namespace.files.build(:file => File.new("./public/favicon.ico", 'rb'))
198
211
  file.save!
199
212
  ```
200
213
 
214
+ ### Working with Labels/Folder
215
+
216
+ The new folders and labels API replaces the now deprecated Tags API. It allows you to apply Gmail labels to whole threads or individual messages and, for providers other than Gmail, to move threads and messages between folders.
217
+
218
+ ```ruby
219
+
220
+ # List labels
221
+ namespace.labels.each do |label|
222
+ puts label.display_name, label.id
223
+ end
224
+
225
+ # Create a label
226
+ label = ns.folders.build(:display_name => 'Test label', :name => 'test name')
227
+ label.save!
228
+
229
+ # Create a folder
230
+ #
231
+ # Note that Folders and Labels are absolutely identical from the standpoint of the SDK.
232
+ # The only difference is that a message can have many labels but only a single folder.
233
+ fld = ns.folders.build(:display_name => 'Test folder', :name => 'test name')
234
+ fld.save!
235
+
236
+ # Rename a folder
237
+ #
238
+ # Note that you can not rename folders like INBOX, Trash, etc.
239
+ fld = ns.folders.first
240
+ fld.display_name = 'Renamed folder'
241
+ fld.save!
242
+
243
+ ```
244
+
201
245
  ### Working with Messages, Contacts, etc.
202
246
 
203
247
  Each of the primary collections (contacts, messages, etc.) behave the same way as `threads`. For example, finding messages with a filter is similar to finding threads:
@@ -255,6 +299,13 @@ new_event.when = {:start_time => 1407542195, :end_time => 1407543195}
255
299
 
256
300
  # Persist the event --- it's automatically synced back to the Google or Exchange calendar
257
301
  new_event.save!
302
+
303
+ # Send an invite/update message to the participants
304
+ new_event.save!(:notify_participants => true)
305
+
306
+ # RSVP to an invite (Note: this only works for the events in the 'Emailed events' calendar)
307
+ # possible statuses are 'yes', 'no' and 'maybe'.
308
+ emailed_invite.rsvp!(status='yes', comment='I will come')
258
309
  ```
259
310
 
260
311
  ## Using the Delta sync API
data/lib/api_thread.rb CHANGED
@@ -11,9 +11,31 @@ module Inbox
11
11
  parameter :tags
12
12
  parameter :message_ids
13
13
  parameter :draft_ids
14
+ parameter :labels
15
+ parameter :folder
14
16
  time_attr_accessor :last_message_timestamp
15
17
  time_attr_accessor :first_message_timestamp
16
18
 
19
+ def inflate(json)
20
+ super
21
+ @labels ||= []
22
+ @folder ||= nil
23
+
24
+ # This is a special case --- we receive label data from the API
25
+ # as JSON but we want it to behave like an API object.
26
+ @labels.map! do |label_json|
27
+ label = Label.new(@_api)
28
+ label.inflate(label_json)
29
+ label
30
+ end
31
+
32
+ if not folder.nil?
33
+ folder = folder.new(@_api)
34
+ folder.inflate(@folder)
35
+ @folder = folder
36
+ end
37
+ end
38
+
17
39
  def messages
18
40
  @messages ||= RestfulModelCollection.new(Message, @_api, @namespace_id, {:thread_id=>@id})
19
41
  end
@@ -52,5 +74,22 @@ module Inbox
52
74
  def unstar!
53
75
  update_tags!([], ['starred'])
54
76
  end
77
+
78
+ def as_json(options = {})
79
+ hash = {}
80
+
81
+ if not @labels.nil? and @labels != []
82
+ hash["labels"] = @labels.map do |label|
83
+ label.id
84
+ end
85
+ end
86
+
87
+ if not @folder.nil?
88
+ hash["folder"] = @folder.id
89
+ end
90
+
91
+ hash
92
+ end
93
+
55
94
  end
56
- end
95
+ end
data/lib/event.rb CHANGED
@@ -30,5 +30,18 @@ module Inbox
30
30
  return hash
31
31
  end
32
32
 
33
+ def rsvp!(status, comment)
34
+ url = @_api.url_for_path("/n/#{@namespace_id}/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 = Inbox.interpret_response(result, response, :expected_class => Object)
39
+ self.inflate(json)
40
+ end
41
+
42
+ self
43
+ end
44
+
45
+
33
46
  end
34
47
  end
data/lib/folder.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'restful_model'
2
+
3
+ module Inbox
4
+ class Folder < RestfulModel
5
+
6
+ parameter :display_name
7
+ parameter :name
8
+
9
+ end
10
+
11
+ Label = Folder.clone
12
+ end
data/lib/inbox.rb CHANGED
@@ -80,7 +80,7 @@ module Inbox
80
80
  if ::RestClient.before_execution_procs.empty?
81
81
  ::RestClient.add_before_execution_proc do |req, params|
82
82
  req.add_field('X-Inbox-API-Wrapper', 'ruby')
83
- req['User-Agent'] = "Ruby SDK #{@version} - #{RUBY_VERSION}"
83
+ req['User-Agent'] = "Nylas Ruby SDK #{@version} - #{RUBY_VERSION}"
84
84
  end
85
85
  end
86
86
  end
data/lib/label.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'folder'
2
+
3
+ module Inbox
4
+ end
data/lib/message.rb CHANGED
@@ -15,12 +15,57 @@ module Inbox
15
15
  parameter :thread_id
16
16
  parameter :body
17
17
  parameter :unread
18
+ parameter :starred
19
+ parameter :folder
20
+ parameter :labels
18
21
 
19
22
  def inflate(json)
20
23
  super
21
24
  @to ||= []
22
25
  @cc ||= []
23
26
  @bcc ||= []
27
+ @labels ||= []
28
+ @folder ||= nil
29
+
30
+ # This is a special case --- we receive label data from the API
31
+ # as JSON but we want it to behave like an API object.
32
+ @labels.map! do |label_json|
33
+ label = Label.new(@_api)
34
+ label.inflate(label_json)
35
+ label
36
+ end
37
+
38
+ if not folder.nil?
39
+ folder = folder.new(@_api)
40
+ folder.inflate(@folder)
41
+ @folder = folder
42
+ end
43
+ end
44
+
45
+ def as_json(options = {})
46
+ hash = {}
47
+
48
+ # unread, starred and labels/folder are the only attribute
49
+ # you can modify.
50
+ if not @unread.nil?
51
+ hash["unread"] = @unread
52
+ end
53
+
54
+ if not @starred.nil?
55
+ hash["starred"] = @starred
56
+ end
57
+
58
+ if not @labels.nil? and @labels != []
59
+ hash["labels"] = @labels.map do |label|
60
+ label.id
61
+ end
62
+ end
63
+
64
+ if not @folder.nil?
65
+ hash["folder"] = @folder.id
66
+ end
67
+
68
+ hash
24
69
  end
25
70
 
26
71
  def files
data/lib/namespace.rb CHANGED
@@ -7,6 +7,7 @@ require 'contact'
7
7
  require 'file'
8
8
  require 'calendar'
9
9
  require 'event'
10
+ require 'folder'
10
11
  require 'yajl'
11
12
  require 'em-http'
12
13
  require 'ostruct'
@@ -62,6 +63,14 @@ module Inbox
62
63
  @events ||= RestfulModelCollection.new(Event, @_api, @id)
63
64
  end
64
65
 
66
+ def folders
67
+ @folders ||= RestfulModelCollection.new(Folder, @_api, @id)
68
+ end
69
+
70
+ def labels
71
+ @labels ||= RestfulModelCollection.new(Label, @_api, @id)
72
+ end
73
+
65
74
  def get_cursor(timestamp)
66
75
  # Get the cursor corresponding to a specific timestamp.
67
76
  path = @_api.url_for_path("/n/#{@namespace_id}/delta/generate_cursor")
@@ -88,6 +97,8 @@ module Inbox
88
97
  "message" => Inbox::Message,
89
98
  "namespace" => Inbox::Namespace,
90
99
  "tag" => Inbox::Tag,
100
+ "folder" => Inbox::Folder,
101
+ "label" => Inbox::Label,
91
102
  }
92
103
 
93
104
  def _build_exclude_types(exclude_types)
data/lib/nylas.rb CHANGED
@@ -80,7 +80,7 @@ module Inbox
80
80
  if ::RestClient.before_execution_procs.empty?
81
81
  ::RestClient.add_before_execution_proc do |req, params|
82
82
  req.add_field('X-Inbox-API-Wrapper', 'ruby')
83
- req['User-Agent'] = "Ruby SDK #{@version} - #{RUBY_VERSION}"
83
+ req['User-Agent'] = "Nylas Ruby SDK #{@version} - #{RUBY_VERSION}"
84
84
  end
85
85
  end
86
86
  end
data/lib/restful_model.rb CHANGED
@@ -31,11 +31,11 @@ module Inbox
31
31
  end
32
32
  end
33
33
 
34
- def save!
34
+ def save!(params={})
35
35
  if id
36
- update('PUT', '', as_json())
36
+ update('PUT', '', as_json(), params)
37
37
  else
38
- update('POST', '', as_json())
38
+ update('POST', '', as_json(), params)
39
39
  end
40
40
  end
41
41
 
@@ -58,10 +58,10 @@ module Inbox
58
58
  hash
59
59
  end
60
60
 
61
- def update(http_method, action, data = {})
61
+ def update(http_method, action, data = {}, params = {})
62
62
  http_method = http_method.downcase
63
63
 
64
- ::RestClient.send(http_method, self.url(action), data.to_json, :content_type => :json) do |response, request, result|
64
+ ::RestClient.send(http_method, self.url(action), data.to_json, :content_type => :json, :params => params) do |response, request, result|
65
65
  unless http_method == 'delete'
66
66
  json = Inbox.interpret_response(result, response, :expected_class => Object)
67
67
  inflate(json)
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Inbox
2
- VERSION = "0.17.4"
2
+ VERSION = "0.18.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nylas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.4
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Gotow
@@ -10,188 +10,188 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-07-23 00:00:00.000000000 Z
13
+ date: 2015-07-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ~>
19
+ - - "~>"
20
20
  - !ruby/object:Gem::Version
21
21
  version: '1.7'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - ~>
26
+ - - "~>"
27
27
  - !ruby/object:Gem::Version
28
28
  version: '1.7'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: yajl-ruby
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - '>='
33
+ - - ">="
34
34
  - !ruby/object:Gem::Version
35
35
  version: '0'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - '>='
40
+ - - ">="
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: em-http-request
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - '>='
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
49
  version: '0'
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - '>='
54
+ - - ">="
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: rspec
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - '>='
61
+ - - ">="
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - '>='
68
+ - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: shoulda
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - '>='
75
+ - - ">="
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - '>='
82
+ - - ">="
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: rdoc
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - ~>
89
+ - - "~>"
90
90
  - !ruby/object:Gem::Version
91
91
  version: '3.12'
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - ~>
96
+ - - "~>"
97
97
  - !ruby/object:Gem::Version
98
98
  version: '3.12'
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: bundler
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
- - - '>='
103
+ - - ">="
104
104
  - !ruby/object:Gem::Version
105
105
  version: 1.3.5
106
106
  type: :development
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - '>='
110
+ - - ">="
111
111
  - !ruby/object:Gem::Version
112
112
  version: 1.3.5
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: jeweler
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
- - - ~>
117
+ - - "~>"
118
118
  - !ruby/object:Gem::Version
119
119
  version: 1.8.4
120
120
  type: :development
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
- - - ~>
124
+ - - "~>"
125
125
  - !ruby/object:Gem::Version
126
126
  version: 1.8.4
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: pry
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
- - - '>='
131
+ - - ">="
132
132
  - !ruby/object:Gem::Version
133
133
  version: '0'
134
134
  type: :development
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  requirements:
138
- - - '>='
138
+ - - ">="
139
139
  - !ruby/object:Gem::Version
140
140
  version: '0'
141
141
  - !ruby/object:Gem::Dependency
142
142
  name: pry-nav
143
143
  requirement: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - '>='
145
+ - - ">="
146
146
  - !ruby/object:Gem::Version
147
147
  version: '0'
148
148
  type: :development
149
149
  prerelease: false
150
150
  version_requirements: !ruby/object:Gem::Requirement
151
151
  requirements:
152
- - - '>='
152
+ - - ">="
153
153
  - !ruby/object:Gem::Version
154
154
  version: '0'
155
155
  - !ruby/object:Gem::Dependency
156
156
  name: pry-stack_explorer
157
157
  requirement: !ruby/object:Gem::Requirement
158
158
  requirements:
159
- - - '>='
159
+ - - ">="
160
160
  - !ruby/object:Gem::Version
161
161
  version: '0'
162
162
  type: :development
163
163
  prerelease: false
164
164
  version_requirements: !ruby/object:Gem::Requirement
165
165
  requirements:
166
- - - '>='
166
+ - - ">="
167
167
  - !ruby/object:Gem::Version
168
168
  version: '0'
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: webmock
171
171
  requirement: !ruby/object:Gem::Requirement
172
172
  requirements:
173
- - - '>='
173
+ - - ">="
174
174
  - !ruby/object:Gem::Version
175
175
  version: '0'
176
176
  type: :development
177
177
  prerelease: false
178
178
  version_requirements: !ruby/object:Gem::Requirement
179
179
  requirements:
180
- - - '>='
180
+ - - ">="
181
181
  - !ruby/object:Gem::Version
182
182
  version: '0'
183
183
  - !ruby/object:Gem::Dependency
184
184
  name: sinatra
185
185
  requirement: !ruby/object:Gem::Requirement
186
186
  requirements:
187
- - - '>='
187
+ - - ">="
188
188
  - !ruby/object:Gem::Version
189
189
  version: '0'
190
190
  type: :development
191
191
  prerelease: false
192
192
  version_requirements: !ruby/object:Gem::Requirement
193
193
  requirements:
194
- - - '>='
194
+ - - ">="
195
195
  - !ruby/object:Gem::Version
196
196
  version: '0'
197
197
  description: Gem for interacting with the Nylas API.
@@ -202,6 +202,8 @@ extra_rdoc_files:
202
202
  - LICENSE.txt
203
203
  - README.md
204
204
  files:
205
+ - LICENSE.txt
206
+ - README.md
205
207
  - lib/account.rb
206
208
  - lib/api_thread.rb
207
209
  - lib/calendar.rb
@@ -209,7 +211,9 @@ files:
209
211
  - lib/draft.rb
210
212
  - lib/event.rb
211
213
  - lib/file.rb
214
+ - lib/folder.rb
212
215
  - lib/inbox.rb
216
+ - lib/label.rb
213
217
  - lib/message.rb
214
218
  - lib/namespace.rb
215
219
  - lib/nylas.rb
@@ -220,8 +224,6 @@ files:
220
224
  - lib/tag.rb
221
225
  - lib/time_attr_accessor.rb
222
226
  - lib/version.rb
223
- - LICENSE.txt
224
- - README.md
225
227
  homepage: http://github.com/nylas/nylas-ruby
226
228
  licenses:
227
229
  - MIT
@@ -232,17 +234,17 @@ require_paths:
232
234
  - lib
233
235
  required_ruby_version: !ruby/object:Gem::Requirement
234
236
  requirements:
235
- - - '>='
237
+ - - ">="
236
238
  - !ruby/object:Gem::Version
237
239
  version: '0'
238
240
  required_rubygems_version: !ruby/object:Gem::Requirement
239
241
  requirements:
240
- - - '>='
242
+ - - ">="
241
243
  - !ruby/object:Gem::Version
242
244
  version: '0'
243
245
  requirements: []
244
246
  rubyforge_project:
245
- rubygems_version: 2.0.14
247
+ rubygems_version: 2.2.2
246
248
  signing_key:
247
249
  specification_version: 4
248
250
  summary: Gem for interacting with the Nylas API