nylas-streaming 4.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/nylas-streaming.rb +81 -0
  3. metadata +328 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a1784972f58c7cf9b17c7480d8ceef330e143294
4
+ data.tar.gz: 00bab28f2e0bc3231a42c96f2c499b97587ed6b3
5
+ SHA512:
6
+ metadata.gz: '0509711c38178125c42b57fe69ccc6d5f75f9b2470804def7360079c03b81a5b3297e7d88cca6fc1b6ccf74f4b65f35ed9aad3724ddcc1a6501b1f0bc867b4f1'
7
+ data.tar.gz: 4dd9c4c6e7cfbabbe1e93f30ae37c3fb9e46ab8a42f08cf84648a074637887a81b186f247c86363a07edf696aca8fc2515b47c7ee688cc3e9a7bf98c0c295b68
@@ -0,0 +1,81 @@
1
+ require 'yajl'
2
+ require 'em-http'
3
+ require 'nylas'
4
+
5
+ module Nylas
6
+ class API
7
+ def delta_stream(cursor, exclude_types=[], timeout=0, expanded_view=false, include_types=[], &block)
8
+ Streaming::Stream.new(api: self, cursor: cursor, timeout: timeout, expanded_view: expanded_view,
9
+ exclude_types: exclude_types, include_types: include_types).listen(&block)
10
+ end
11
+ end
12
+
13
+ module Streaming
14
+ class Stream
15
+ extend Forwardable
16
+ def_delegators :api, :url_for_path
17
+ attr_accessor :api, :timeout, :expanded_view, :include_types, :exclude_types, :cursor
18
+
19
+ def initialize(api: , cursor: , timeout: 0, expanded_view: false, include_types: [], exclude_types: [])
20
+ self.api = api
21
+ self.cursor = cursor
22
+ self.timeout = timeout
23
+ self.expanded_view = expanded_view
24
+ self.include_types = TypesFilter.new(:include, types: include_types)
25
+ self.exclude_types = TypesFilter.new(:exclude, types: exclude_types)
26
+ end
27
+
28
+ def listen
29
+ raise 'Please provide a block for receiving the delta objects' if !block_given?
30
+
31
+ exclude_string = exclude_types.to_query_string
32
+ include_string = include_types.to_query_string
33
+
34
+ # loop and yield deltas indefinitely.
35
+ path = self.url_for_path("/delta/streaming?exclude_folders=false&cursor=#{cursor}#{exclude_string}#{include_string}")
36
+ if expanded_view
37
+ path += '&view=expanded'
38
+ end
39
+
40
+ parser = Yajl::Parser.new(:symbolize_keys => false)
41
+ parser.on_parse_complete = proc do |data|
42
+ delta = Nylas.interpret_response(OpenStruct.new(:code => '200'), data, {:expected_class => Object, :result_parsed => true})
43
+
44
+ if not OBJECTS_TABLE.has_key?(delta['object'])
45
+ next
46
+ end
47
+
48
+ cls = OBJECTS_TABLE[delta['object']]
49
+ if EXPANDED_OBJECTS_TABLE.has_key?(delta['object']) and expanded_view
50
+ cls = EXPANDED_OBJECTS_TABLE[delta['object']]
51
+ end
52
+
53
+ obj = cls.new(api)
54
+
55
+ case delta["event"]
56
+ when 'create', 'modify'
57
+ obj.inflate(delta['attributes'])
58
+ obj.cursor = delta["cursor"]
59
+ yield delta["event"], obj
60
+ when 'delete'
61
+ obj.id = delta["id"]
62
+ obj.cursor = delta["cursor"]
63
+ yield delta["event"], obj
64
+ end
65
+ end
66
+
67
+ http = EventMachine::HttpRequest.new(path, :connect_timeout => 0, :inactivity_timeout => timeout).get(:keepalive => true)
68
+
69
+ # set a callback on the HTTP stream that parses incoming chunks as they come in
70
+ http.stream do |chunk|
71
+ parser << chunk
72
+ end
73
+
74
+ http.errback do
75
+ raise UnexpectedResponse.new http.error
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+
metadata ADDED
@@ -0,0 +1,328 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nylas-streaming
3
+ version: !ruby/object:Gem::Version
4
+ version: 4.0.0.rc1
5
+ platform: ruby
6
+ authors:
7
+ - Nylas, Inc.
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-12-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nylas
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: yajl-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 1.2.1
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '1.2'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.2.1
47
+ - !ruby/object:Gem::Dependency
48
+ name: em-http-request
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.1'
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 1.1.3
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '1.1'
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 1.1.3
67
+ - !ruby/object:Gem::Dependency
68
+ name: yard
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 0.9.12
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 0.9.12
81
+ - !ruby/object:Gem::Dependency
82
+ name: bundler
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: 1.3.5
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 1.3.5
95
+ - !ruby/object:Gem::Dependency
96
+ name: jeweler
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: 2.1.2
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: 2.1.2
109
+ - !ruby/object:Gem::Dependency
110
+ name: pry
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: 0.10.4
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 0.10.4
123
+ - !ruby/object:Gem::Dependency
124
+ name: pry-nav
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: 0.2.4
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 0.2.4
137
+ - !ruby/object:Gem::Dependency
138
+ name: pry-stack_explorer
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: 0.4.9.2
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: 0.4.9.2
151
+ - !ruby/object:Gem::Dependency
152
+ name: rspec
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: 3.5.0
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: 3.5.0
165
+ - !ruby/object:Gem::Dependency
166
+ name: shoulda
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: 3.4.0
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: 3.4.0
179
+ - !ruby/object:Gem::Dependency
180
+ name: webmock
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: 2.1.0
186
+ type: :development
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: 2.1.0
193
+ - !ruby/object:Gem::Dependency
194
+ name: sinatra
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: 1.4.7
200
+ type: :development
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ version: 1.4.7
207
+ - !ruby/object:Gem::Dependency
208
+ name: informed
209
+ requirement: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - "~>"
212
+ - !ruby/object:Gem::Version
213
+ version: '1.0'
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - "~>"
219
+ - !ruby/object:Gem::Version
220
+ version: '1.0'
221
+ - !ruby/object:Gem::Dependency
222
+ name: faker
223
+ requirement: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - "~>"
226
+ - !ruby/object:Gem::Version
227
+ version: '1.8'
228
+ type: :development
229
+ prerelease: false
230
+ version_requirements: !ruby/object:Gem::Requirement
231
+ requirements:
232
+ - - "~>"
233
+ - !ruby/object:Gem::Version
234
+ version: '1.8'
235
+ - !ruby/object:Gem::Dependency
236
+ name: awesome_print
237
+ requirement: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - "~>"
240
+ - !ruby/object:Gem::Version
241
+ version: '1.0'
242
+ type: :development
243
+ prerelease: false
244
+ version_requirements: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - "~>"
247
+ - !ruby/object:Gem::Version
248
+ version: '1.0'
249
+ - !ruby/object:Gem::Dependency
250
+ name: simplecov
251
+ requirement: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - "~>"
254
+ - !ruby/object:Gem::Version
255
+ version: '0.15'
256
+ type: :development
257
+ prerelease: false
258
+ version_requirements: !ruby/object:Gem::Requirement
259
+ requirements:
260
+ - - "~>"
261
+ - !ruby/object:Gem::Version
262
+ version: '0.15'
263
+ - !ruby/object:Gem::Dependency
264
+ name: rubocop
265
+ requirement: !ruby/object:Gem::Requirement
266
+ requirements:
267
+ - - "~>"
268
+ - !ruby/object:Gem::Version
269
+ version: '0.51'
270
+ type: :development
271
+ prerelease: false
272
+ version_requirements: !ruby/object:Gem::Requirement
273
+ requirements:
274
+ - - "~>"
275
+ - !ruby/object:Gem::Version
276
+ version: '0.51'
277
+ - !ruby/object:Gem::Dependency
278
+ name: rubocop-rspec
279
+ requirement: !ruby/object:Gem::Requirement
280
+ requirements:
281
+ - - "~>"
282
+ - !ruby/object:Gem::Version
283
+ version: '1.20'
284
+ type: :development
285
+ prerelease: false
286
+ version_requirements: !ruby/object:Gem::Requirement
287
+ requirements:
288
+ - - "~>"
289
+ - !ruby/object:Gem::Version
290
+ version: '1.20'
291
+ description: Gem for interacting with the Nylas API.
292
+ email: support@nylas.com
293
+ executables: []
294
+ extensions: []
295
+ extra_rdoc_files: []
296
+ files:
297
+ - lib/nylas-streaming.rb
298
+ homepage: http://github.com/nylas/nylas-ruby
299
+ licenses:
300
+ - MIT
301
+ metadata:
302
+ bug_tracker_uri: https://github.com/nylas/nylas-ruby/issues
303
+ changelog_uri: https://github.com/nylas/nylas-ruby/blob/master/CHANGELOG.md
304
+ documentation_uri: http://www.rubydoc.info/gems/nylas
305
+ homepage_uri: https://www.nylas.com
306
+ source_code_uri: https://github.com/nylas/nylas-ruby
307
+ wiki_uri: https://github.com/nylas/nylas-ruby/wiki
308
+ post_install_message:
309
+ rdoc_options: []
310
+ require_paths:
311
+ - lib
312
+ required_ruby_version: !ruby/object:Gem::Requirement
313
+ requirements:
314
+ - - ">="
315
+ - !ruby/object:Gem::Version
316
+ version: '0'
317
+ required_rubygems_version: !ruby/object:Gem::Requirement
318
+ requirements:
319
+ - - ">"
320
+ - !ruby/object:Gem::Version
321
+ version: 1.3.1
322
+ requirements: []
323
+ rubyforge_project:
324
+ rubygems_version: 2.6.13
325
+ signing_key:
326
+ specification_version: 4
327
+ summary: Gem for interacting with the Nylas API
328
+ test_files: []