twitter 4.5.0 → 4.6.0

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.
@@ -0,0 +1,3 @@
1
+ oq
2
+ ;[�=Y�3�fe�a�p
3
+ Z�VۭV &'.3"p�zd1S���Ru"+\r�iF��%�=Dr�_���ǵ~���xM�O��1.�O�ߏ1���E�ݥ;=�>�uݭ���~3��|B�͠�gO~��}��D�&E[wy���k�W�����W*��=�t�c��fO��O0�%I�=�fص��k":j菃p�7E�p/�28����1A%�i� 2I �!�n
@@ -1,6 +1,13 @@
1
+ 4.6.0
2
+ -----
3
+ * [Make `Twitter::Base#attrs` call methods if they exist](https://github.com/sferik/twitter/commit/ff4f2daccd1acdfddcea7139d4dd6490b55129db)
4
+ * [Allow `Twitter::API::Tweets#oembed` and `Twitter::API::Tweets#oembeds` to take a URL](https://github.com/sferik/twitter/commit/0d986fa4b0c254e8c816bce086c3f6648d8fd3d7) ([@bshelton229](https://twitter.com/bshelton229))
5
+ * [Add `Twitter::Tweet#filter_level` and `Twitter##Tweet#lang` attribute readers](https://github.com/sferik/twitter/commit/283aafbe1219e55f19a76517d9edce497001fca2)
6
+ * [Add "Quick Start Guide" to the `README`](https://github.com/sferik/twitter/commit/afc24ee1bd07f19ef7fb8fd6b85aede34f3ab156) ([@coreyhaines](https://twitter.com/coreyhaines))
7
+
1
8
  4.5.0
2
9
  -----
3
- * [Add no_retweet_ids](https://github.com/sferik/twitter/commit/cab8d6ebf3afdbd24463932262798a132d70a6f1)
10
+ * [Add no_retweet_ids](https://github.com/sferik/twitter/commit/cab8d6ebf3afdbd24463932262798a132d70a6f1) ([@tibbon](https://twitter.com/tibbon))
4
11
 
5
12
  4.4.4
6
13
  -----
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2006-2012 John Nunemaker, Wynn Netherland, Erik Michaels-Ober, Steve Richert
1
+ Copyright (c) 2006-2013 John Nunemaker, Wynn Netherland, Erik Michaels-Ober, Steve Richert
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,31 +1,67 @@
1
1
  # The Twitter Ruby Gem
2
+
2
3
  [![Gem Version](https://badge.fury.io/rb/twitter.png)][gem]
3
4
  [![Build Status](https://secure.travis-ci.org/sferik/twitter.png?branch=master)][travis]
4
5
  [![Dependency Status](https://gemnasium.com/sferik/twitter.png?travis)][gemnasium]
5
- [![Code Climate](https://codeclimate.com/badge.png)][codeclimate]
6
+ [![Code Climate](https://codeclimate.com/github/sferik/twitter.png)][codeclimate]
7
+ [![Coverage Status](https://coveralls.io/repos/sferik/twitter/badge.png?branch=master)][coveralls]
6
8
  [![Click here to make a donation](http://www.pledgie.com/campaigns/18388.png)][pledgie]
7
9
 
8
10
  [gem]: https://rubygems.org/gems/twitter
9
11
  [travis]: http://travis-ci.org/sferik/twitter
10
12
  [gemnasium]: https://gemnasium.com/sferik/twitter
11
13
  [codeclimate]: https://codeclimate.com/github/sferik/twitter
14
+ [coveralls]: https://coveralls.io/r/sferik/twitter
12
15
  [pledgie]: http://pledgie.com/campaigns/18388
13
16
 
14
17
  A Ruby interface to the Twitter API.
15
18
 
16
19
  ## Installation
17
- ```sh
18
- gem install twitter
20
+ gem install twitter
21
+
22
+ To ensure the code you're installing hasn't been tampered with, it's
23
+ recommended that you verify the signature. To do this, you need to add my
24
+ public key as a trusted certificate (you only need to do this once):
25
+
26
+ gem cert --add <(curl -Ls https://gist.github.com/sferik/4701180/raw/public_cert.pem)
27
+
28
+ Then, install the gem with the high security trust policy:
29
+
30
+ gem install twitter -P HighSecurity
31
+
32
+ ## Quick Start Guide
33
+ So you want to get up and tweeting as fast as possible?
34
+
35
+ First, [register your application with Twitter][register].
36
+
37
+ Then, copy and paste in your OAuth data.
38
+
39
+ ```ruby
40
+ Twitter.configure do |config|
41
+ config.consumer_key = YOUR_CONSUMER_KEY
42
+ config.consumer_secret = YOUR_CONSUMER_SECRET
43
+ config.oauth_token = YOUR_OAUTH_TOKEN
44
+ config.oauth_token_secret = YOUR_OAUTH_TOKEN_SECRET
45
+ end
19
46
  ```
20
47
 
48
+ That's it! You're ready to Tweet:
49
+ ```ruby
50
+ Twitter.update("I'm tweeting with @gem!")
51
+ ```
52
+
53
+ For more examples of how to use the gem, read the [documentation][] or see [Usage Examples][] below.
54
+
55
+ [register]: https://dev.twitter.com/apps/new
56
+ [Usage Examples]: #usage-examples
57
+
58
+ ## CLI
59
+
21
60
  Looking for the Twitter command-line interface? It was [removed][] from this
22
- gem in version 0.5.0 and now exists as a [separate project][separate]:
61
+ gem in version 0.5.0 and now exists as a [separate project][t].
23
62
 
24
- ```sh
25
- gem install t
26
- ```
27
63
  [removed]: https://github.com/sferik/twitter/commit/dd2445e3e2c97f38b28a3f32ea902536b3897adf
28
- [separate]: https://github.com/sferik/t
64
+ [t]: https://github.com/sferik/t
29
65
 
30
66
  ## Documentation
31
67
  [http://rdoc.info/gems/twitter][documentation]
@@ -49,132 +85,11 @@ wiki][apps]!
49
85
 
50
86
  [apps]: https://github.com/sferik/twitter/wiki/apps
51
87
 
52
- ## What's new in version 4?
53
-
54
- #### Twitter API v1.1
55
-
56
- Version 4 of this library targets Twitter API v1.1. To understand the
57
- implications of this change, please read the following announcements from
58
- Twitter:
59
-
60
- * [Changes coming in Version 1.1 of the Twitter API][coming]
61
- * [Current status: API v1.1][status]
62
- * [Overview: Version 1.1 of the Twitter API][overview]
63
-
64
- [coming]: https://dev.twitter.com/blog/changes-coming-to-twitter-api
65
- [status]: https://dev.twitter.com/blog/current-status-api-v1.1
66
- [overview]: https://dev.twitter.com/docs/api/1.1/overview
67
-
68
- Despite the removal of certain underlying functionality in Twitter API v1.1,
69
- this library aims to preserve backward-compatibility wherever possible. For
70
- example, despite the removal of the [`GET
71
- statuses/retweeted_by_user`][retweeted_by_user] resource, the
72
- `Twitter::API#retweeted_by_user` method continues to exist, implemented by
73
- making multiple requests to the [`GET statuses/user_timeline`][user_timeline]
74
- resource. As a result, there is no longer a one-to-one correlation between
75
- method calls and Twitter API requests. In fact, it's possible for a single
76
- method call to exceed the Twitter API rate limit for a resource. If you think
77
- this might cause a problem for your application, feel free to [join the
78
- discussion][discussion].
79
-
80
- [retweeted_by_user]: https://dev.twitter.com/docs/api/1/get/statuses/retweeted_by_user
81
- [user_timeline]: https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline
82
- [discussion]: https://dev.twitter.com/discussions/10644
83
-
84
- #### Rate Limiting
85
-
86
- Another consequence of Twitter API v1.1 is that the
87
- `Twitter::Client#rate_limit` method has been removed, since the concept of a
88
- client-wide rate limit no longer exists. Rate limits are now applied on a
89
- per-resource level, however, since there is no longer a one-to-one mapping
90
- between methods and Twitter API resources, it's not entirely obvious how rate
91
- limit information should be exposed. I've decided to go back to the pre-3.0.0
92
- behavior of including rate limit information on `Twitter::Error` objects.
93
- Here's an example of how to handle rate limits:
94
-
95
- ```ruby
96
- MAX_ATTEMPTS = 3
97
- num_attempts = 0
98
- begin
99
- num_attempts += 1
100
- retweets = Twitter.retweeted_by_user("sferik")
101
- rescue Twitter::Error::TooManyRequests => error
102
- if num_attempts <= MAX_ATTEMPTS
103
- # NOTE: Your process could go to sleep for up to 15 minutes but if you
104
- # retry any sooner, it will almost certainly fail with the same exception.
105
- sleep error.rate_limit.reset_in
106
- retry
107
- else
108
- raise
109
- end
110
- end
111
- ```
112
- #### Methods Missing
113
-
114
- As a consequence of moving to Twitter API v1.1, the following methods from
115
- version 3 are no longer available in version 4:
116
-
117
- * `Twitter::API#accept`
118
- * `Twitter::API#deny`
119
- * `Twitter::API#disable_notifications`
120
- * `Twitter::API#enable_notifications`
121
- * `Twitter::API#end_session`
122
- * `Twitter::API#rate_limit_status`
123
- * `Twitter::API#rate_limited?`
124
- * `Twitter::API#recommendations`
125
- * `Twitter::API#related_results`
126
- * `Twitter::API#retweeted_to_user`
127
- * `Twitter::API#trends_daily`
128
- * `Twitter::API#trends_weekly`
129
- * `Twitter::Client#rate_limit`
130
- * `Twitter::RateLimit#class`
131
-
132
- #### Custom Endpoints
133
-
134
- The `Twitter::API#update_with_media` method no longer uses the custom
135
- `upload.twitter.com` endpoint, so `media_endpoint` configuration has been
136
- removed. Likewise, the `Twitter::API#search` method no longer uses the custom
137
- `search.twitter.com` endpoint, so `search_endpoint` configuration has also been
138
- removed.
139
-
140
- #### Errors
141
-
142
- It's worth mentioning new error classes:
143
-
144
- * `Twitter::Error::GatewayTimeout`
145
- * `Twitter::Error::TooManyRequests`
146
- * `Twitter::Error::UnprocessableEntity`
147
-
148
- In previous versions of this library, rate limit errors were indicated by
149
- raising either `Twitter::Error::BadRequest` or
150
- `Twitter::Error::EnhanceYourCalm` (for the Search API). As of version 4, the
151
- library will raise `Twitter::Error::TooManyRequests` for all rate limit errors.
152
- The `Twitter::Error::EnhanceYourCalm` class has been aliased to
153
- `Twitter::Error::TooManyRequests`.
154
-
155
- #### Identity Map
156
-
157
- In version 4, the identity map is [disabled by default][disabled]. If you want
158
- to enable this feature, you can use the [default identity map][default] or
159
- [write a custom identity map][custom].
160
-
161
- ```ruby
162
- Twitter.identity_map = Twitter::IdentityMap
163
- ```
164
-
165
- [disabled]: https://github.com/sferik/twitter/commit/c6c5960bea998abdc3e82cbb8dd68766a2df52e1
166
- [default]: https://github.com/sferik/twitter/blob/master/lib/twitter/identity_map.rb
167
- [custom]: https://github.com/sferik/twitter/blob/master/etc/sqlite_identity_map.rb
168
-
169
88
  ## Configuration
170
-
171
- Twitter API v1.1 requires you to authenticate via OAuth, so you'll need a
172
- registered Twitter application. To register a new application, sign-in using
173
- your Twitter account and the fill out the form at
174
- http://dev.twitter.com/apps/new. If you've previously registered a Twitter
175
- application, it will be listed at http://dev.twitter.com/apps. Once you've
176
- registered an application, make sure to set the correct access level, otherwise
177
- you may see the error:
89
+ Twitter API v1.1 requires you to authenticate via OAuth, so you'll need to
90
+ [register your application with Twitter][register]. Once you've registered an
91
+ application, make sure to set the correct access level, otherwise you may see
92
+ the error:
178
93
 
179
94
  Read-only application cannot POST
180
95
 
@@ -199,12 +114,10 @@ end
199
114
 
200
115
  Alternately, you can set the following environment variables:
201
116
 
202
- ```sh
203
- TWITTER_CONSUMER_KEY
204
- TWITTER_CONSUMER_SECRET
205
- TWITTER_OAUTH_TOKEN
206
- TWITTER_OAUTH_TOKEN_SECRET
207
- ```
117
+ TWITTER_CONSUMER_KEY
118
+ TWITTER_CONSUMER_SECRET
119
+ TWITTER_OAUTH_TOKEN
120
+ TWITTER_OAUTH_TOKEN_SECRET
208
121
 
209
122
  After configuration, requests can be made like so:
210
123
 
@@ -213,7 +126,6 @@ Twitter.update("I'm tweeting with @gem!")
213
126
  ```
214
127
 
215
128
  #### Thread Safety
216
-
217
129
  Applications that make requests on behalf of multiple Twitter users should
218
130
  avoid using global configuration. In this case, you may still specify the
219
131
  `consumer_key` and `consumer_secret` globally. (In a Rails application, this
@@ -230,12 +142,12 @@ Then, for each user's access token/secret pair, instantiate a
230
142
  `Twitter::Client`:
231
143
 
232
144
  ```ruby
233
- @client_erik = Twitter::Client.new(
145
+ erik = Twitter::Client.new(
234
146
  :oauth_token => "Erik's access token",
235
147
  :oauth_token_secret => "Erik's access secret"
236
148
  )
237
149
 
238
- @client_john = Twitter::Client.new(
150
+ john = Twitter::Client.new(
239
151
  :oauth_token => "John's access token",
240
152
  :oauth_token_secret => "John's access secret"
241
153
  )
@@ -244,15 +156,15 @@ Then, for each user's access token/secret pair, instantiate a
244
156
  You can now make threadsafe requests as the authenticated user:
245
157
 
246
158
  ```ruby
247
- Thread.new{@client_erik.update("Tweeting as Erik!")}
248
- Thread.new{@client_john.update("Tweeting as John!")}
159
+ Thread.new{erik.update("Tweeting as Erik!")}
160
+ Thread.new{john.update("Tweeting as John!")}
249
161
  ```
250
162
 
251
163
  Or, if you prefer, you can specify all configuration options when instantiating
252
164
  a `Twitter::Client`:
253
165
 
254
166
  ```ruby
255
- @client = Twitter::Client.new(
167
+ client = Twitter::Client.new(
256
168
  :consumer_key => "an application's consumer key",
257
169
  :consumer_secret => "an application's consumer secret",
258
170
  :oauth_token => "a user's access token",
@@ -263,7 +175,6 @@ a `Twitter::Client`:
263
175
  This may be useful if you're using multiple consumer key/secret pairs.
264
176
 
265
177
  #### Middleware
266
-
267
178
  The Faraday middleware stack is fully configurable and is exposed as a
268
179
  `Faraday::Builder` object. You can modify the default middleware in-place:
269
180
 
@@ -360,7 +271,6 @@ Twitter.search("#ruby -rt", :lang => "ja", :count => 1).results.first.text
360
271
  For more usage examples, please see the full [documentation][].
361
272
 
362
273
  ## Streaming
363
-
364
274
  To access the Twitter Streaming API, we recommend [TweetStream][].
365
275
 
366
276
  [tweetstream]: https://github.com/intridea/tweetstream
@@ -374,7 +284,6 @@ recommend [Oj][].
374
284
  [oj]: https://rubygems.org/gems/oj
375
285
 
376
286
  ## Statistics
377
-
378
287
  Here are some fun facts about this library:
379
288
 
380
289
  * It is implemented in just 2,000 lines of Ruby code
@@ -396,13 +305,15 @@ Here are some fun facts about this library:
396
305
 
397
306
  ## Supported Ruby Versions
398
307
  This library aims to support and is [tested against][travis] the following Ruby
399
- version:
308
+ implementations:
400
309
 
401
310
  * Ruby 1.8.7
402
311
  * Ruby 1.9.2
403
312
  * Ruby 1.9.3
404
313
  * Ruby 2.0.0
405
314
 
315
+ If something doesn't work on one of these interpreters, it's a bug.
316
+
406
317
  This library may inadvertently work (or seem to work) on other Ruby
407
318
  implementations, however support will only be provided for the versions listed
408
319
  above.
@@ -410,12 +321,11 @@ above.
410
321
  If you would like this library to support another Ruby version, you may
411
322
  volunteer to be a maintainer. Being a maintainer entails making sure all tests
412
323
  run and pass on that implementation. When something breaks on your
413
- implementation, you will be personally responsible for providing patches in a
414
- timely fashion. If critical issues for a particular implementation exist at the
415
- time of a major release, support for that Ruby version may be dropped.
324
+ implementation, you will be responsible for providing patches in a timely
325
+ fashion. If critical issues for a particular implementation exist at the time
326
+ of a major release, support for that Ruby version may be dropped.
416
327
 
417
328
  ## Versioning
418
-
419
329
  This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations
420
330
  of this scheme should be reported as bugs. Specifically, if a minor or patch
421
331
  version is released that breaks backward compatibility, that version should be
@@ -430,6 +340,116 @@ Constraint][pvc] with two digits of precision. For example:
430
340
  [semver]: http://semver.org/
431
341
  [pvc]: http://docs.rubygems.org/read/chapter/16#page74
432
342
 
343
+ ## What's new in version 4?
344
+ #### Twitter API v1.1
345
+ Version 4 of this library targets Twitter API v1.1. To understand the
346
+ implications of this change, please read the following announcements from
347
+ Twitter:
348
+
349
+ * [Changes coming in Version 1.1 of the Twitter API][coming]
350
+ * [Current status: API v1.1][status]
351
+ * [Overview: Version 1.1 of the Twitter API][overview]
352
+
353
+ [coming]: https://dev.twitter.com/blog/changes-coming-to-twitter-api
354
+ [status]: https://dev.twitter.com/blog/current-status-api-v1.1
355
+ [overview]: https://dev.twitter.com/docs/api/1.1/overview
356
+
357
+ Despite the removal of certain underlying functionality in Twitter API v1.1,
358
+ this library aims to preserve backward-compatibility wherever possible. For
359
+ example, despite the removal of the [`GET
360
+ statuses/retweeted_by_user`][retweeted_by_user] resource, the
361
+ `Twitter::API#retweeted_by_user` method continues to exist, implemented by
362
+ making multiple requests to the [`GET statuses/user_timeline`][user_timeline]
363
+ resource. As a result, there is no longer a one-to-one correlation between
364
+ method calls and Twitter API requests. In fact, it's possible for a single
365
+ method call to exceed the Twitter API rate limit for a resource. If you think
366
+ this might cause a problem for your application, feel free to [join the
367
+ discussion][discussion].
368
+
369
+ [retweeted_by_user]: https://dev.twitter.com/docs/api/1/get/statuses/retweeted_by_user
370
+ [user_timeline]: https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline
371
+ [discussion]: https://dev.twitter.com/discussions/10644
372
+
373
+ #### Rate Limiting
374
+ Another consequence of Twitter API v1.1 is that the
375
+ `Twitter::Client#rate_limit` method has been removed, since the concept of a
376
+ client-wide rate limit no longer exists. Rate limits are now applied on a
377
+ per-resource level, however, since there is no longer a one-to-one mapping
378
+ between methods and Twitter API resources, it's not entirely obvious how rate
379
+ limit information should be exposed. I've decided to go back to the pre-3.0.0
380
+ behavior of including rate limit information on `Twitter::Error` objects.
381
+ Here's an example of how to handle rate limits:
382
+
383
+ ```ruby
384
+ MAX_ATTEMPTS = 3
385
+ num_attempts = 0
386
+ begin
387
+ num_attempts += 1
388
+ retweets = Twitter.retweeted_by_user("sferik")
389
+ rescue Twitter::Error::TooManyRequests => error
390
+ if num_attempts <= MAX_ATTEMPTS
391
+ # NOTE: Your process could go to sleep for up to 15 minutes but if you
392
+ # retry any sooner, it will almost certainly fail with the same exception.
393
+ sleep error.rate_limit.reset_in
394
+ retry
395
+ else
396
+ raise
397
+ end
398
+ end
399
+ ```
400
+ #### Methods Missing
401
+ As a consequence of moving to Twitter API v1.1, the following methods from
402
+ version 3 are no longer available in version 4:
403
+
404
+ * `Twitter::API#accept`
405
+ * `Twitter::API#deny`
406
+ * `Twitter::API#disable_notifications`
407
+ * `Twitter::API#enable_notifications`
408
+ * `Twitter::API#end_session`
409
+ * `Twitter::API#rate_limit_status`
410
+ * `Twitter::API#rate_limited?`
411
+ * `Twitter::API#recommendations`
412
+ * `Twitter::API#related_results`
413
+ * `Twitter::API#retweeted_to_user`
414
+ * `Twitter::API#trends_daily`
415
+ * `Twitter::API#trends_weekly`
416
+ * `Twitter::Client#rate_limit`
417
+ * `Twitter::RateLimit#class`
418
+
419
+ #### Custom Endpoints
420
+ The `Twitter::API#update_with_media` method no longer uses the custom
421
+ `upload.twitter.com` endpoint, so `media_endpoint` configuration has been
422
+ removed. Likewise, the `Twitter::API#search` method no longer uses the custom
423
+ `search.twitter.com` endpoint, so `search_endpoint` configuration has also been
424
+ removed.
425
+
426
+ #### Errors
427
+ It's worth mentioning new error classes:
428
+
429
+ * `Twitter::Error::GatewayTimeout`
430
+ * `Twitter::Error::TooManyRequests`
431
+ * `Twitter::Error::UnprocessableEntity`
432
+
433
+ In previous versions of this library, rate limit errors were indicated by
434
+ raising either `Twitter::Error::BadRequest` or
435
+ `Twitter::Error::EnhanceYourCalm` (for the Search API). As of version 4, the
436
+ library will raise `Twitter::Error::TooManyRequests` for all rate limit errors.
437
+ The `Twitter::Error::EnhanceYourCalm` class has been aliased to
438
+ `Twitter::Error::TooManyRequests`.
439
+
440
+ #### Identity Map
441
+ In version 4, the identity map is [disabled by default][disabled]. If you want
442
+ to enable this feature, you can use the [default identity map][default] or
443
+ [write a custom identity map][custom].
444
+
445
+ ```ruby
446
+ Twitter.identity_map = Twitter::IdentityMap
447
+ ```
448
+
449
+ [disabled]: https://github.com/sferik/twitter/commit/c6c5960bea998abdc3e82cbb8dd68766a2df52e1
450
+ [default]: lib/twitter/identity_map.rb
451
+ [custom]: etc/sqlite_identity_map.rb
452
+
433
453
  ## Additional Notes
434
454
  This will be the last major version of this library to support Ruby 1.8.
435
455
  Requiring Ruby 1.9 will allow us to [remove][class_variable_get]
@@ -446,7 +466,7 @@ critical security vulnerabilities are discovered.
446
466
  [ruby192]: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/367983
447
467
 
448
468
  ## Copyright
449
- Copyright (c) 2006-2012 John Nunemaker, Wynn Netherland, Erik Michaels-Ober, Steve Richert.
469
+ Copyright (c) 2006-2013 John Nunemaker, Wynn Netherland, Erik Michaels-Ober, Steve Richert.
450
470
  See [LICENSE][] for details.
451
471
 
452
- [license]: https://github.com/sferik/twitter/blob/master/LICENSE.md
472
+ [license]: LICENSE.md
@@ -115,7 +115,7 @@ module Twitter
115
115
  # Allows the authenticating user to follow the specified users, unless they are already followed
116
116
  #
117
117
  # @see https://dev.twitter.com/docs/api/1.1/post/friendships/create
118
- # @rate_limited No
118
+ # @rate_limited Yes
119
119
  # @authentication Requires user context
120
120
  # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
121
121
  # @return [Array<Twitter::User>] The followed users.
@@ -259,7 +259,7 @@ module Twitter
259
259
  # @authentication Requires user context
260
260
  # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
261
261
  # @return [Twitter::Cursor]
262
- # @overload friend_ids(options={})
262
+ # @overload followers(options={})
263
263
  # Returns an array of numeric IDs for every user the authenticated user is following
264
264
  #
265
265
  # @param options [Hash] A customizable set of options.
@@ -267,8 +267,8 @@ module Twitter
267
267
  # @option options [Boolean, String, Integer] :skip_status Do not include contributee's Tweets when set to true, 't' or 1.
268
268
  # @option options [Boolean, String, Integer] :include_user_entities The user entities node will be disincluded when set to false.
269
269
  # @example Return the authenticated user's friends' IDs
270
- # Twitter.friend_ids
271
- # @overload friend_ids(user, options={})
270
+ # Twitter.followers
271
+ # @overload followers(user, options={})
272
272
  # Returns an array of numeric IDs for every user the specified user is following
273
273
  #
274
274
  # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, or object.
@@ -290,7 +290,7 @@ module Twitter
290
290
  # @authentication Requires user context
291
291
  # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
292
292
  # @return [Twitter::Cursor]
293
- # @overload friend_ids(options={})
293
+ # @overload friends(options={})
294
294
  # Returns an array of numeric IDs for every user the authenticated user is following
295
295
  #
296
296
  # @param options [Hash] A customizable set of options.
@@ -298,8 +298,8 @@ module Twitter
298
298
  # @option options [Boolean, String, Integer] :skip_status Do not include contributee's Tweets when set to true, 't' or 1.
299
299
  # @option options [Boolean, String, Integer] :include_user_entities The user entities node will be disincluded when set to false.
300
300
  # @example Return the authenticated user's friends' IDs
301
- # Twitter.friend_ids
302
- # @overload friend_ids(user, options={})
301
+ # Twitter.friends
302
+ # @overload friends(user, options={})
303
303
  # Returns an array of numeric IDs for every user the specified user is following
304
304
  #
305
305
  # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, or object.
@@ -330,7 +330,7 @@ module Twitter
330
330
  get("/1.1/friendships/no_retweets/ids.json", options)[:body].map(&:to_i)
331
331
  end
332
332
  alias no_retweets_ids no_retweet_ids
333
-
333
+
334
334
  end
335
335
  end
336
336
  end
@@ -212,7 +212,7 @@ module Twitter
212
212
  # @authentication Requires user context
213
213
  # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
214
214
  # @return [Twitter::OEmbed] OEmbed for the requested Tweet.
215
- # @param id [Integer, String] A Tweet ID.
215
+ # @param id_or_url [Integer, String] A Tweet ID or URL.
216
216
  # @param options [Hash] A customizable set of options.
217
217
  # @option options [Integer] :maxwidth The maximum width in pixels that the embed should be rendered at. This value is constrained to be between 250 and 550 pixels.
218
218
  # @option options [Boolean, String, Integer] :hide_media Specifies whether the embedded Tweet should automatically expand images which were uploaded via {https://dev.twitter.com/docs/api/1.1/post/statuses/update_with_media POST statuses/update_with_media}. When set to either true, t or 1 images will not be expanded. Defaults to false.
@@ -223,8 +223,9 @@ module Twitter
223
223
  # @option options [String] :lang Language code for the rendered embed. This will affect the text and localization of the rendered HTML.
224
224
  # @example Return oEmbeds for Tweet with the ID 25938088801
225
225
  # Twitter.status_with_activity(25938088801)
226
- def oembed(id, options={})
227
- object_from_response(Twitter::OEmbed, :get, "/1.1/statuses/oembed.json?id=#{id}", options)
226
+ def oembed(id_or_url, options={})
227
+ key = id_or_url.is_a?(String) && id_or_url.match(%r{^https?://}i) ? "url" : "id"
228
+ object_from_response(Twitter::OEmbed, :get, "/1.1/statuses/oembed.json?#{key}=#{id_or_url}", options)
228
229
  end
229
230
 
230
231
  # Returns oEmbeds for Tweets
@@ -250,8 +251,8 @@ module Twitter
250
251
  # @option options [String] :lang Language code for the rendered embed. This will affect the text and localization of the rendered HTML.
251
252
  def oembeds(*args)
252
253
  arguments = Twitter::API::Arguments.new(args)
253
- arguments.flatten.threaded_map do |id|
254
- object_from_response(Twitter::OEmbed, :get, "/1.1/statuses/oembed.json?id=#{id}", arguments.options)
254
+ arguments.flatten.threaded_map do |id_or_url|
255
+ oembed(id_or_url, arguments.options)
255
256
  end
256
257
  end
257
258
 
@@ -270,6 +270,7 @@ module Twitter
270
270
  # Returns extended information for the authenticated user
271
271
  #
272
272
  # @param options [Hash] A customizable set of options.
273
+ # @option options [Boolean] :include_entities The tweet entities node will be disincluded when set to false.
273
274
  # @option options [Boolean, String, Integer] :skip_status Do not include user's Tweets when set to true, 't' or 1.
274
275
  # @example Return extended information for the authenticated user
275
276
  # Twitter.user
@@ -278,6 +279,8 @@ module Twitter
278
279
  #
279
280
  # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, or object.
280
281
  # @param options [Hash] A customizable set of options.
282
+ # @option options [Boolean] :include_entities The tweet entities node will be disincluded when set to false.
283
+ # @option options [Boolean, String, Integer] :skip_status Do not include user's Tweets when set to true, 't' or 1.
281
284
  # @example Return extended information for @sferik
282
285
  # Twitter.user('sferik')
283
286
  # Twitter.user(7505382) # Same as above
@@ -93,7 +93,9 @@ module Twitter
93
93
  #
94
94
  # @return [Hash]
95
95
  def attrs
96
- @attrs
96
+ @attrs.inject({}) do |attrs, (key, value)|
97
+ attrs.merge!(key => respond_to?(key) ? send(key) : value)
98
+ end
97
99
  end
98
100
  alias to_hash attrs
99
101
 
@@ -22,7 +22,7 @@ module Twitter
22
22
  body[:error]
23
23
  elsif body[:errors]
24
24
  first = Array(body[:errors]).first
25
- if first.kind_of?(Hash)
25
+ if first.is_a?(Hash)
26
26
  first[:message].chomp
27
27
  else
28
28
  first.chomp
@@ -10,9 +10,8 @@ module Twitter
10
10
  include Twitter::Exceptable
11
11
  attr_reader :favorited, :favoriters, :from_user_id, :from_user_name,
12
12
  :in_reply_to_screen_name, :in_reply_to_attrs_id, :in_reply_to_status_id,
13
- :in_reply_to_user_id, :iso_language_code, :repliers, :retweeted,
14
- :retweeters, :source, :text, :to_user, :to_user_id, :to_user_name,
15
- :truncated
13
+ :in_reply_to_user_id, :lang, :repliers, :retweeted, :retweeters, :source,
14
+ :text, :to_user, :to_user_id, :to_user_name, :truncated
16
15
  alias in_reply_to_tweet_id in_reply_to_status_id
17
16
  alias favourited favorited
18
17
  alias favourited? favorited?
@@ -40,6 +39,10 @@ module Twitter
40
39
  @attrs[:from_user] || user && user.screen_name
41
40
  end
42
41
 
42
+ def filter_level
43
+ @attrs[:filter_level] || "none"
44
+ end
45
+
43
46
  # @return [String]
44
47
  # @note May be > 140 characters.
45
48
  def full_text
@@ -138,8 +141,8 @@ module Twitter
138
141
  # @param key [Symbol]
139
142
  def entities(klass, key)
140
143
  if entities?
141
- Array(@attrs[:entities][key.to_sym]).map do |user_mention|
142
- klass.fetch_or_new(user_mention)
144
+ Array(@attrs[:entities][key.to_sym]).map do |entity|
145
+ klass.fetch_or_new(entity)
143
146
  end
144
147
  else
145
148
  warn "#{Kernel.caller.first}: To get #{key.to_s.tr('_', ' ')}, you must pass `:include_entities => true` when requesting the #{self.class.name}."
@@ -32,6 +32,13 @@ module Twitter
32
32
  alias update_count statuses_count
33
33
  alias updates_count statuses_count
34
34
 
35
+ # @return [Array<Twitter::Entity::Url>]
36
+ def description_urls
37
+ @description_urls ||= Array(@attrs[:entities][:description][:urls]).map do |entity|
38
+ Twitter::Entity::Url.fetch_or_new(entity)
39
+ end
40
+ end
41
+
35
42
  # Return the URL to the user's profile banner image
36
43
  #
37
44
  # @param size [String, Symbol] The size of the image. Must be one of: 'mobile', 'mobile_retina', 'web', 'web_retina', 'ipad', or 'ipad_retina'
@@ -1,7 +1,7 @@
1
1
  module Twitter
2
2
  class Version
3
3
  MAJOR = 4 unless defined? Twitter::Version::MAJOR
4
- MINOR = 5 unless defined? Twitter::Version::MINOR
4
+ MINOR = 6 unless defined? Twitter::Version::MINOR
5
5
  PATCH = 0 unless defined? Twitter::Version::PATCH
6
6
  PRE = nil unless defined? Twitter::Version::PRE
7
7
 
@@ -1,9 +1,11 @@
1
- unless ENV['CI']
2
- require 'simplecov'
3
- SimpleCov.start do
4
- add_filter 'spec'
5
- end
6
- end
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ Coveralls::SimpleCov::Formatter
7
+ ]
8
+ SimpleCov.start
7
9
 
8
10
  require 'twitter'
9
11
  require 'twitter/identity_map'
@@ -13,6 +15,8 @@ require 'tempfile'
13
15
  require 'timecop'
14
16
  require 'webmock/rspec'
15
17
 
18
+ WebMock.disable_net_connect!(:allow => 'coveralls.io')
19
+
16
20
  RSpec.configure do |config|
17
21
  config.expect_with :rspec do |c|
18
22
  c.syntax = :expect
@@ -220,11 +220,16 @@ describe Twitter::API::Tweets do
220
220
  describe "#oembed" do
221
221
  before do
222
222
  stub_get("/1.1/statuses/oembed.json").with(:query => {:id => "25938088801"}).to_return(:body => fixture("oembed.json"), :headers => {:content_type => "application/json; charset=utf-8"})
223
+ stub_get("/1.1/statuses/oembed.json").with(:query => {:url => "https://twitter.com/sferik/status/25938088801"}).to_return(:body => fixture("oembed.json"), :headers => {:content_type => "application/json; charset=utf-8"})
223
224
  end
224
225
  it "requests the correct resource" do
225
226
  @client.oembed(25938088801)
226
227
  expect(a_get("/1.1/statuses/oembed.json").with(:query => {:id => "25938088801"})).to have_been_made
227
228
  end
229
+ it "requests the correct resource when a URL is given" do
230
+ @client.oembed("https://twitter.com/sferik/status/25938088801")
231
+ expect(a_get("/1.1/statuses/oembed.json").with(:query => {:url => "https://twitter.com/sferik/status/25938088801"}))
232
+ end
228
233
  it "returns an array of OEmbed instances" do
229
234
  oembed = @client.oembed(25938088801)
230
235
  expect(oembed).to be_a Twitter::OEmbed
@@ -234,11 +239,16 @@ describe Twitter::API::Tweets do
234
239
  describe "#oembeds" do
235
240
  before do
236
241
  stub_get("/1.1/statuses/oembed.json").with(:query => {:id => "25938088801"}).to_return(:body => fixture("oembed.json"), :headers => {:content_type => "application/json; charset=utf-8"})
242
+ stub_get("/1.1/statuses/oembed.json").with(:query => {:url => "https://twitter.com/sferik/status/25938088801"}).to_return(:body => fixture("oembed.json"), :headers => {:content_type => "application/json; charset=utf-8"})
237
243
  end
238
244
  it "requests the correct resource" do
239
245
  @client.oembeds(25938088801)
240
246
  expect(a_get("/1.1/statuses/oembed.json").with(:query => {:id => "25938088801"})).to have_been_made
241
247
  end
248
+ it "requests the correct resource when a URL is given" do
249
+ @client.oembeds("https://twitter.com/sferik/status/25938088801")
250
+ expect(a_get("/1.1/statuses/oembed.json").with(:query => {:url => "https://twitter.com/sferik/status/25938088801"})).to have_been_made
251
+ end
242
252
  it "returns an array of OEmbed instances" do
243
253
  oembeds = @client.oembeds(25938088801)
244
254
  expect(oembeds).to be_an Array
@@ -104,13 +104,13 @@ describe Twitter::Tweet do
104
104
 
105
105
  describe "#hashtags" do
106
106
  it "returns an Array of Entity::Hashtag when entities are set" do
107
- hashtags_hash = [
107
+ hashtags_array = [
108
108
  {
109
109
  :text => 'twitter',
110
110
  :indices => [10, 33],
111
111
  }
112
112
  ]
113
- hashtags = Twitter::Tweet.new(:id => 28669546014, :entities => {:hashtags => hashtags_hash}).hashtags
113
+ hashtags = Twitter::Tweet.new(:id => 28669546014, :entities => {:hashtags => hashtags_array}).hashtags
114
114
  expect(hashtags).to be_an Array
115
115
  expect(hashtags.first).to be_a Twitter::Entity::Hashtag
116
116
  expect(hashtags.first.indices).to eq [10, 33]
@@ -234,7 +234,7 @@ describe Twitter::Tweet do
234
234
  end
235
235
 
236
236
  it "returns true if there are entities set" do
237
- urls_hash = [
237
+ urls_array = [
238
238
  {
239
239
  :url => 'http://example.com/t.co',
240
240
  :expanded_url => 'http://example.com/expanded',
@@ -242,14 +242,14 @@ describe Twitter::Tweet do
242
242
  :indices => [10, 33],
243
243
  }
244
244
  ]
245
- tweet = Twitter::Tweet.new(:id => 28669546014, :entities => {:urls => urls_hash})
245
+ tweet = Twitter::Tweet.new(:id => 28669546014, :entities => {:urls => urls_array})
246
246
  expect(tweet.entities?).to be_true
247
247
  end
248
248
  end
249
249
 
250
250
  describe "#urls" do
251
251
  it "returns an Array of Entity::Url when entities are set" do
252
- urls_hash = [
252
+ urls_array = [
253
253
  {
254
254
  :url => 'http://example.com/t.co',
255
255
  :expanded_url => 'http://example.com/expanded',
@@ -257,7 +257,7 @@ describe Twitter::Tweet do
257
257
  :indices => [10, 33],
258
258
  }
259
259
  ]
260
- urls = Twitter::Tweet.new(:id => 28669546014, :entities => {:urls => urls_hash}).urls
260
+ urls = Twitter::Tweet.new(:id => 28669546014, :entities => {:urls => urls_array}).urls
261
261
  expect(urls).to be_an Array
262
262
  expect(urls.first).to be_a Twitter::Entity::Url
263
263
  expect(urls.first.indices).to eq [10, 33]
@@ -301,7 +301,7 @@ describe Twitter::Tweet do
301
301
 
302
302
  describe "#user_mentions" do
303
303
  it "returns an Array of Entity::UserMention when entities are set" do
304
- user_mentions_hash = [
304
+ user_mentions_array = [
305
305
  {
306
306
  :screen_name => 'sferik',
307
307
  :name => 'Erik Michaels-Ober',
@@ -310,7 +310,7 @@ describe Twitter::Tweet do
310
310
  :id => 7505382,
311
311
  }
312
312
  ]
313
- user_mentions = Twitter::Tweet.new(:id => 28669546014, :entities => {:user_mentions => user_mentions_hash}).user_mentions
313
+ user_mentions = Twitter::Tweet.new(:id => 28669546014, :entities => {:user_mentions => user_mentions_array}).user_mentions
314
314
  expect(user_mentions).to be_an Array
315
315
  expect(user_mentions.first).to be_a Twitter::Entity::UserMention
316
316
  expect(user_mentions.first.indices).to eq [0, 6]
@@ -31,6 +31,28 @@ describe Twitter::User do
31
31
  end
32
32
  end
33
33
 
34
+ describe "#description_urls" do
35
+ it "returns an Array of Entity::Url" do
36
+ urls_array = [
37
+ {
38
+ :url => 'http://example.com/t.co',
39
+ :expanded_url => 'http://example.com/expanded',
40
+ :display_url => 'example.com/expanded',
41
+ :indices => [10, 33],
42
+ }
43
+ ]
44
+ description_urls = Twitter::User.new(:id => 7505382, :entities => {:description => {:urls => urls_array}}).description_urls
45
+ expect(description_urls).to be_an Array
46
+ expect(description_urls.first).to be_a Twitter::Entity::Url
47
+ expect(description_urls.first.indices).to eq [10, 33]
48
+ expect(description_urls.first.display_url).to eq 'example.com/expanded'
49
+ end
50
+ it "is empty when not set" do
51
+ description_urls = Twitter::User.new(:id => 7505382, :entities => {:description => {:urls => []}}).description_urls
52
+ expect(description_urls).to be_empty
53
+ end
54
+ end
55
+
34
56
  describe "#profile_banner_url" do
35
57
  it "returns a String when profile_banner_url is set" do
36
58
  user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
@@ -1,13 +1,17 @@
1
- # encoding: utf-8
2
- require File.expand_path('../lib/twitter/version', __FILE__)
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'twitter/version'
3
5
 
4
6
  Gem::Specification.new do |spec|
5
- spec.add_dependency 'faraday', ['~> 0.8', '< 0.10']
6
- spec.add_dependency 'multi_json', ['~> 1.0']
7
- spec.add_dependency 'simple_oauth', ['~> 0.2']
8
- spec.authors = ["John Nunemaker", "Wynn Netherland", "Erik Michaels-Ober", "Steve Richert"]
7
+ spec.add_dependency 'faraday', ['~> 0.8', '< 0.10']
8
+ spec.add_dependency 'multi_json', '~> 1.0'
9
+ spec.add_dependency 'simple_oauth', '~> 0.2'
10
+ spec.add_development_dependency 'bundler', '~> 1.0'
11
+ spec.authors = ["John Nunemaker", "Wynn Netherland", "Erik Michaels-Ober", "Steve Richert", "Steve Agalloco"]
12
+ spec.cert_chain = ['certs/sferik.pem']
9
13
  spec.description = %q{A Ruby interface to the Twitter API.}
10
- spec.email = ['nunemaker@gmail.com', 'wynn.netherland@gmail.com', 'sferik@gmail.com', 'steve.richert@gmail.com']
14
+ spec.email = ['nunemaker@gmail.com', 'wynn.netherland@gmail.com', 'sferik@gmail.com', 'steve.richert@gmail.com', 'steve.agalloco@gmail.com']
11
15
  spec.files = %w(.yardopts CHANGELOG.md CONTRIBUTING.md LICENSE.md README.md Rakefile twitter.gemspec)
12
16
  spec.files += Dir.glob("lib/**/*.rb")
13
17
  spec.files += Dir.glob("spec/**/*")
@@ -15,7 +19,8 @@ Gem::Specification.new do |spec|
15
19
  spec.licenses = ['MIT']
16
20
  spec.name = 'twitter'
17
21
  spec.require_paths = ['lib']
18
- spec.required_rubygems_version = Gem::Requirement.new('>= 1.3.6')
22
+ spec.required_rubygems_version = '>= 1.3.6'
23
+ spec.signing_key = File.expand_path("~/.gem/private_key.pem") if $0 =~ /gem\z/
19
24
  spec.summary = spec.description
20
25
  spec.test_files = Dir.glob("spec/**/*")
21
26
  spec.version = Twitter::Version
metadata CHANGED
@@ -1,22 +1,51 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter
3
3
  version: !ruby/object:Gem::Version
4
+ version: 4.6.0
4
5
  prerelease:
5
- version: 4.5.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - John Nunemaker
9
9
  - Wynn Netherland
10
10
  - Erik Michaels-Ober
11
11
  - Steve Richert
12
+ - Steve Agalloco
12
13
  autorequire:
13
14
  bindir: bin
14
- cert_chain: []
15
- date: 2013-01-26 00:00:00.000000000 Z
15
+ cert_chain:
16
+ - !binary |-
17
+ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURMakNDQWhhZ0F3SUJB
18
+ Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREE5TVE4d0RRWURWUVFEREFaelpt
19
+ VnkKYVdzeEZUQVRCZ29Ka2lhSmsvSXNaQUVaRmdWbmJXRnBiREVUTUJFR0Nn
20
+ bVNKb21UOGl4a0FSa1dBMk52YlRBZQpGdzB4TXpBeU1ETXhNREF5TWpkYUZ3
21
+ MHhOREF5TURNeE1EQXlNamRhTUQweER6QU5CZ05WQkFNTUJuTm1aWEpwCmF6
22
+ RVZNQk1HQ2dtU0pvbVQ4aXhrQVJrV0JXZHRZV2xzTVJNd0VRWUtDWkltaVpQ
23
+ eUxHUUJHUllEWTI5dE1JSUIKSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4
24
+ QU1JSUJDZ0tDQVFFQWwweDVkeDh1S3hpN1Rrckl1eUJVVEpWQgp2MW85M25V
25
+ QjlqL3k0TTk2Z1Yycll3QWNpMUpQQnNlTmQ2RnliempvM1lHdUhsN0VRSHVT
26
+ SE5hZjFwMmx4ZXcvCnk2MEpYSUpCQmdQY0RLL0tDUDROVUhvZm0wamZvWUQr
27
+ SDV1TkpmSENOcTcvWnNUeE90RTNSYTkyczBCQ01UcG0Kd0JNTWxXUjVNdGRF
28
+ aElZdUJPNFhobmVqWWdIMEwvN0JMMmx5bW50Vm5zci9hZ2RRb29qUUNOMUlR
29
+ bXNSSnZyUgpkdVpSTzN0WnZvSW8xcEJjNEpFZWhEdXFDZXlCZ1BMT3FNb0t0
30
+ UWxvbGQxVFFzMWtXVUJLN0tXTUZFaEtDL0tnCnp5ektSSFFvOXlEWXdPdllu
31
+ Z29CTFkrVC9sd0NUNGR5c3NkaHpSYmZueEFoYUt1NFNBc3NJd2FDMDF5Vm93
32
+ SUQKQVFBQm96a3dOekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJTMHJ1
33
+ RGZSYWs1Y2kxT3BETlgvWmRERWtJcwppVEFMQmdOVkhROEVCQU1DQkxBd0RR
34
+ WUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFISFNNcy9NUDBzT2FMa0V2NEpvCnp2
35
+ a20zcW41QTZ0MHZhSHg3NzRjbWVqeU1VKzV3eVN4UmV6c3BMN1VMaDlOZXVL
36
+ Mk9oVStPZTNUcHFyQWc1VEsKUjhHUUlMblZ1MkZlbUdBNnNBa1BEbGNQdGdB
37
+ NmllSTE5UFpPRjZIVkxtYy9JRC9kUC9OZ1pXV3pFZXFRS21jSwoyK0hNK1NF
38
+ RURoWmtTY1lla3c0Wk9lMTY0WnRaRzgxNm9BdjV4MHBHaXRTSWt1bVVwN1Y4
39
+ aUVaLzZlaHI3WTllClhPZzRlZXVuNUwvSmptakFSb1cya05kdmtSRDNjMkVl
40
+ U0xxV3ZRUnNCbHlwSGZoczZKSnVMbHlaUEdoVTNSL3YKU2YzbFZLcEJDV2dS
41
+ cEdUdnk0NVhWcEIrNTl5MzNQSm1FdVExUFRFT1l2UXlhbzlVS01BQWFBTi83
42
+ cVdRdGpsMApobHc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
43
+ date: 2013-03-08 00:00:00.000000000 Z
16
44
  dependencies:
17
45
  - !ruby/object:Gem::Dependency
18
- prerelease: false
19
- version_requirements: !ruby/object:Gem::Requirement
46
+ name: faraday
47
+ requirement: !ruby/object:Gem::Requirement
48
+ none: false
20
49
  requirements:
21
50
  - - ~>
22
51
  - !ruby/object:Gem::Version
@@ -24,10 +53,10 @@ dependencies:
24
53
  - - <
25
54
  - !ruby/object:Gem::Version
26
55
  version: '0.10'
27
- none: false
28
56
  type: :runtime
29
- name: faraday
30
- requirement: !ruby/object:Gem::Requirement
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
31
60
  requirements:
32
61
  - - ~>
33
62
  - !ruby/object:Gem::Version
@@ -35,45 +64,61 @@ dependencies:
35
64
  - - <
36
65
  - !ruby/object:Gem::Version
37
66
  version: '0.10'
38
- none: false
39
67
  - !ruby/object:Gem::Dependency
40
- prerelease: false
41
- version_requirements: !ruby/object:Gem::Requirement
68
+ name: multi_json
69
+ requirement: !ruby/object:Gem::Requirement
70
+ none: false
42
71
  requirements:
43
72
  - - ~>
44
73
  - !ruby/object:Gem::Version
45
74
  version: '1.0'
46
- none: false
47
75
  type: :runtime
48
- name: multi_json
49
- requirement: !ruby/object:Gem::Requirement
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ none: false
50
79
  requirements:
51
80
  - - ~>
52
81
  - !ruby/object:Gem::Version
53
82
  version: '1.0'
54
- none: false
55
83
  - !ruby/object:Gem::Dependency
84
+ name: simple_oauth
85
+ requirement: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: '0.2'
91
+ type: :runtime
56
92
  prerelease: false
57
93
  version_requirements: !ruby/object:Gem::Requirement
94
+ none: false
58
95
  requirements:
59
96
  - - ~>
60
97
  - !ruby/object:Gem::Version
61
98
  version: '0.2'
62
- none: false
63
- type: :runtime
64
- name: simple_oauth
99
+ - !ruby/object:Gem::Dependency
100
+ name: bundler
65
101
  requirement: !ruby/object:Gem::Requirement
102
+ none: false
66
103
  requirements:
67
104
  - - ~>
68
105
  - !ruby/object:Gem::Version
69
- version: '0.2'
106
+ version: '1.0'
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
70
110
  none: false
111
+ requirements:
112
+ - - ~>
113
+ - !ruby/object:Gem::Version
114
+ version: '1.0'
71
115
  description: A Ruby interface to the Twitter API.
72
116
  email:
73
117
  - nunemaker@gmail.com
74
118
  - wynn.netherland@gmail.com
75
119
  - sferik@gmail.com
76
120
  - steve.richert@gmail.com
121
+ - steve.agalloco@gmail.com
77
122
  executables: []
78
123
  extensions: []
79
124
  extra_rdoc_files: []
@@ -315,17 +360,17 @@ rdoc_options: []
315
360
  require_paths:
316
361
  - lib
317
362
  required_ruby_version: !ruby/object:Gem::Requirement
363
+ none: false
318
364
  requirements:
319
365
  - - ! '>='
320
366
  - !ruby/object:Gem::Version
321
367
  version: '0'
322
- none: false
323
368
  required_rubygems_version: !ruby/object:Gem::Requirement
369
+ none: false
324
370
  requirements:
325
371
  - - ! '>='
326
372
  - !ruby/object:Gem::Version
327
373
  version: 1.3.6
328
- none: false
329
374
  requirements: []
330
375
  rubyforge_project:
331
376
  rubygems_version: 1.8.25
Binary file