inbox 1.3.0 → 2.0.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: e0b6984a5e605532a22d7f884478155114856e0c
4
- data.tar.gz: 387c6b20f67ae5e836f4ad20fb791f85c1c43b79
3
+ metadata.gz: 0eed0e8c05ccc5058757a802114677ef14f3d290
4
+ data.tar.gz: d8561281e5cac7dc75c2d940f602a05b3b022fd5
5
5
  SHA512:
6
- metadata.gz: 399247811e80bc82d7934b19073cd37f4acb54593608b6992cb8394fea1f34a9e9480d9b389809daa7177fb7872a427a601b63a5df6caca8ba58928e681b9727
7
- data.tar.gz: 9a6493e1b86fef9772faaf72621043f9a121308a415bd7f9bf5dbf20307cdba266e1edab53f0f42659152b880050c6f8024b21d94e2aa395351be1f4874b6d2c
6
+ metadata.gz: 1520cdba3b742d01486e28820830ed6db74748c9f35146c254bdf4e17167286acece7fb9da28ab44e7f17f05e6d5c4a2166129cda211d6764492146fa424411e
7
+ data.tar.gz: 3ffd9f2218a91713f9011de687dd79de1ce852f32c9b3fbe2505dace03ef3b95cc65f258308236584719c104fac1dcf6f72fb84b23d2df7bd2b1ad2ca98d281c
data/README.md CHANGED
@@ -83,7 +83,9 @@ def login
83
83
  # This URL must be registered with your application in the developer portal
84
84
  callback_url = url_for(:action => 'login_callback')
85
85
 
86
- redirect_to nylas.url_for_authentication(callback_url, user_email)
86
+ # You can also optionally pass state, an optional arbitrary string that
87
+ # will be passed back to us at the end of the auth flow.
88
+ redirect_to nylas.url_for_authentication(callback_url, user_email, {:state => 'ben auth'})
87
89
  end
88
90
  ```
89
91
 
@@ -458,23 +460,36 @@ The streaming API will receive deltas in real time, without needing to repeatedl
458
460
  ```ruby
459
461
  cursor = nylas.latest_cursor
460
462
 
461
- last_cursor = nil
462
- nylas.delta_stream(cursor) do |event, object|
463
- if event == "create" or event == "modify"
464
- if object.is_a?(Nylas::Contact)
465
- puts "#{object.name} - #{object.email}"
466
- elsif object.is_a?(Nylas::Event)
467
- puts "Event!"
463
+ EventMachine.run do
464
+ nylas.delta_stream(cursor) do |event, object|
465
+ if event == "create" or event == "modify"
466
+ if object.is_a?(Nylas::Contact)
467
+ puts "#{object.name} - #{object.email}"
468
+ elsif object.is_a?(Nylas::Event)
469
+ puts "Event!"
470
+ end
471
+ elsif event == "delete"
472
+ # In the case of a deletion, the API only returns the ID of the object.
473
+ # In this case, the Ruby SDK returns a dummy object with only the id field
474
+ # set.
475
+ puts "Deleting from collection #{object.class.name}, id: #{object}"
468
476
  end
469
- elsif event == "delete"
470
- # In the case of a deletion, the API only returns the ID of the object.
471
- # In this case, the Ruby SDK returns a dummy object with only the id field
472
- # set.
473
- puts "Deleting from collection #{object.class.name}, id: #{object}"
474
477
  end
475
- last_cursor = object.cursor
478
+ end
479
+ ```
480
+
481
+ To receive streams from multiple accounts, call `delta_stream` for each of them inside an `EventMachine.run` block.
476
482
 
477
- # This will loop indefintely
483
+ ```ruby
484
+ api_handles = [] # a list of Nylas::API objects
485
+
486
+ EventMachine.run do
487
+ api_handles.each do |a|
488
+ cursor = a.latest_cursor()
489
+ a.delta_stream(cursor) do |event, object|
490
+ puts object
491
+ end
492
+ end
478
493
  end
479
494
  ```
480
495
 
@@ -541,9 +556,9 @@ nylas = Nylas::API.new(nil, nil, nil, 'http://localhost:5555/')
541
556
  # going to use.
542
557
  account_id = nylas.accounts.first.id
543
558
 
544
- # Display the contents of the first message for the first account
559
+ # Display the body of the first message for the first account
545
560
  nylas = Nylas::API.new(nil, nil, account_id, 'http://localhost:5555/')
546
- puts nylas.messages.first.contents
561
+ puts nylas.messages.first.body
547
562
  ```
548
563
 
549
564
 
data/lib/inbox.rb CHANGED
@@ -3,6 +3,7 @@ require 'rest-client'
3
3
  require 'yajl'
4
4
  require 'em-http'
5
5
  require 'ostruct'
6
+ require 'active_support/core_ext/hash'
6
7
 
7
8
  require 'account'
8
9
  require 'api_account'
@@ -113,11 +114,20 @@ module Inbox
113
114
  end
114
115
 
115
116
  def url_for_authentication(redirect_uri, login_hint = '', options = {})
116
- trialString = 'false'
117
- if options[:trial] == true
118
- trialString = 'true'
117
+ params = {
118
+ :client_id => @app_id,
119
+ :trial => options.fetch(:trial, false),
120
+ :response_type => 'code',
121
+ :scope => 'email',
122
+ :login_hint => login_hint,
123
+ :redirect_uri => redirect_uri,
124
+ }
125
+
126
+ if options.has_key?(:state) then
127
+ params[:state] = options[:state]
119
128
  end
120
- "https://#{@service_domain}/oauth/authorize?client_id=#{@app_id}&trial=#{trialString}&response_type=code&scope=email&login_hint=#{login_hint}&redirect_uri=#{redirect_uri}"
129
+
130
+ "https://#{@service_domain}/oauth/authorize?" + params.to_query
121
131
  end
122
132
 
123
133
  def url_for_management
@@ -203,23 +213,6 @@ module Inbox
203
213
  end
204
214
  end
205
215
 
206
- def get_cursor(timestamp)
207
- # Get the cursor corresponding to a specific timestamp.
208
- warn "Nylas#get_cursor is deprecated. Use Nylas#latest_cursor instead."
209
-
210
- path = self.url_for_path("/delta/generate_cursor")
211
- data = { :start => timestamp }
212
-
213
- cursor = nil
214
-
215
- RestClient.post(path, data.to_json, :content_type => :json) do |response,request,result|
216
- json = Inbox.interpret_response(result, response, {:expected_class => Object})
217
- cursor = json["cursor"]
218
- end
219
-
220
- cursor
221
- end
222
-
223
216
  def latest_cursor
224
217
  # Get the cursor corresponding to a specific timestamp.
225
218
  path = self.url_for_path("/delta/latest_cursor")
@@ -364,15 +357,17 @@ module Inbox
364
357
  end
365
358
  end
366
359
 
367
- EventMachine.run do
368
- http = EventMachine::HttpRequest.new(path, :connect_timeout => 0, :inactivity_timeout => timeout).get(:keepalive => true)
369
- http.stream do |chunk|
370
- parser << chunk
371
- end
372
- http.errback do
373
- raise UnexpectedResponse.new http.error
374
- end
360
+ http = EventMachine::HttpRequest.new(path, :connect_timeout => 0, :inactivity_timeout => timeout).get(:keepalive => true)
361
+
362
+ # set a callback on the HTTP stream that parses incoming chunks as they come in
363
+ http.stream do |chunk|
364
+ parser << chunk
375
365
  end
366
+
367
+ http.errback do
368
+ raise UnexpectedResponse.new http.error
369
+ end
370
+
376
371
  end
377
372
  end
378
373
  end
data/lib/message.rb CHANGED
@@ -9,6 +9,7 @@ module Inbox
9
9
  parameter :snippet
10
10
  parameter :from
11
11
  parameter :to
12
+ parameter :reply_to
12
13
  parameter :cc
13
14
  parameter :bcc
14
15
  parameter :date
data/lib/nylas.rb CHANGED
@@ -3,6 +3,7 @@ require 'rest-client'
3
3
  require 'yajl'
4
4
  require 'em-http'
5
5
  require 'ostruct'
6
+ require 'active_support/core_ext/hash'
6
7
 
7
8
  require 'account'
8
9
  require 'api_account'
@@ -113,11 +114,20 @@ module Inbox
113
114
  end
114
115
 
115
116
  def url_for_authentication(redirect_uri, login_hint = '', options = {})
116
- trialString = 'false'
117
- if options[:trial] == true
118
- trialString = 'true'
117
+ params = {
118
+ :client_id => @app_id,
119
+ :trial => options.fetch(:trial, false),
120
+ :response_type => 'code',
121
+ :scope => 'email',
122
+ :login_hint => login_hint,
123
+ :redirect_uri => redirect_uri,
124
+ }
125
+
126
+ if options.has_key?(:state) then
127
+ params[:state] = options[:state]
119
128
  end
120
- "https://#{@service_domain}/oauth/authorize?client_id=#{@app_id}&trial=#{trialString}&response_type=code&scope=email&login_hint=#{login_hint}&redirect_uri=#{redirect_uri}"
129
+
130
+ "https://#{@service_domain}/oauth/authorize?" + params.to_query
121
131
  end
122
132
 
123
133
  def url_for_management
@@ -203,23 +213,6 @@ module Inbox
203
213
  end
204
214
  end
205
215
 
206
- def get_cursor(timestamp)
207
- # Get the cursor corresponding to a specific timestamp.
208
- warn "Nylas#get_cursor is deprecated. Use Nylas#latest_cursor instead."
209
-
210
- path = self.url_for_path("/delta/generate_cursor")
211
- data = { :start => timestamp }
212
-
213
- cursor = nil
214
-
215
- RestClient.post(path, data.to_json, :content_type => :json) do |response,request,result|
216
- json = Inbox.interpret_response(result, response, {:expected_class => Object})
217
- cursor = json["cursor"]
218
- end
219
-
220
- cursor
221
- end
222
-
223
216
  def latest_cursor
224
217
  # Get the cursor corresponding to a specific timestamp.
225
218
  path = self.url_for_path("/delta/latest_cursor")
@@ -364,15 +357,17 @@ module Inbox
364
357
  end
365
358
  end
366
359
 
367
- EventMachine.run do
368
- http = EventMachine::HttpRequest.new(path, :connect_timeout => 0, :inactivity_timeout => timeout).get(:keepalive => true)
369
- http.stream do |chunk|
370
- parser << chunk
371
- end
372
- http.errback do
373
- raise UnexpectedResponse.new http.error
374
- end
360
+ http = EventMachine::HttpRequest.new(path, :connect_timeout => 0, :inactivity_timeout => timeout).get(:keepalive => true)
361
+
362
+ # set a callback on the HTTP stream that parses incoming chunks as they come in
363
+ http.stream do |chunk|
364
+ parser << chunk
375
365
  end
366
+
367
+ http.errback do
368
+ raise UnexpectedResponse.new http.error
369
+ end
370
+
376
371
  end
377
372
  end
378
373
  end
@@ -15,16 +15,17 @@ module Inbox
15
15
  def each
16
16
  return enum_for(:each) unless block_given?
17
17
 
18
- offset = 0
19
- chunk_size = 100
18
+ @filters[:offset] = 0 unless @filters.key?(:offset)
19
+ @filters[:limit] = 100 unless @filters.key?(:limit)
20
+
20
21
  finished = false
21
22
  while (!finished) do
22
- results = get_model_collection(offset, chunk_size)
23
+ results = get_model_collection()
23
24
  results.each { |item|
24
25
  yield item
25
26
  }
26
- offset += results.length
27
- finished = results.length < chunk_size
27
+ @filters[:offset] += results.length
28
+ finished = results.length < @filters[:limit]
28
29
  end
29
30
  end
30
31
 
@@ -64,12 +65,17 @@ module Inbox
64
65
  finished = false
65
66
  chunk_size = 100
66
67
 
67
- if limit < chunk_size
68
- chunk_size = limit
69
- end
70
-
71
68
  while (!finished && accumulated.length < limit) do
72
- results = get_model_collection(offset + accumulated.length, chunk_size)
69
+ @filters[:offset] = offset + accumulated.length
70
+
71
+ # if the total items we want, minus how many we already have, is fewer than we plan to grab...
72
+ remaining = limit - accumulated.length
73
+ if remaining < chunk_size
74
+ chunk_size = remaining
75
+ end
76
+ @filters[:limit] = chunk_size
77
+
78
+ results = get_model_collection()
73
79
  accumulated = accumulated.concat(results)
74
80
 
75
81
  # we're done if we have more than 'limit' items, or if we asked for 50 and got less than 50...
@@ -136,10 +142,8 @@ module Inbox
136
142
  model
137
143
  end
138
144
 
139
- def get_model_collection(offset = 0, limit = 100)
145
+ def get_model_collection
140
146
  filters = @filters.clone
141
- filters[:offset] = offset
142
- filters[:limit] = limit
143
147
  models = []
144
148
 
145
149
  RestClient.get(url, :params => filters){ |response,request,result|
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Inbox
2
- VERSION = "1.3.0"
2
+ VERSION = "2.0.0"
3
3
  end
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: 1.3.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Gotow
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-12-07 00:00:00.000000000 Z
13
+ date: 2016-02-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client