nylas-streaming 4.0.0.rc1

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.
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: []