tweetstream 1.1.3 → 1.1.4
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of tweetstream might be problematic. Click here for more details.
- data/.simplecov +4 -0
- data/{RELEASE_NOTES.md → CHANGELOG.md} +18 -0
- data/README.md +19 -30
- data/examples/oauth.rb +1 -1
- data/lib/tweetstream/client.rb +79 -58
- data/lib/tweetstream/version.rb +1 -1
- data/spec/spec_helper.rb +6 -17
- data/spec/tweetstream/client_spec.rb +82 -43
- data/tweetstream.gemspec +8 -12
- metadata +36 -32
data/.simplecov
ADDED
@@ -1,3 +1,21 @@
|
|
1
|
+
Version 1.1.4
|
2
|
+
=============
|
3
|
+
|
4
|
+
* Added Client#connect to start streaming inside an EM reactor (pelle)
|
5
|
+
* Added shutdown_stream to cleanly stop the stream (lud)
|
6
|
+
* Loosened multi_json dependency for Rails 3.2 compatibiltiy
|
7
|
+
|
8
|
+
Version 1.1.3
|
9
|
+
=============
|
10
|
+
|
11
|
+
* Added on_reconnect callback method
|
12
|
+
|
13
|
+
Version 1.1.2
|
14
|
+
=============
|
15
|
+
|
16
|
+
* Added support for statuses/links
|
17
|
+
* Client now checks that specified json_parser can be loaded during initialization
|
18
|
+
|
1
19
|
Version 1.1.1
|
2
20
|
=============
|
3
21
|
|
data/README.md
CHANGED
@@ -1,17 +1,12 @@
|
|
1
|
-
TweetStream
|
2
|
-
===========
|
1
|
+
# TweetStream
|
3
2
|
|
4
3
|
TweetStream provides simple Ruby access to [Twitter's Streaming API](https://dev.twitter.com/docs/streaming-api).
|
5
4
|
|
6
|
-
Installation
|
7
|
-
------------
|
8
|
-
|
9
|
-
To install:
|
5
|
+
## Installation
|
10
6
|
|
11
7
|
gem install tweetstream
|
12
8
|
|
13
|
-
Usage
|
14
|
-
-----
|
9
|
+
## Usage
|
15
10
|
|
16
11
|
Using TweetStream is quite simple:
|
17
12
|
|
@@ -55,8 +50,7 @@ end
|
|
55
50
|
The methods available to TweetStream::Client will be kept in parity
|
56
51
|
with the methods available on the Streaming API wiki page.
|
57
52
|
|
58
|
-
Using the Twitter Userstream
|
59
|
-
----------------------------
|
53
|
+
## Using the Twitter Userstream
|
60
54
|
|
61
55
|
Using the Twitter userstream works similarly to the regular streaming, except you use the userstream method.
|
62
56
|
|
@@ -85,8 +79,7 @@ end
|
|
85
79
|
client.userstream
|
86
80
|
```
|
87
81
|
|
88
|
-
Configuration and Changes in 1.1.0
|
89
|
-
----------------------------------
|
82
|
+
## Configuration and Changes in 1.1.0
|
90
83
|
|
91
84
|
As of version 1.1.0.rc1 TweetStream supports OAuth. Please note that in order
|
92
85
|
to support OAuth, the `TweetStream::Client` initializer no longer accepts a
|
@@ -124,8 +117,7 @@ TweetStream assumes OAuth by default. If you are using Basic Auth, it is recomm
|
|
124
117
|
that you update your code to use OAuth as Twitter is likely to phase out Basic Auth
|
125
118
|
support.
|
126
119
|
|
127
|
-
Swappable JSON Parsing
|
128
|
-
----------------------
|
120
|
+
## Swappable JSON Parsing
|
129
121
|
|
130
122
|
As of version 1.1, TweetStream supports swappable JSON backends via MultiJson. You can
|
131
123
|
specify a parser during configuration:
|
@@ -139,8 +131,7 @@ end
|
|
139
131
|
|
140
132
|
Available options are `:yajl`, `:json_gem`, `:json_pure`, and `:ok_json`.
|
141
133
|
|
142
|
-
Handling Deletes and Rate Limitations
|
143
|
-
-------------------------------------
|
134
|
+
## Handling Deletes and Rate Limitations
|
144
135
|
|
145
136
|
Sometimes the Streaming API will send messages other than statuses.
|
146
137
|
Specifically, it does so when a status is deleted or rate limitations
|
@@ -189,8 +180,7 @@ Twitter recommends honoring deletions as quickly as possible, and
|
|
189
180
|
you would likely be wise to integrate this functionality into your
|
190
181
|
application.
|
191
182
|
|
192
|
-
Errors and Reconnecting
|
193
|
-
-----------------------
|
183
|
+
## Errors and Reconnecting
|
194
184
|
|
195
185
|
TweetStream uses EventMachine to connect to the Twitter Streaming
|
196
186
|
API, and attempts to honor Twitter's guidelines in terms of automatic
|
@@ -221,8 +211,7 @@ end.track('term') do |status|
|
|
221
211
|
end
|
222
212
|
```
|
223
213
|
|
224
|
-
Terminating a TweetStream
|
225
|
-
-------------------------
|
214
|
+
## Terminating a TweetStream
|
226
215
|
|
227
216
|
It is often the case that you will need to change the parameters of your
|
228
217
|
track or follow tweet streams. In the case that you need to terminate
|
@@ -242,8 +231,7 @@ When `stop` is called, TweetStream will return from the block
|
|
242
231
|
the last successfully yielded status, allowing you to make note of
|
243
232
|
it in your application as necessary.
|
244
233
|
|
245
|
-
Daemonizing
|
246
|
-
-----------
|
234
|
+
## Daemonizing
|
247
235
|
|
248
236
|
It is also possible to create a daemonized script quite easily
|
249
237
|
using the TweetStream library:
|
@@ -258,13 +246,16 @@ end
|
|
258
246
|
If you put the above into a script and run the script with `ruby scriptname.rb`,
|
259
247
|
you will see a list of daemonization commands such as start, stop, and run.
|
260
248
|
|
261
|
-
TODO
|
262
|
-
----
|
249
|
+
## TODO
|
263
250
|
|
264
251
|
* SiteStream support
|
265
252
|
|
266
|
-
|
267
|
-
|
253
|
+
## <a name="dependencies"></a>Dependency Status
|
254
|
+
[![Dependency Status](https://gemnasium.com/intridea/tweetstream.png?travis)][gemnasium]
|
255
|
+
|
256
|
+
[gemnasium]: https://gemnasium.com/intridea/tweetstream
|
257
|
+
|
258
|
+
## Contributing
|
268
259
|
|
269
260
|
* Fork the project.
|
270
261
|
* Make your feature addition or bug fix.
|
@@ -272,13 +263,11 @@ Note on Patches/Pull Requests
|
|
272
263
|
* Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
273
264
|
* Send me a pull request. Bonus points for topic branches.
|
274
265
|
|
275
|
-
Contributors
|
276
|
-
------------
|
266
|
+
## Contributors
|
277
267
|
|
278
268
|
* Michael Bleigh (initial gem)
|
279
269
|
* Steve Agalloco (current maintainer)
|
280
270
|
|
281
|
-
Copyright
|
282
|
-
---------
|
271
|
+
## Copyright
|
283
272
|
|
284
273
|
Copyright (c) 2011 Intridea, Inc. (http://www.intridea.com/). See [LICENSE](https://github.com/intridea/tweetstream/blob/master/LICENSE.md) for details.
|
data/examples/oauth.rb
CHANGED
data/lib/tweetstream/client.rb
CHANGED
@@ -305,7 +305,22 @@ module TweetStream
|
|
305
305
|
end
|
306
306
|
end
|
307
307
|
|
308
|
-
|
308
|
+
# connect to twitter while starting a new EventMachine run loop
|
309
|
+
def start(path, query_parameters = {}, &block)
|
310
|
+
if EventMachine.reactor_running?
|
311
|
+
connect(path, query_parameters, &block)
|
312
|
+
else
|
313
|
+
EventMachine.epoll
|
314
|
+
EventMachine.kqueue
|
315
|
+
|
316
|
+
EventMachine::run do
|
317
|
+
connect(path, query_parameters, &block)
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
# connect to twitter without starting a new EventMachine run loop
|
323
|
+
def connect(path, query_parameters = {}, &block)
|
309
324
|
method = query_parameters.delete(:method) || :get
|
310
325
|
delete_proc = query_parameters.delete(:delete) || self.on_delete
|
311
326
|
limit_proc = query_parameters.delete(:limit) || self.on_limit
|
@@ -332,81 +347,87 @@ module TweetStream
|
|
332
347
|
:ssl => true
|
333
348
|
}.merge(auth_params).merge(extra_stream_parameters)
|
334
349
|
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
interval = @on_interval_time || Configuration::DEFAULT_TIMER_INTERVAL
|
341
|
-
@timer = EventMachine.add_periodic_timer(interval) do
|
342
|
-
EventMachine.defer do
|
343
|
-
@on_interval_proc.call
|
344
|
-
end
|
350
|
+
if @on_interval_proc.is_a?(Proc)
|
351
|
+
interval = @on_interval_time || Configuration::DEFAULT_TIMER_INTERVAL
|
352
|
+
@timer = EventMachine.add_periodic_timer(interval) do
|
353
|
+
EventMachine.defer do
|
354
|
+
@on_interval_proc.call
|
345
355
|
end
|
346
356
|
end
|
357
|
+
end
|
347
358
|
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
359
|
+
@stream = Twitter::JSONStream.connect(stream_params)
|
360
|
+
@stream.each_item do |item|
|
361
|
+
begin
|
362
|
+
raw_hash = json_parser.decode(item)
|
363
|
+
rescue MultiJson::DecodeError
|
364
|
+
error_proc.call("MultiJson::DecodeError occured in stream: #{item}") if error_proc.is_a?(Proc)
|
365
|
+
next
|
366
|
+
end
|
356
367
|
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
368
|
+
unless raw_hash.is_a?(::Hash)
|
369
|
+
error_proc.call("Unexpected JSON object in stream: #{item}") if error_proc.is_a?(Proc)
|
370
|
+
next
|
371
|
+
end
|
361
372
|
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
end
|
373
|
+
hash = TweetStream::Hash.new(raw_hash)
|
374
|
+
if hash[:delete] && hash[:delete][:status]
|
375
|
+
delete_proc.call(hash[:delete][:status][:id], hash[:delete][:status][:user_id]) if delete_proc.is_a?(Proc)
|
376
|
+
elsif hash[:limit] && hash[:limit][:track]
|
377
|
+
limit_proc.call(hash[:limit][:track]) if limit_proc.is_a?(Proc)
|
378
|
+
|
379
|
+
elsif hash[:direct_message]
|
380
|
+
yield_message_to direct_message_proc, TweetStream::DirectMessage.new(hash[:direct_message])
|
381
|
+
|
382
|
+
elsif hash[:text] && hash[:user]
|
383
|
+
@last_status = TweetStream::Status.new(hash)
|
384
|
+
yield_message_to timeline_status_proc, @last_status
|
385
|
+
|
386
|
+
if block_given?
|
387
|
+
# Give the block the option to receive either one
|
388
|
+
# or two arguments, depending on its arity.
|
389
|
+
case block.arity
|
390
|
+
when 1
|
391
|
+
yield @last_status
|
392
|
+
when 2
|
393
|
+
yield @last_status, self
|
384
394
|
end
|
385
395
|
end
|
386
|
-
|
387
|
-
yield_message_to anything_proc, hash
|
388
396
|
end
|
389
397
|
|
390
|
-
|
391
|
-
|
392
|
-
end
|
398
|
+
yield_message_to anything_proc, hash
|
399
|
+
end
|
393
400
|
|
394
|
-
|
395
|
-
|
396
|
-
|
401
|
+
@stream.on_error do |message|
|
402
|
+
error_proc.call(message) if error_proc.is_a?(Proc)
|
403
|
+
end
|
397
404
|
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
405
|
+
@stream.on_reconnect do |timeout, retries|
|
406
|
+
reconnect_proc.call(timeout, retries) if reconnect_proc.is_a?(Proc)
|
407
|
+
end
|
408
|
+
|
409
|
+
@stream.on_max_reconnects do |timeout, retries|
|
410
|
+
raise TweetStream::ReconnectError.new(timeout, retries)
|
411
|
+
end
|
412
|
+
|
413
|
+
@stream
|
402
414
|
end
|
403
415
|
|
404
|
-
# Terminate the currently running TweetStream
|
416
|
+
# Terminate the currently running TweetStream and close EventMachine loop
|
405
417
|
def stop
|
406
418
|
EventMachine.stop_event_loop
|
407
419
|
@last_status
|
408
420
|
end
|
409
421
|
|
422
|
+
# Close the connection to twitter without closing the eventmachine loop
|
423
|
+
def close_connection
|
424
|
+
@stream.close_connection if @stream
|
425
|
+
end
|
426
|
+
|
427
|
+
def stop_stream
|
428
|
+
@stream.stop if @stream
|
429
|
+
end
|
430
|
+
|
410
431
|
protected
|
411
432
|
|
412
433
|
def parser_from(parser)
|
data/lib/tweetstream/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,28 +1,17 @@
|
|
1
1
|
require 'simplecov'
|
2
|
-
SimpleCov.start do
|
3
|
-
add_group 'Tweetstream', 'lib/tweetstream'
|
4
|
-
add_group 'Specs', 'spec'
|
5
|
-
end
|
6
|
-
|
7
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
8
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
9
|
-
|
10
2
|
require 'tweetstream'
|
11
3
|
require 'rspec'
|
12
|
-
require 'rspec/autorun'
|
13
4
|
require 'yajl'
|
14
5
|
require 'json'
|
15
6
|
|
16
7
|
def sample_tweets
|
17
|
-
if @tweets
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
@tweets << hash
|
23
|
-
end
|
24
|
-
@tweets
|
8
|
+
return @tweets if @tweets
|
9
|
+
|
10
|
+
@tweets = []
|
11
|
+
Yajl::Parser.parse(File.open(File.dirname(__FILE__) + '/data/statuses.json', 'r'), :symbolize_keys => true) do |hash|
|
12
|
+
@tweets << hash
|
25
13
|
end
|
14
|
+
@tweets
|
26
15
|
end
|
27
16
|
|
28
17
|
def sample_direct_messages
|
@@ -253,38 +253,61 @@ describe TweetStream::Client do
|
|
253
253
|
end
|
254
254
|
end
|
255
255
|
|
256
|
-
|
257
|
-
|
258
|
-
|
256
|
+
describe '#filter' do
|
257
|
+
it 'makes a call to "statuses/filter" with the query params provided' do
|
258
|
+
@client.should_receive(:start).once.with('statuses/filter', :follow => 123, :method => :post)
|
259
|
+
@client.filter(:follow => 123)
|
260
|
+
end
|
261
|
+
it 'makes a call to "statuses/filter" with the query params provided longitude/latitude pairs, separated by commas ' do
|
262
|
+
@client.should_receive(:start).once.with('statuses/filter', :locations => '-122.75,36.8,-121.75,37.8,-74,40,-73,41', :method => :post)
|
263
|
+
@client.filter(:locations => '-122.75,36.8,-121.75,37.8,-74,40,-73,41')
|
264
|
+
end
|
259
265
|
end
|
260
266
|
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
267
|
+
describe '#follow' do
|
268
|
+
it 'makes a call to start with "statuses/filter" and a follow query parameter' do
|
269
|
+
@client.should_receive(:start).once.with('statuses/filter', :follow => [123], :method => :post)
|
270
|
+
@client.follow(123)
|
271
|
+
end
|
265
272
|
|
266
|
-
|
267
|
-
|
268
|
-
|
273
|
+
it 'comma-joins multiple arguments' do
|
274
|
+
@client.should_receive(:start).once.with('statuses/filter', :follow => [123,456], :method => :post)
|
275
|
+
@client.follow(123, 456)
|
276
|
+
end
|
269
277
|
end
|
270
278
|
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
279
|
+
describe '#locations' do
|
280
|
+
it 'should call #start with "statuses/filter" with the query params provided longitude/latitude pairs' do
|
281
|
+
@client.should_receive(:start).once.with('statuses/filter', :locations => ['-122.75,36.8,-121.75,37.8,-74,40,-73,41'], :method => :post)
|
282
|
+
@client.locations('-122.75,36.8,-121.75,37.8,-74,40,-73,41')
|
283
|
+
end
|
275
284
|
|
276
|
-
|
277
|
-
|
278
|
-
|
285
|
+
it 'should call #start with "statuses/filter" with the query params provided longitude/latitude pairs and additional filter' do
|
286
|
+
@client.should_receive(:start).once.with('statuses/filter', :locations => ['-122.75,36.8,-121.75,37.8,-74,40,-73,41'], :track => 'rock', :method => :post)
|
287
|
+
@client.locations('-122.75,36.8,-121.75,37.8,-74,40,-73,41', :track => 'rock')
|
288
|
+
end
|
279
289
|
end
|
280
290
|
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
291
|
+
describe '#track' do
|
292
|
+
it 'makes a call to start with "statuses/filter" and a track query parameter' do
|
293
|
+
@client.should_receive(:start).once.with('statuses/filter', :track => ['test'], :method => :post)
|
294
|
+
@client.track('test')
|
295
|
+
end
|
296
|
+
|
297
|
+
it 'comma-joins multiple arguments' do
|
298
|
+
@client.should_receive(:start).once.with('statuses/filter', :track => ['foo', 'bar', 'baz'], :method => :post)
|
299
|
+
@client.track('foo', 'bar', 'baz')
|
300
|
+
end
|
301
|
+
|
302
|
+
it 'comma-joins an array of arguments' do
|
303
|
+
@client.should_receive(:start).once.with('statuses/filter', :track => [['foo','bar','baz']], :method => :post)
|
304
|
+
@client.track(['foo','bar','baz'])
|
305
|
+
end
|
306
|
+
|
307
|
+
it 'should call #start with "statuses/filter" and the provided queries' do
|
308
|
+
@client.should_receive(:start).once.with('statuses/filter', :track => ['rock'], :method => :post)
|
309
|
+
@client.track('rock')
|
310
|
+
end
|
288
311
|
end
|
289
312
|
end
|
290
313
|
|
@@ -319,25 +342,6 @@ describe TweetStream::Client do
|
|
319
342
|
end
|
320
343
|
end
|
321
344
|
|
322
|
-
describe '#track' do
|
323
|
-
it 'should call #start with "statuses/filter" and the provided queries' do
|
324
|
-
@client.should_receive(:start).once.with('statuses/filter', :track => ['rock'], :method => :post)
|
325
|
-
@client.track('rock')
|
326
|
-
end
|
327
|
-
end
|
328
|
-
|
329
|
-
describe '#locations' do
|
330
|
-
it 'should call #start with "statuses/filter" with the query params provided longitude/latitude pairs' do
|
331
|
-
@client.should_receive(:start).once.with('statuses/filter', :locations => ['-122.75,36.8,-121.75,37.8,-74,40,-73,41'], :method => :post)
|
332
|
-
@client.locations('-122.75,36.8,-121.75,37.8,-74,40,-73,41')
|
333
|
-
end
|
334
|
-
|
335
|
-
it 'should call #start with "statuses/filter" with the query params provided longitude/latitude pairs and additional filter' do
|
336
|
-
@client.should_receive(:start).once.with('statuses/filter', :locations => ['-122.75,36.8,-121.75,37.8,-74,40,-73,41'], :track => 'rock', :method => :post)
|
337
|
-
@client.locations('-122.75,36.8,-121.75,37.8,-74,40,-73,41', :track => 'rock')
|
338
|
-
end
|
339
|
-
end
|
340
|
-
|
341
345
|
describe '#stop' do
|
342
346
|
it 'should call EventMachine::stop_event_loop' do
|
343
347
|
EventMachine.should_receive :stop_event_loop
|
@@ -352,6 +356,41 @@ describe TweetStream::Client do
|
|
352
356
|
end
|
353
357
|
end
|
354
358
|
|
359
|
+
describe '#close_connection' do
|
360
|
+
it 'should not call EventMachine::stop_event_loop' do
|
361
|
+
EventMachine.should_not_receive :stop_event_loop
|
362
|
+
TweetStream::Client.new.close_connection.should be_nil
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
describe '#stop_stream' do
|
367
|
+
before(:each) do
|
368
|
+
@stream = stub("Twitter::JSONStream",
|
369
|
+
:connect => true,
|
370
|
+
:unbind => true,
|
371
|
+
:each_item => true,
|
372
|
+
:on_error => true,
|
373
|
+
:on_max_reconnects => true,
|
374
|
+
:on_reconnect => true,
|
375
|
+
:connection_completed => true,
|
376
|
+
:stop => true
|
377
|
+
)
|
378
|
+
Twitter::JSONStream.stub!(:connect).and_return(@stream)
|
379
|
+
@client = TweetStream::Client.new
|
380
|
+
@client.connect('/')
|
381
|
+
end
|
382
|
+
|
383
|
+
it "should call stream.stop to cleanly stop the current stream" do
|
384
|
+
@stream.should_receive(:stop)
|
385
|
+
@client.stop_stream
|
386
|
+
end
|
387
|
+
|
388
|
+
it 'should not stop eventmachine' do
|
389
|
+
EventMachine.should_not_receive :stop_event_loop
|
390
|
+
@client.stop_stream
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
355
394
|
describe "oauth" do
|
356
395
|
describe '#start' do
|
357
396
|
before do
|
data/tweetstream.gemspec
CHANGED
@@ -1,32 +1,28 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
require "tweetstream/version"
|
2
|
+
require File.expand_path('../lib/tweetstream/version', __FILE__)
|
4
3
|
|
5
4
|
Gem::Specification.new do |s|
|
6
5
|
s.name = 'tweetstream'
|
7
6
|
s.version = TweetStream::VERSION
|
8
7
|
|
9
|
-
s.authors = ['Michael Bleigh']
|
10
|
-
s.email = ['michael@intridea.com']
|
8
|
+
s.authors = ['Michael Bleigh', 'Steve Agalloco']
|
9
|
+
s.email = ['michael@intridea.com', 'steve.agalloco@gmail.com']
|
11
10
|
s.description = %q{TweetStream allows you to easily consume the Twitter Streaming API utilizing the YAJL Ruby gem.}
|
12
11
|
s.summary = %q{TweetStream is a simple wrapper for consuming the Twitter Streaming API.}
|
13
12
|
s.homepage = 'http://github.com/intridea/tweetstream'
|
14
13
|
|
15
|
-
s.
|
16
|
-
s.
|
17
|
-
s.
|
14
|
+
s.add_dependency 'twitter-stream', '= 0.1.14'
|
15
|
+
s.add_dependency 'daemons', '~> 1.1'
|
16
|
+
s.add_dependency 'multi_json', '>= 1.0'
|
18
17
|
|
19
|
-
s.add_dependency 'twitter-stream', '~> 0.1.14'
|
20
|
-
s.add_dependency 'daemons', '~> 1.1.4'
|
21
|
-
s.add_dependency 'multi_json', '~> 1.0.3'
|
22
18
|
s.add_development_dependency 'rake', '~> 0.9'
|
23
19
|
s.add_development_dependency 'simplecov', '~> 0.5.4'
|
24
20
|
s.add_development_dependency 'yard', '~> 0.7'
|
25
21
|
s.add_development_dependency 'rdiscount', '~> 1.6'
|
26
22
|
s.add_development_dependency 'rspec', '~> 2.7'
|
27
23
|
s.add_development_dependency 'yajl-ruby', '~> 1.0'
|
28
|
-
s.add_development_dependency 'json', '~> 1.
|
29
|
-
s.add_development_dependency 'guard-rspec', '~> 0.
|
24
|
+
s.add_development_dependency 'json', '~> 1.6'
|
25
|
+
s.add_development_dependency 'guard-rspec', '~> 0.5'
|
30
26
|
|
31
27
|
s.files = `git ls-files`.split("\n")
|
32
28
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
metadata
CHANGED
@@ -1,52 +1,53 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tweetstream
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Michael Bleigh
|
9
|
+
- Steve Agalloco
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
+
date: 2012-02-28 00:00:00.000000000Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: twitter-stream
|
16
|
-
requirement: &
|
17
|
+
requirement: &2152607200 !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
19
|
requirements:
|
19
|
-
- -
|
20
|
+
- - =
|
20
21
|
- !ruby/object:Gem::Version
|
21
22
|
version: 0.1.14
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
+
version_requirements: *2152607200
|
25
26
|
- !ruby/object:Gem::Dependency
|
26
27
|
name: daemons
|
27
|
-
requirement: &
|
28
|
+
requirement: &2152606040 !ruby/object:Gem::Requirement
|
28
29
|
none: false
|
29
30
|
requirements:
|
30
31
|
- - ~>
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.1
|
33
|
+
version: '1.1'
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
+
version_requirements: *2152606040
|
36
37
|
- !ruby/object:Gem::Dependency
|
37
38
|
name: multi_json
|
38
|
-
requirement: &
|
39
|
+
requirement: &2152605380 !ruby/object:Gem::Requirement
|
39
40
|
none: false
|
40
41
|
requirements:
|
41
|
-
- -
|
42
|
+
- - ! '>='
|
42
43
|
- !ruby/object:Gem::Version
|
43
|
-
version: 1.0
|
44
|
+
version: '1.0'
|
44
45
|
type: :runtime
|
45
46
|
prerelease: false
|
46
|
-
version_requirements: *
|
47
|
+
version_requirements: *2152605380
|
47
48
|
- !ruby/object:Gem::Dependency
|
48
49
|
name: rake
|
49
|
-
requirement: &
|
50
|
+
requirement: &2152604700 !ruby/object:Gem::Requirement
|
50
51
|
none: false
|
51
52
|
requirements:
|
52
53
|
- - ~>
|
@@ -54,10 +55,10 @@ dependencies:
|
|
54
55
|
version: '0.9'
|
55
56
|
type: :development
|
56
57
|
prerelease: false
|
57
|
-
version_requirements: *
|
58
|
+
version_requirements: *2152604700
|
58
59
|
- !ruby/object:Gem::Dependency
|
59
60
|
name: simplecov
|
60
|
-
requirement: &
|
61
|
+
requirement: &2152603860 !ruby/object:Gem::Requirement
|
61
62
|
none: false
|
62
63
|
requirements:
|
63
64
|
- - ~>
|
@@ -65,10 +66,10 @@ dependencies:
|
|
65
66
|
version: 0.5.4
|
66
67
|
type: :development
|
67
68
|
prerelease: false
|
68
|
-
version_requirements: *
|
69
|
+
version_requirements: *2152603860
|
69
70
|
- !ruby/object:Gem::Dependency
|
70
71
|
name: yard
|
71
|
-
requirement: &
|
72
|
+
requirement: &2152603300 !ruby/object:Gem::Requirement
|
72
73
|
none: false
|
73
74
|
requirements:
|
74
75
|
- - ~>
|
@@ -76,10 +77,10 @@ dependencies:
|
|
76
77
|
version: '0.7'
|
77
78
|
type: :development
|
78
79
|
prerelease: false
|
79
|
-
version_requirements: *
|
80
|
+
version_requirements: *2152603300
|
80
81
|
- !ruby/object:Gem::Dependency
|
81
82
|
name: rdiscount
|
82
|
-
requirement: &
|
83
|
+
requirement: &2152602660 !ruby/object:Gem::Requirement
|
83
84
|
none: false
|
84
85
|
requirements:
|
85
86
|
- - ~>
|
@@ -87,10 +88,10 @@ dependencies:
|
|
87
88
|
version: '1.6'
|
88
89
|
type: :development
|
89
90
|
prerelease: false
|
90
|
-
version_requirements: *
|
91
|
+
version_requirements: *2152602660
|
91
92
|
- !ruby/object:Gem::Dependency
|
92
93
|
name: rspec
|
93
|
-
requirement: &
|
94
|
+
requirement: &2152601880 !ruby/object:Gem::Requirement
|
94
95
|
none: false
|
95
96
|
requirements:
|
96
97
|
- - ~>
|
@@ -98,10 +99,10 @@ dependencies:
|
|
98
99
|
version: '2.7'
|
99
100
|
type: :development
|
100
101
|
prerelease: false
|
101
|
-
version_requirements: *
|
102
|
+
version_requirements: *2152601880
|
102
103
|
- !ruby/object:Gem::Dependency
|
103
104
|
name: yajl-ruby
|
104
|
-
requirement: &
|
105
|
+
requirement: &2152601160 !ruby/object:Gem::Requirement
|
105
106
|
none: false
|
106
107
|
requirements:
|
107
108
|
- - ~>
|
@@ -109,33 +110,34 @@ dependencies:
|
|
109
110
|
version: '1.0'
|
110
111
|
type: :development
|
111
112
|
prerelease: false
|
112
|
-
version_requirements: *
|
113
|
+
version_requirements: *2152601160
|
113
114
|
- !ruby/object:Gem::Dependency
|
114
115
|
name: json
|
115
|
-
requirement: &
|
116
|
+
requirement: &2152600600 !ruby/object:Gem::Requirement
|
116
117
|
none: false
|
117
118
|
requirements:
|
118
119
|
- - ~>
|
119
120
|
- !ruby/object:Gem::Version
|
120
|
-
version: 1.
|
121
|
+
version: '1.6'
|
121
122
|
type: :development
|
122
123
|
prerelease: false
|
123
|
-
version_requirements: *
|
124
|
+
version_requirements: *2152600600
|
124
125
|
- !ruby/object:Gem::Dependency
|
125
126
|
name: guard-rspec
|
126
|
-
requirement: &
|
127
|
+
requirement: &2152599980 !ruby/object:Gem::Requirement
|
127
128
|
none: false
|
128
129
|
requirements:
|
129
130
|
- - ~>
|
130
131
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.
|
132
|
+
version: '0.5'
|
132
133
|
type: :development
|
133
134
|
prerelease: false
|
134
|
-
version_requirements: *
|
135
|
+
version_requirements: *2152599980
|
135
136
|
description: TweetStream allows you to easily consume the Twitter Streaming API utilizing
|
136
137
|
the YAJL Ruby gem.
|
137
138
|
email:
|
138
139
|
- michael@intridea.com
|
140
|
+
- steve.agalloco@gmail.com
|
139
141
|
executables: []
|
140
142
|
extensions: []
|
141
143
|
extra_rdoc_files: []
|
@@ -144,12 +146,13 @@ files:
|
|
144
146
|
- .gemtest
|
145
147
|
- .gitignore
|
146
148
|
- .rspec
|
149
|
+
- .simplecov
|
147
150
|
- .yardopts
|
151
|
+
- CHANGELOG.md
|
148
152
|
- Gemfile
|
149
153
|
- Guardfile
|
150
154
|
- LICENSE.md
|
151
155
|
- README.md
|
152
|
-
- RELEASE_NOTES.md
|
153
156
|
- Rakefile
|
154
157
|
- examples/growl_daemon.rb
|
155
158
|
- examples/oauth.rb
|
@@ -192,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
195
|
requirements:
|
193
196
|
- - ! '>='
|
194
197
|
- !ruby/object:Gem::Version
|
195
|
-
version:
|
198
|
+
version: '0'
|
196
199
|
requirements: []
|
197
200
|
rubyforge_project:
|
198
201
|
rubygems_version: 1.8.10
|
@@ -210,3 +213,4 @@ test_files:
|
|
210
213
|
- spec/tweetstream/parser_spec.rb
|
211
214
|
- spec/tweetstream/status_spec.rb
|
212
215
|
- spec/tweetstream_spec.rb
|
216
|
+
has_rdoc:
|