inbox 0.17.2 → 0.17.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +45 -1
- data/lib/api_thread.rb +40 -1
- data/lib/message.rb +45 -0
- data/lib/namespace.rb +11 -0
- metadata +33 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70c2c8822c460f75a72323535a4f9494410e5a1c
|
4
|
+
data.tar.gz: 15a62798f4553d58b7c29cdd7b89957537a73d90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 826daef856721dbcdcd7df25daa12d722cb0b5d334b4f3518cb95c6668c28ac7b20a231220a92308759d6a99e6fecd0a3f0cc6f45473ecf5d727e109b8742dd4
|
7
|
+
data.tar.gz: 143b7591126fb7e68ab8f882b84be4261241ef123771c1f5eeacb6c580215b2b64b84b52953811f1e9459ebd6f73820d96ad3339b2f9860022c625d265088774
|
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:
|
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/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)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.17.
|
4
|
+
version: 0.17.3
|
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-
|
13
|
+
date: 2015-07-23 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,8 +202,6 @@ extra_rdoc_files:
|
|
202
202
|
- LICENSE.txt
|
203
203
|
- README.md
|
204
204
|
files:
|
205
|
-
- LICENSE.txt
|
206
|
-
- README.md
|
207
205
|
- lib/account.rb
|
208
206
|
- lib/api_thread.rb
|
209
207
|
- lib/calendar.rb
|
@@ -222,6 +220,8 @@ files:
|
|
222
220
|
- lib/tag.rb
|
223
221
|
- lib/time_attr_accessor.rb
|
224
222
|
- lib/version.rb
|
223
|
+
- LICENSE.txt
|
224
|
+
- README.md
|
225
225
|
homepage: http://github.com/nylas/nylas-ruby
|
226
226
|
licenses:
|
227
227
|
- MIT
|
@@ -232,17 +232,17 @@ require_paths:
|
|
232
232
|
- lib
|
233
233
|
required_ruby_version: !ruby/object:Gem::Requirement
|
234
234
|
requirements:
|
235
|
-
- -
|
235
|
+
- - '>='
|
236
236
|
- !ruby/object:Gem::Version
|
237
237
|
version: '0'
|
238
238
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
239
239
|
requirements:
|
240
|
-
- -
|
240
|
+
- - '>='
|
241
241
|
- !ruby/object:Gem::Version
|
242
242
|
version: '0'
|
243
243
|
requirements: []
|
244
244
|
rubyforge_project:
|
245
|
-
rubygems_version: 2.
|
245
|
+
rubygems_version: 2.0.14
|
246
246
|
signing_key:
|
247
247
|
specification_version: 4
|
248
248
|
summary: Gem for interacting with the Nylas API
|