nylas-streaming 4.0.0.rc1 → 4.0.0.rc2

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 +4 -4
  2. data/lib/nylas-streaming.rb +61 -62
  3. metadata +96 -110
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a1784972f58c7cf9b17c7480d8ceef330e143294
4
- data.tar.gz: 00bab28f2e0bc3231a42c96f2c499b97587ed6b3
3
+ metadata.gz: fe263b385c3cc76e3f50cd3ba445a52f6134cd3a
4
+ data.tar.gz: c7a03fa56ce03bb183c2831f2bd0b59fcfeeef33
5
5
  SHA512:
6
- metadata.gz: '0509711c38178125c42b57fe69ccc6d5f75f9b2470804def7360079c03b81a5b3297e7d88cca6fc1b6ccf74f4b65f35ed9aad3724ddcc1a6501b1f0bc867b4f1'
7
- data.tar.gz: 4dd9c4c6e7cfbabbe1e93f30ae37c3fb9e46ab8a42f08cf84648a074637887a81b186f247c86363a07edf696aca8fc2515b47c7ee688cc3e9a7bf98c0c295b68
6
+ metadata.gz: 9a5b98b98f964a7e744fee8dc6bf8abe67ab6ee700bc5f4cc149bf88e44f5a33251ab0d76f70aeefad54a13bea2246cb36f5d49b6d6ee3abddd4b3eb1476bae4
7
+ data.tar.gz: a12b61694914c59c9a22df1e3d1b0e5fcd7038040cb0d7f2b84c27cea0a5528946af4e3d6b648013a57236984b7121a958c59f653f3bc0cef9c3084cc8137ff5
@@ -1,81 +1,80 @@
1
- require 'yajl'
2
- require 'em-http'
3
- require 'nylas'
1
+ require "yajl"
2
+ require "em-http"
3
+ require "nylas"
4
4
 
5
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)
6
+ # Provides methods to work with the Nylas Streaming Deltas API
7
+ # @see https://docs.nylas.com/reference#streaming-delta-updates
8
+ module Streaming
9
+ # @see Nylas::Streaming::DeltaStream#initialize
10
+ def self.deltas(**kwargs, &callback)
11
+ DeltaStream.new(**kwargs).stream(&callback)
10
12
  end
11
- end
12
13
 
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
14
+ # A live stream of deltas that stays open until explicitely closed
15
+ class DeltaStream
16
+ attr_accessor :cursor, :api, :exclude_types, :include_types, :expanded,
17
+ :connect_timeout, :inactivity_timeout
18
18
 
19
- def initialize(api: , cursor: , timeout: 0, expanded_view: false, include_types: [], exclude_types: [])
20
- self.api = api
19
+ # @param cursor [String] Cursor to start listening for changes on
20
+ # @param api [Nylas::API]
21
+ # @param expanded [Boolean] Expands threads and messages
22
+ # @param exclude_types [Array<String>] List of Object types *not* to include in the stream
23
+ # @param include_types [Array<String>] List of Object types to exclusively include in the stream
24
+ # @param connect_timeout [Integer] How long to wait before timing out on attempted connection
25
+ # @param inactivity_timeout [Integer] How long to wait before timing out on inactivity
26
+ # rubocop:disable Metrics/ParameterLists
27
+ def initialize(cursor:, api:, exclude_types: [], include_types: [], expanded: false, connect_timeout: 0,
28
+ inactivity_timeout: 0)
21
29
  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)
30
+ self.api = api
31
+ self.exclude_types = exclude_types
32
+ self.include_types = include_types
33
+ self.expanded = expanded
34
+ self.connect_timeout = connect_timeout
35
+ self.inactivity_timeout = inactivity_timeout
26
36
  end
37
+ # rubocop:enable Metrics/ParameterLists
27
38
 
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
39
+ def stream
40
+ parser.on_parse_complete = lambda do |data|
41
+ begin
42
+ yield(Types.registry[:delta].cast(data.merge(api: api)))
43
+ rescue Nylas::Error => e
44
+ Nylas::Logging.logger.error(e)
45
+ raise e
46
46
  end
47
+ end
47
48
 
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
49
+ listener.stream { |chunk| parser << chunk }
50
+ end
52
51
 
53
- obj = cls.new(api)
52
+ def url
53
+ "#{api.client.url_for_path('/delta/streaming')}?#{query}"
54
+ end
54
55
 
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
56
+ def query
57
+ query = ["cursor=#{cursor}"]
58
+ query << "view=expanded" if expanded
59
+ query << "include_types=#{include_types.join(',')}" unless include_types.empty?
60
+ query << "exclude_types=#{exclude_types.join(',')}" unless exclude_types.empty?
61
+ query.join("&")
62
+ end
66
63
 
67
- http = EventMachine::HttpRequest.new(path, :connect_timeout => 0, :inactivity_timeout => timeout).get(:keepalive => true)
64
+ def listener
65
+ @listener ||= EventMachine::HttpRequest.new(url, connect_timeout: connect_timeout,
66
+ inactivity_timeout: inactivity_timeout).get
67
+ end
68
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
69
+ def http_error_handler(client)
70
+ raise Nylas::Error, client.error
71
+ end
73
72
 
74
- http.errback do
75
- raise UnexpectedResponse.new http.error
76
- end
73
+ def parser
74
+ return @parser if @parser
75
+ @parser = Yajl::Parser.new(symbolize_keys: true)
76
+ @parser
77
77
  end
78
78
  end
79
79
  end
80
80
  end
81
-
metadata CHANGED
@@ -1,209 +1,197 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nylas-streaming
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0.rc1
4
+ version: 4.0.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nylas, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-09 00:00:00.000000000 Z
11
+ date: 2018-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: nylas
14
+ name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '4.0'
20
- type: :runtime
19
+ version: '1.3'
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '4.0'
26
+ version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
- name: yajl-ruby
28
+ name: jeweler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.2'
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- version: 1.2.1
37
- type: :runtime
33
+ version: '2.1'
34
+ type: :development
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
38
  - - "~>"
42
39
  - !ruby/object:Gem::Version
43
- version: '1.2'
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: 1.2.1
40
+ version: '2.1'
47
41
  - !ruby/object:Gem::Dependency
48
- name: em-http-request
42
+ name: yard
49
43
  requirement: !ruby/object:Gem::Requirement
50
44
  requirements:
51
45
  - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: '1.1'
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: 1.1.3
57
- type: :runtime
47
+ version: 0.9.0
48
+ type: :development
58
49
  prerelease: false
59
50
  version_requirements: !ruby/object:Gem::Requirement
60
51
  requirements:
61
52
  - - "~>"
62
53
  - !ruby/object:Gem::Version
63
- version: '1.1'
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: 1.1.3
54
+ version: 0.9.0
67
55
  - !ruby/object:Gem::Dependency
68
- name: yard
56
+ name: awesome_print
69
57
  requirement: !ruby/object:Gem::Requirement
70
58
  requirements:
71
- - - ">="
59
+ - - "~>"
72
60
  - !ruby/object:Gem::Version
73
- version: 0.9.12
61
+ version: '1.0'
74
62
  type: :development
75
63
  prerelease: false
76
64
  version_requirements: !ruby/object:Gem::Requirement
77
65
  requirements:
78
- - - ">="
66
+ - - "~>"
79
67
  - !ruby/object:Gem::Version
80
- version: 0.9.12
68
+ version: '1.0'
81
69
  - !ruby/object:Gem::Dependency
82
- name: bundler
70
+ name: rubocop
83
71
  requirement: !ruby/object:Gem::Requirement
84
72
  requirements:
85
- - - ">="
73
+ - - "~>"
86
74
  - !ruby/object:Gem::Version
87
- version: 1.3.5
75
+ version: 0.52.0
88
76
  type: :development
89
77
  prerelease: false
90
78
  version_requirements: !ruby/object:Gem::Requirement
91
79
  requirements:
92
- - - ">="
80
+ - - "~>"
93
81
  - !ruby/object:Gem::Version
94
- version: 1.3.5
82
+ version: 0.52.0
95
83
  - !ruby/object:Gem::Dependency
96
- name: jeweler
84
+ name: rubocop-rspec
97
85
  requirement: !ruby/object:Gem::Requirement
98
86
  requirements:
99
- - - ">="
87
+ - - "~>"
100
88
  - !ruby/object:Gem::Version
101
- version: 2.1.2
89
+ version: 1.20.1
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
93
  requirements:
106
- - - ">="
94
+ - - "~>"
107
95
  - !ruby/object:Gem::Version
108
- version: 2.1.2
96
+ version: 1.20.1
109
97
  - !ruby/object:Gem::Dependency
110
- name: pry
98
+ name: overcommit
111
99
  requirement: !ruby/object:Gem::Requirement
112
100
  requirements:
113
- - - ">="
101
+ - - "~>"
114
102
  - !ruby/object:Gem::Version
115
- version: 0.10.4
103
+ version: '0.41'
116
104
  type: :development
117
105
  prerelease: false
118
106
  version_requirements: !ruby/object:Gem::Requirement
119
107
  requirements:
120
- - - ">="
108
+ - - "~>"
121
109
  - !ruby/object:Gem::Version
122
- version: 0.10.4
110
+ version: '0.41'
123
111
  - !ruby/object:Gem::Dependency
124
- name: pry-nav
112
+ name: pry
125
113
  requirement: !ruby/object:Gem::Requirement
126
114
  requirements:
127
- - - ">="
115
+ - - "~>"
128
116
  - !ruby/object:Gem::Version
129
- version: 0.2.4
117
+ version: 0.10.4
130
118
  type: :development
131
119
  prerelease: false
132
120
  version_requirements: !ruby/object:Gem::Requirement
133
121
  requirements:
134
- - - ">="
122
+ - - "~>"
135
123
  - !ruby/object:Gem::Version
136
- version: 0.2.4
124
+ version: 0.10.4
137
125
  - !ruby/object:Gem::Dependency
138
- name: pry-stack_explorer
126
+ name: pry-nav
139
127
  requirement: !ruby/object:Gem::Requirement
140
128
  requirements:
141
- - - ">="
129
+ - - "~>"
142
130
  - !ruby/object:Gem::Version
143
- version: 0.4.9.2
131
+ version: 0.2.4
144
132
  type: :development
145
133
  prerelease: false
146
134
  version_requirements: !ruby/object:Gem::Requirement
147
135
  requirements:
148
- - - ">="
136
+ - - "~>"
149
137
  - !ruby/object:Gem::Version
150
- version: 0.4.9.2
138
+ version: 0.2.4
151
139
  - !ruby/object:Gem::Dependency
152
- name: rspec
140
+ name: pry-stack_explorer
153
141
  requirement: !ruby/object:Gem::Requirement
154
142
  requirements:
155
- - - ">="
143
+ - - "~>"
156
144
  - !ruby/object:Gem::Version
157
- version: 3.5.0
145
+ version: 0.4.9
158
146
  type: :development
159
147
  prerelease: false
160
148
  version_requirements: !ruby/object:Gem::Requirement
161
149
  requirements:
162
- - - ">="
150
+ - - "~>"
163
151
  - !ruby/object:Gem::Version
164
- version: 3.5.0
152
+ version: 0.4.9
165
153
  - !ruby/object:Gem::Dependency
166
- name: shoulda
154
+ name: rspec
167
155
  requirement: !ruby/object:Gem::Requirement
168
156
  requirements:
169
- - - ">="
157
+ - - "~>"
170
158
  - !ruby/object:Gem::Version
171
- version: 3.4.0
159
+ version: '3.7'
172
160
  type: :development
173
161
  prerelease: false
174
162
  version_requirements: !ruby/object:Gem::Requirement
175
163
  requirements:
176
- - - ">="
164
+ - - "~>"
177
165
  - !ruby/object:Gem::Version
178
- version: 3.4.0
166
+ version: '3.7'
179
167
  - !ruby/object:Gem::Dependency
180
168
  name: webmock
181
169
  requirement: !ruby/object:Gem::Requirement
182
170
  requirements:
183
- - - ">="
171
+ - - "~>"
184
172
  - !ruby/object:Gem::Version
185
- version: 2.1.0
173
+ version: '3.0'
186
174
  type: :development
187
175
  prerelease: false
188
176
  version_requirements: !ruby/object:Gem::Requirement
189
177
  requirements:
190
- - - ">="
178
+ - - "~>"
191
179
  - !ruby/object:Gem::Version
192
- version: 2.1.0
180
+ version: '3.0'
193
181
  - !ruby/object:Gem::Dependency
194
- name: sinatra
182
+ name: faker
195
183
  requirement: !ruby/object:Gem::Requirement
196
184
  requirements:
197
- - - ">="
185
+ - - "~>"
198
186
  - !ruby/object:Gem::Version
199
- version: 1.4.7
187
+ version: '1.8'
200
188
  type: :development
201
189
  prerelease: false
202
190
  version_requirements: !ruby/object:Gem::Requirement
203
191
  requirements:
204
- - - ">="
192
+ - - "~>"
205
193
  - !ruby/object:Gem::Version
206
- version: 1.4.7
194
+ version: '1.8'
207
195
  - !ruby/object:Gem::Dependency
208
196
  name: informed
209
197
  requirement: !ruby/object:Gem::Requirement
@@ -219,83 +207,81 @@ dependencies:
219
207
  - !ruby/object:Gem::Version
220
208
  version: '1.0'
221
209
  - !ruby/object:Gem::Dependency
222
- name: faker
210
+ name: simplecov
223
211
  requirement: !ruby/object:Gem::Requirement
224
212
  requirements:
225
213
  - - "~>"
226
214
  - !ruby/object:Gem::Version
227
- version: '1.8'
215
+ version: '0.15'
228
216
  type: :development
229
217
  prerelease: false
230
218
  version_requirements: !ruby/object:Gem::Requirement
231
219
  requirements:
232
220
  - - "~>"
233
221
  - !ruby/object:Gem::Version
234
- version: '1.8'
222
+ version: '0.15'
235
223
  - !ruby/object:Gem::Dependency
236
- name: awesome_print
224
+ name: em-http-request
237
225
  requirement: !ruby/object:Gem::Requirement
238
226
  requirements:
239
227
  - - "~>"
240
228
  - !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
- - - "~>"
229
+ version: '1.1'
230
+ - - ">="
254
231
  - !ruby/object:Gem::Version
255
- version: '0.15'
256
- type: :development
232
+ version: 1.1.3
233
+ type: :runtime
257
234
  prerelease: false
258
235
  version_requirements: !ruby/object:Gem::Requirement
259
236
  requirements:
260
237
  - - "~>"
261
238
  - !ruby/object:Gem::Version
262
- version: '0.15'
239
+ version: '1.1'
240
+ - - ">="
241
+ - !ruby/object:Gem::Version
242
+ version: 1.1.3
263
243
  - !ruby/object:Gem::Dependency
264
- name: rubocop
244
+ name: nylas
265
245
  requirement: !ruby/object:Gem::Requirement
266
246
  requirements:
267
247
  - - "~>"
268
248
  - !ruby/object:Gem::Version
269
- version: '0.51'
270
- type: :development
249
+ version: '4.0'
250
+ type: :runtime
271
251
  prerelease: false
272
252
  version_requirements: !ruby/object:Gem::Requirement
273
253
  requirements:
274
254
  - - "~>"
275
255
  - !ruby/object:Gem::Version
276
- version: '0.51'
256
+ version: '4.0'
277
257
  - !ruby/object:Gem::Dependency
278
- name: rubocop-rspec
258
+ name: yajl-ruby
279
259
  requirement: !ruby/object:Gem::Requirement
280
260
  requirements:
281
261
  - - "~>"
282
262
  - !ruby/object:Gem::Version
283
- version: '1.20'
284
- type: :development
263
+ version: '1.2'
264
+ - - ">="
265
+ - !ruby/object:Gem::Version
266
+ version: 1.2.1
267
+ type: :runtime
285
268
  prerelease: false
286
269
  version_requirements: !ruby/object:Gem::Requirement
287
270
  requirements:
288
271
  - - "~>"
289
272
  - !ruby/object:Gem::Version
290
- version: '1.20'
291
- description: Gem for interacting with the Nylas API.
273
+ version: '1.2'
274
+ - - ">="
275
+ - !ruby/object:Gem::Version
276
+ version: 1.2.1
277
+ description: Gem for interacting with the Nylas Deltas Streaming API.
292
278
  email: support@nylas.com
293
279
  executables: []
294
280
  extensions: []
295
281
  extra_rdoc_files: []
296
282
  files:
297
283
  - lib/nylas-streaming.rb
298
- homepage: http://github.com/nylas/nylas-ruby
284
+ homepage:
299
285
  licenses:
300
286
  - MIT
301
287
  metadata:
@@ -311,9 +297,9 @@ require_paths:
311
297
  - lib
312
298
  required_ruby_version: !ruby/object:Gem::Requirement
313
299
  requirements:
314
- - - ">="
300
+ - - "~>"
315
301
  - !ruby/object:Gem::Version
316
- version: '0'
302
+ version: '2.2'
317
303
  required_rubygems_version: !ruby/object:Gem::Requirement
318
304
  requirements:
319
305
  - - ">"
@@ -324,5 +310,5 @@ rubyforge_project:
324
310
  rubygems_version: 2.6.13
325
311
  signing_key:
326
312
  specification_version: 4
327
- summary: Gem for interacting with the Nylas API
313
+ summary: Gem for interacting with the Nylas Deltas Streaming API
328
314
  test_files: []