twitter 5.3.0 → 5.3.1

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.
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,11 @@
1
+ 5.3.1
2
+ -----
3
+ * [Add `Twitter::Utils` module](https://github.com/sferik/twitter/commit/a1f47fbf19b859c8e680a0a92eff5e225a015090) ([@charliesome](https://twitter.com/charliesome))
4
+ * [Remove `Enumerable` monkey patch](https://github.com/sferik/twitter/commit/818b28d1621e843c0c6f9ef471076f4125623e52) ([@charliesome](https://twitter.com/charliesome))
5
+ * [Don't spawning a new thread if there's only one element](https://github.com/sferik/twitter/commit/c01ea8309c16eb77eeb368452df1dadd1e405532)
6
+ * [Introduce meaningful constant names](https://github.com/sferik/twitter/commit/215c80890d702535de83d8f849885a95ec153920) ([@futuresanta](https://twitter.com/futuresanta))
7
+ * [Automatically flatten `Twitter::Arguments`](https://github.com/sferik/twitter/commit/a556028ace04cb00c3c2b9cb8f72f792a86f04d6)
8
+
1
9
  5.3.0
2
10
  -----
3
11
  * [Add `UNABLE_TO_VERIFY_CREDENTIALS` error code](https://github.com/sferik/twitter/commit/6a47e715ef7935cd36a2f78ed877deb3c09af162)
data/README.md CHANGED
@@ -19,16 +19,6 @@ A Ruby interface to the Twitter API.
19
19
  ## Installation
20
20
  gem install twitter
21
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://raw.github.com/sferik/twitter/master/certs/sferik.pem)
27
-
28
- Then, install the gem with the medium security trust policy:
29
-
30
- gem install twitter -P MediumSecurity
31
-
32
22
  ## CLI
33
23
 
34
24
  Looking for the Twitter command-line interface? It was [removed][] from this
@@ -579,26 +569,27 @@ command:
579
569
  bundle exec rake erd
580
570
 
581
571
  ## Supported Ruby Versions
572
+
582
573
  This library aims to support and is [tested against][travis] the following Ruby
583
- implementations:
574
+ versions:
584
575
 
585
576
  * Ruby 1.8.7
586
577
  * Ruby 1.9.2
587
578
  * Ruby 1.9.3
588
579
  * Ruby 2.0.0
589
580
 
590
- If something doesn't work on one of these interpreters, it's a bug.
581
+ If something doesn't work on one of these versions, it's a bug.
591
582
 
592
- This library may inadvertently work (or seem to work) on other Ruby
593
- implementations, however support will only be provided for the versions listed
594
- above.
583
+ This library may inadvertently work (or seem to work) on other Ruby versions,
584
+ however support will only be provided for the versions listed above.
595
585
 
596
- If you would like this library to support another Ruby version, you may
597
- volunteer to be a maintainer. Being a maintainer entails making sure all tests
598
- run and pass on that implementation. When something breaks on your
599
- implementation, you will be responsible for providing patches in a timely
600
- fashion. If critical issues for a particular implementation exist at the time
601
- of a major release, support for that Ruby version may be dropped.
586
+ If you would like this library to support another Ruby version or
587
+ implementation, you may volunteer to be a maintainer. Being a maintainer
588
+ entails making sure all tests run and pass on that implementation. When
589
+ something breaks on your implementation, you will be responsible for providing
590
+ patches in a timely fashion. If critical issues for a particular implementation
591
+ exist at the time of a major release, support for that Ruby version may be
592
+ dropped.
602
593
 
603
594
  ## Versioning
604
595
  This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations
@@ -7,7 +7,7 @@ module Twitter
7
7
  # @return [Twitter::Arguments]
8
8
  def initialize(args)
9
9
  @options = args.last.is_a?(::Hash) ? args.pop : {}
10
- super(args)
10
+ super(args.flatten)
11
11
  end
12
12
  end
13
13
  end
@@ -1,5 +1,3 @@
1
- require 'twitter/core_ext/kernel'
2
-
3
1
  module Twitter
4
2
  class Cursor
5
3
  include Enumerable
@@ -2,6 +2,7 @@ require 'twitter/arguments'
2
2
  require 'twitter/direct_message'
3
3
  require 'twitter/rest/api/utils'
4
4
  require 'twitter/user'
5
+ require 'twitter/utils'
5
6
 
6
7
  module Twitter
7
8
  module REST
@@ -88,7 +89,7 @@ module Twitter
88
89
  if arguments.empty?
89
90
  direct_messages_received(arguments.options)
90
91
  else
91
- arguments.flatten.threaded_map do |id|
92
+ Twitter::Utils.parallel_map(arguments) do |id|
92
93
  direct_message(id, arguments.options)
93
94
  end
94
95
  end
@@ -4,6 +4,7 @@ require 'twitter/error/forbidden'
4
4
  require 'twitter/rest/api/utils'
5
5
  require 'twitter/tweet'
6
6
  require 'twitter/user'
7
+ require 'twitter/utils'
7
8
 
8
9
  module Twitter
9
10
  module REST
@@ -67,7 +68,7 @@ module Twitter
67
68
  # @param options [Hash] A customizable set of options.
68
69
  def favorite(*args)
69
70
  arguments = Twitter::Arguments.new(args)
70
- arguments.flatten.threaded_map do |tweet|
71
+ Twitter::Utils.parallel_map(arguments) do |tweet|
71
72
  id = extract_id(tweet)
72
73
  begin
73
74
  object_from_response(Twitter::Tweet, :post, '/1.1/favorites/create.json', arguments.options.merge(:id => id))
@@ -95,7 +96,7 @@ module Twitter
95
96
  # @param options [Hash] A customizable set of options.
96
97
  def favorite!(*args)
97
98
  arguments = Twitter::Arguments.new(args)
98
- arguments.flatten.threaded_map do |tweet|
99
+ Twitter::Utils.parallel_map(arguments) do |tweet|
99
100
  id = extract_id(tweet)
100
101
  begin
101
102
  object_from_response(Twitter::Tweet, :post, '/1.1/favorites/create.json', arguments.options.merge(:id => id))
@@ -4,6 +4,7 @@ require 'twitter/error/forbidden'
4
4
  require 'twitter/relationship'
5
5
  require 'twitter/rest/api/utils'
6
6
  require 'twitter/user'
7
+ require 'twitter/utils'
7
8
 
8
9
  module Twitter
9
10
  module REST
@@ -136,7 +137,7 @@ module Twitter
136
137
  # @option options [Boolean] :follow (false) Enable notifications for the target user.
137
138
  def follow!(*args)
138
139
  arguments = Twitter::Arguments.new(args)
139
- arguments.flatten.threaded_map do |user|
140
+ Twitter::Utils.parallel_map(arguments) do |user|
140
141
  object_from_response(Twitter::User, :post, '/1.1/friendships/create.json', merge_user(arguments.options, user))
141
142
  end.compact
142
143
  end
@@ -1,5 +1,4 @@
1
1
  require 'twitter/arguments'
2
- require 'twitter/core_ext/enumerable'
3
2
  require 'twitter/cursor'
4
3
  require 'twitter/error/forbidden'
5
4
  require 'twitter/error/not_found'
@@ -7,6 +6,7 @@ require 'twitter/list'
7
6
  require 'twitter/rest/api/utils'
8
7
  require 'twitter/tweet'
9
8
  require 'twitter/user'
9
+ require 'twitter/utils'
10
10
 
11
11
  module Twitter
12
12
  module REST
@@ -441,12 +441,13 @@ module Twitter
441
441
  end
442
442
 
443
443
  def list_from_response_with_users(request_method, path, args)
444
- arguments = Twitter::Arguments.new(args)
444
+ arguments = args.dup
445
+ options = arguments.last.is_a?(::Hash) ? arguments.pop : {}
445
446
  members = arguments.pop
446
- merge_list!(arguments.options, arguments.pop)
447
- merge_owner!(arguments.options, arguments.pop)
448
- members.flatten.each_slice(MAX_USERS_PER_REQUEST).threaded_map do |users|
449
- object_from_response(Twitter::List, request_method, path, merge_users(arguments.options, users))
447
+ merge_list!(options, arguments.pop)
448
+ merge_owner!(options, arguments.pop)
449
+ Twitter::Utils.parallel_map(members.flatten.each_slice(MAX_USERS_PER_REQUEST)) do |users|
450
+ object_from_response(Twitter::List, request_method, path, merge_users(options, users))
450
451
  end.last
451
452
  end
452
453
 
@@ -1,6 +1,7 @@
1
1
  require 'twitter/arguments'
2
2
  require 'twitter/rest/api/utils'
3
3
  require 'twitter/saved_search'
4
+ require 'twitter/utils'
4
5
 
5
6
  module Twitter
6
7
  module REST
@@ -33,7 +34,7 @@ module Twitter
33
34
  if arguments.empty?
34
35
  objects_from_response(Twitter::SavedSearch, :get, '/1.1/saved_searches/list.json', arguments.options)
35
36
  else
36
- arguments.flatten.threaded_map do |id|
37
+ Twitter::Utils.parallel_map(arguments) do |id|
37
38
  saved_search(id, arguments.options)
38
39
  end
39
40
  end
@@ -81,7 +82,7 @@ module Twitter
81
82
  # @param options [Hash] A customizable set of options.
82
83
  def destroy_saved_search(*args)
83
84
  arguments = Twitter::Arguments.new(args)
84
- arguments.flatten.threaded_map do |id|
85
+ Twitter::Utils.parallel_map(arguments) do |id|
85
86
  object_from_response(Twitter::SavedSearch, :post, "/1.1/saved_searches/destroy/#{id}.json", arguments.options)
86
87
  end
87
88
  end
@@ -5,6 +5,7 @@ require 'twitter/error/forbidden'
5
5
  require 'twitter/oembed'
6
6
  require 'twitter/rest/api/utils'
7
7
  require 'twitter/tweet'
8
+ require 'twitter/utils'
8
9
 
9
10
  module Twitter
10
11
  module REST
@@ -142,7 +143,7 @@ module Twitter
142
143
  # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1.
143
144
  def retweet(*args)
144
145
  arguments = Twitter::Arguments.new(args)
145
- arguments.flatten.threaded_map do |tweet|
146
+ Twitter::Utils.parallel_map(arguments) do |tweet|
146
147
  id = extract_id(tweet)
147
148
  begin
148
149
  post_retweet(id, arguments.options)
@@ -168,7 +169,7 @@ module Twitter
168
169
  # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1.
169
170
  def retweet!(*args)
170
171
  arguments = Twitter::Arguments.new(args)
171
- arguments.flatten.threaded_map do |tweet|
172
+ Twitter::Utils.parallel_map(arguments) do |tweet|
172
173
  id = extract_id(tweet)
173
174
  begin
174
175
  post_retweet(id, arguments.options)
@@ -249,7 +250,7 @@ module Twitter
249
250
  # @option options [String] :lang Language code for the rendered embed. This will affect the text and localization of the rendered HTML.
250
251
  def oembeds(*args)
251
252
  arguments = Twitter::Arguments.new(args)
252
- arguments.flatten.threaded_map do |tweet|
253
+ Twitter::Utils.parallel_map(arguments) do |tweet|
253
254
  id = extract_id(tweet)
254
255
  oembed(id, arguments.options)
255
256
  end
@@ -281,7 +282,7 @@ module Twitter
281
282
  # @return [Array<Twitter::Tweet>]
282
283
  def threaded_tweets_from_response(request_method, path, args)
283
284
  arguments = Twitter::Arguments.new(args)
284
- arguments.flatten.threaded_map do |tweet|
285
+ Twitter::Utils.parallel_map(arguments) do |tweet|
285
286
  id = extract_id(tweet)
286
287
  object_from_response(Twitter::Tweet, request_method, path + "/#{id}.json", arguments.options)
287
288
  end
@@ -1,10 +1,10 @@
1
1
  require 'twitter/arguments'
2
- require 'twitter/core_ext/enumerable'
3
2
  require 'twitter/error/not_found'
4
3
  require 'twitter/profile_banner'
5
4
  require 'twitter/rest/api/utils'
6
5
  require 'twitter/settings'
7
6
  require 'twitter/user'
7
+ require 'twitter/utils'
8
8
 
9
9
  module Twitter
10
10
  module REST
@@ -227,7 +227,7 @@ module Twitter
227
227
  def users(*args)
228
228
  arguments = Twitter::Arguments.new(args)
229
229
  method = arguments.options.delete(:method) || :post
230
- arguments.flatten.each_slice(MAX_USERS_PER_REQUEST).threaded_map do |users|
230
+ Twitter::Utils.parallel_map(arguments.each_slice(MAX_USERS_PER_REQUEST)) do |users|
231
231
  objects_from_response(Twitter::User, method, '/1.1/users/lookup.json', merge_users(arguments.options, users))
232
232
  end.flatten
233
233
  end
@@ -2,6 +2,7 @@ require 'addressable/uri'
2
2
  require 'twitter/arguments'
3
3
  require 'twitter/cursor'
4
4
  require 'twitter/user'
5
+ require 'twitter/utils'
5
6
 
6
7
  module Twitter
7
8
  module REST
@@ -50,7 +51,7 @@ module Twitter
50
51
  # @return [Array<Twitter::User>]
51
52
  def threaded_user_objects_from_response(request_method, path, args)
52
53
  arguments = Twitter::Arguments.new(args)
53
- arguments.flatten.threaded_map do |user|
54
+ Twitter::Utils.parallel_map(arguments) do |user|
54
55
  object_from_response(Twitter::User, request_method, path, merge_user(arguments.options, user))
55
56
  end
56
57
  end
@@ -102,7 +103,7 @@ module Twitter
102
103
  # @return [Array]
103
104
  def threaded_objects_from_response(klass, request_method, path, args) # rubocop:disable ParameterLists
104
105
  arguments = Twitter::Arguments.new(args)
105
- arguments.flatten.threaded_map do |object|
106
+ Twitter::Utils.parallel_map(arguments) do |object|
106
107
  id = extract_id(object)
107
108
  object_from_response(klass, request_method, path, arguments.options.merge(:id => id))
108
109
  end
@@ -5,6 +5,9 @@ module Twitter
5
5
  module Request
6
6
  class MultipartWithFile < Faraday::Middleware
7
7
  CONTENT_TYPE = 'Content-Type'
8
+ GIF_REGEX = /\.gif$/i
9
+ JPEG_REGEX = /\.jpe?g/i
10
+ PNG_REGEX = /\.png$/i
8
11
 
9
12
  def call(env)
10
13
  env[:body].each do |key, value|
@@ -19,11 +22,11 @@ module Twitter
19
22
 
20
23
  def mime_type(path)
21
24
  case path
22
- when /\.jpe?g/i
23
- 'image/jpeg'
24
- when /\.gif$/i
25
+ when GIF_REGEX
25
26
  'image/gif'
26
- when /\.png$/i
27
+ when JPEG_REGEX
28
+ 'image/jpeg'
29
+ when PNG_REGEX
27
30
  'image/png'
28
31
  else
29
32
  'application/octet-stream'
@@ -5,9 +5,11 @@ module Twitter
5
5
  module REST
6
6
  module Response
7
7
  class ParseJson < Faraday::Response::Middleware
8
+ WHITESPACE_REGEX = /\A^\s*$\z/
9
+
8
10
  def parse(body)
9
11
  case body
10
- when /\A^\s*$\z/, nil
12
+ when WHITESPACE_REGEX, nil
11
13
  nil
12
14
  else
13
15
  JSON.parse(body, :symbolize_names => true)
@@ -129,8 +129,6 @@ module Twitter
129
129
  case user
130
130
  when Integer
131
131
  user_ids << user
132
- when String
133
- user_ids << user.to_i
134
132
  when Twitter::User
135
133
  user_ids << user.id
136
134
  end
@@ -0,0 +1,14 @@
1
+ module Twitter
2
+ module Utils
3
+ class << self
4
+ def parallel_map(enumerable)
5
+ # Don't bother spawning a new thread if there's only one item
6
+ if enumerable.count == 1
7
+ enumerable.map { |object| yield object }
8
+ else
9
+ enumerable.map { |object| Thread.new { yield object } }.map(&:value)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -2,7 +2,7 @@ module Twitter
2
2
  class Version
3
3
  MAJOR = 5
4
4
  MINOR = 3
5
- PATCH = 0
5
+ PATCH = 1
6
6
  PRE = nil
7
7
 
8
8
  class << self
@@ -8,7 +8,7 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
8
8
 
9
9
  SimpleCov.start do
10
10
  add_filter '/spec/'
11
- minimum_coverage(99.13)
11
+ minimum_coverage(99.35)
12
12
  end
13
13
 
14
14
  require 'twitter'
@@ -10,16 +10,21 @@ describe Twitter::REST::API::SavedSearches do
10
10
  context 'with ids passed' do
11
11
  before do
12
12
  stub_get('/1.1/saved_searches/show/16129012.json').to_return(:body => fixture('saved_search.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
13
+ stub_get('/1.1/saved_searches/show/16129013.json').to_return(:body => fixture('saved_search.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
13
14
  end
14
15
  it 'requests the correct resource' do
15
- @client.saved_searches(16_129_012)
16
+ @client.saved_searches(16_129_012, 16_129_013)
16
17
  expect(a_get('/1.1/saved_searches/show/16129012.json')).to have_been_made
18
+ expect(a_get('/1.1/saved_searches/show/16129013.json')).to have_been_made
17
19
  end
18
20
  it 'returns an array of saved searches' do
19
- saved_searches = @client.saved_searches(16_129_012)
21
+ saved_searches = @client.saved_searches(16_129_012, 16_129_013)
20
22
  expect(saved_searches).to be_an Array
23
+ expect(saved_searches.size).to eq(2)
21
24
  expect(saved_searches.first).to be_a Twitter::SavedSearch
22
25
  expect(saved_searches.first.name).to eq('twitter')
26
+ expect(saved_searches.last).to be_a Twitter::SavedSearch
27
+ expect(saved_searches.last.name).to eq('twitter')
23
28
  end
24
29
  end
25
30
  context 'without ids passed' do
@@ -72,16 +77,21 @@ describe Twitter::REST::API::SavedSearches do
72
77
  describe '#destroy_saved_search' do
73
78
  before do
74
79
  stub_post('/1.1/saved_searches/destroy/16129012.json').to_return(:body => fixture('saved_search.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
80
+ stub_post('/1.1/saved_searches/destroy/16129013.json').to_return(:body => fixture('saved_search.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
75
81
  end
76
82
  it 'requests the correct resource' do
77
- @client.destroy_saved_search(16_129_012)
83
+ @client.destroy_saved_search(16_129_012, 16_129_013)
78
84
  expect(a_post('/1.1/saved_searches/destroy/16129012.json')).to have_been_made
85
+ expect(a_post('/1.1/saved_searches/destroy/16129013.json')).to have_been_made
79
86
  end
80
87
  it 'returns an array of deleted saved searches' do
81
- saved_searches = @client.destroy_saved_search(16_129_012)
88
+ saved_searches = @client.destroy_saved_search(16_129_012, 16_129_013)
82
89
  expect(saved_searches).to be_an Array
90
+ expect(saved_searches.size).to eq(2)
83
91
  expect(saved_searches.first).to be_a Twitter::SavedSearch
84
92
  expect(saved_searches.first.name).to eq('twitter')
93
+ expect(saved_searches.last).to be_a Twitter::SavedSearch
94
+ expect(saved_searches.last.name).to eq('twitter')
85
95
  end
86
96
  end
87
97
 
@@ -17,80 +17,107 @@ describe Twitter::Streaming::Client do
17
17
  end
18
18
  end
19
19
 
20
- it '#before_request' do
21
- @client.connection = FakeConnection.new(fixture('track_streaming.json'))
22
- var = false
23
- @client.before_request do
24
- var = true
20
+ describe '#before_request' do
21
+ it 'runs before a request' do
22
+ @client.connection = FakeConnection.new(fixture('track_streaming.json'))
23
+ var = false
24
+ @client.before_request do
25
+ var = true
26
+ end
27
+ expect(var).to be false
28
+ @client.user {}
29
+ expect(var).to be true
25
30
  end
26
- expect(var).to be false
27
- @client.user {}
28
- expect(var).to be true
29
31
  end
30
32
 
31
- it '#filter' do
32
- @client.connection = FakeConnection.new(fixture('track_streaming.json'))
33
- objects = []
34
- @client.filter(:track => 'india') do |object|
35
- objects << object
33
+ describe '#filter' do
34
+ it 'returns an arary of Tweets' do
35
+ @client.connection = FakeConnection.new(fixture('track_streaming.json'))
36
+ objects = []
37
+ @client.filter(:track => 'india') do |object|
38
+ objects << object
39
+ end
40
+ expect(objects.size).to eq(2)
41
+ expect(objects.first).to be_a Twitter::Tweet
42
+ expect(objects.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
36
43
  end
37
- expect(objects.size).to eq(2)
38
- expect(objects.first).to be_a Twitter::Tweet
39
- expect(objects.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
40
44
  end
41
45
 
42
- it '#firehose' do
43
- @client.connection = FakeConnection.new(fixture('track_streaming.json'))
44
- objects = []
45
- @client.firehose do |object|
46
- objects << object
46
+ describe '#firehose' do
47
+ it 'returns an arary of Tweets' do
48
+ @client.connection = FakeConnection.new(fixture('track_streaming.json'))
49
+ objects = []
50
+ @client.firehose do |object|
51
+ objects << object
52
+ end
53
+ expect(objects.size).to eq(2)
54
+ expect(objects.first).to be_a Twitter::Tweet
55
+ expect(objects.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
47
56
  end
48
- expect(objects.size).to eq(2)
49
- expect(objects.first).to be_a Twitter::Tweet
50
- expect(objects.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
51
57
  end
52
58
 
53
- it '#sample' do
54
- @client.connection = FakeConnection.new(fixture('track_streaming.json'))
55
- objects = []
56
- @client.sample do |object|
57
- objects << object
59
+ describe '#sample' do
60
+ it 'returns an arary of Tweets' do
61
+ @client.connection = FakeConnection.new(fixture('track_streaming.json'))
62
+ objects = []
63
+ @client.sample do |object|
64
+ objects << object
65
+ end
66
+ expect(objects.size).to eq(2)
67
+ expect(objects.first).to be_a Twitter::Tweet
68
+ expect(objects.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
58
69
  end
59
- expect(objects.size).to eq(2)
60
- expect(objects.first).to be_a Twitter::Tweet
61
- expect(objects.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
62
70
  end
63
71
 
64
- it '#site' do
65
- @client.connection = FakeConnection.new(fixture('track_streaming.json'))
66
- objects = []
67
- @client.site(7_505_382) do |object|
68
- objects << object
72
+ describe '#site' do
73
+ context 'with a user ID passed' do
74
+ it 'returns an arary of Tweets' do
75
+ @client.connection = FakeConnection.new(fixture('track_streaming.json'))
76
+ objects = []
77
+ @client.site(7_505_382) do |object|
78
+ objects << object
79
+ end
80
+ expect(objects.size).to eq(2)
81
+ expect(objects.first).to be_a Twitter::Tweet
82
+ expect(objects.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
83
+ end
84
+ end
85
+ context 'with a user object passed' do
86
+ it 'returns an arary of Tweets' do
87
+ @client.connection = FakeConnection.new(fixture('track_streaming.json'))
88
+ objects = []
89
+ user = Twitter::User.new(:id => 7_505_382)
90
+ @client.site(user) do |object|
91
+ objects << object
92
+ end
93
+ expect(objects.size).to eq(2)
94
+ expect(objects.first).to be_a Twitter::Tweet
95
+ expect(objects.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
96
+ end
69
97
  end
70
- expect(objects.size).to eq(2)
71
- expect(objects.first).to be_a Twitter::Tweet
72
- expect(objects.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
73
98
  end
74
99
 
75
- it '#user' do
76
- @client.connection = FakeConnection.new(fixture('track_streaming_user.json'))
77
- objects = []
78
- @client.user do |object|
79
- objects << object
100
+ describe '#user' do
101
+ it 'returns an arary of Tweets' do
102
+ @client.connection = FakeConnection.new(fixture('track_streaming_user.json'))
103
+ objects = []
104
+ @client.user do |object|
105
+ objects << object
106
+ end
107
+ expect(objects.size).to eq(6)
108
+ expect(objects[0]).to be_a Twitter::Streaming::FriendList
109
+ expect(objects[0]).to eq([488_736_931, 311_444_249])
110
+ expect(objects[1]).to be_a Twitter::Tweet
111
+ expect(objects[1].text).to eq("The problem with your code is that it's doing exactly what you told it to do.")
112
+ expect(objects[2]).to be_a Twitter::DirectMessage
113
+ expect(objects[2].text).to eq('hello bot')
114
+ expect(objects[3]).to be_a Twitter::Streaming::Event
115
+ expect(objects[3].name).to eq(:follow)
116
+ expect(objects[4]).to be_a Twitter::Streaming::DeletedTweet
117
+ expect(objects[4].id).to eq(272_691_609_211_117_568)
118
+ expect(objects[5]).to be_a Twitter::Streaming::StallWarning
119
+ expect(objects[5].code).to eq('FALLING_BEHIND')
80
120
  end
81
- expect(objects.size).to eq(6)
82
- expect(objects[0]).to be_a Twitter::Streaming::FriendList
83
- expect(objects[0]).to eq([488_736_931, 311_444_249])
84
- expect(objects[1]).to be_a Twitter::Tweet
85
- expect(objects[1].text).to eq("The problem with your code is that it's doing exactly what you told it to do.")
86
- expect(objects[2]).to be_a Twitter::DirectMessage
87
- expect(objects[2].text).to eq('hello bot')
88
- expect(objects[3]).to be_a Twitter::Streaming::Event
89
- expect(objects[3].name).to eq(:follow)
90
- expect(objects[4]).to be_a Twitter::Streaming::DeletedTweet
91
- expect(objects[4].id).to eq(272_691_609_211_117_568)
92
- expect(objects[5]).to be_a Twitter::Streaming::StallWarning
93
- expect(objects[5].code).to eq('FALLING_BEHIND')
94
121
  end
95
122
 
96
123
  end
@@ -6,12 +6,12 @@ Gem::Specification.new do |spec|
6
6
  spec.add_dependency 'addressable', '~> 2.3'
7
7
  spec.add_dependency 'buftok', '~> 0.2.0'
8
8
  spec.add_dependency 'descendants_tracker', '~> 0.0.1'
9
- spec.add_dependency 'equalizer', ['~> 0.0.7', '!= 0.0.8']
9
+ spec.add_dependency 'equalizer', '~> 0.0.9'
10
10
  spec.add_dependency 'faraday', ['>= 0.8', '< 0.10']
11
11
  spec.add_dependency 'http', '~> 0.5.0'
12
12
  spec.add_dependency 'http_parser.rb', '~> 0.6.0'
13
13
  spec.add_dependency 'json', '~> 1.8'
14
- spec.add_dependency 'memoizable', '~> 0.3.1'
14
+ spec.add_dependency 'memoizable', '~> 0.4.0'
15
15
  spec.add_dependency 'simple_oauth', '~> 0.2.0'
16
16
  spec.add_development_dependency 'bundler', '~> 1.0'
17
17
  spec.authors = ["Erik Michaels-Ober", "John Nunemaker", "Wynn Netherland", "Steve Richert", "Steve Agalloco"]
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.0
4
+ version: 5.3.1
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Erik Michaels-Ober
@@ -9,198 +10,220 @@ authors:
9
10
  - Wynn Netherland
10
11
  - Steve Richert
11
12
  - Steve Agalloco
12
- autorequire:
13
+ autorequire:
13
14
  bindir: bin
14
15
  cert_chain:
15
- - |
16
- -----BEGIN CERTIFICATE-----
17
- MIIDLjCCAhagAwIBAgIBADANBgkqhkiG9w0BAQUFADA9MQ8wDQYDVQQDDAZzZmVy
18
- aWsxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2NvbTAe
19
- Fw0xMzAyMDMxMDAyMjdaFw0xNDAyMDMxMDAyMjdaMD0xDzANBgNVBAMMBnNmZXJp
20
- azEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29tMIIB
21
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl0x5dx8uKxi7TkrIuyBUTJVB
22
- v1o93nUB9j/y4M96gV2rYwAci1JPBseNd6Fybzjo3YGuHl7EQHuSHNaf1p2lxew/
23
- y60JXIJBBgPcDK/KCP4NUHofm0jfoYD+H5uNJfHCNq7/ZsTxOtE3Ra92s0BCMTpm
24
- wBMMlWR5MtdEhIYuBO4XhnejYgH0L/7BL2lymntVnsr/agdQoojQCN1IQmsRJvrR
25
- duZRO3tZvoIo1pBc4JEehDuqCeyBgPLOqMoKtQlold1TQs1kWUBK7KWMFEhKC/Kg
26
- zyzKRHQo9yDYwOvYngoBLY+T/lwCT4dyssdhzRbfnxAhaKu4SAssIwaC01yVowID
27
- AQABozkwNzAJBgNVHRMEAjAAMB0GA1UdDgQWBBS0ruDfRak5ci1OpDNX/ZdDEkIs
28
- iTALBgNVHQ8EBAMCBLAwDQYJKoZIhvcNAQEFBQADggEBAHHSMs/MP0sOaLkEv4Jo
29
- zvkm3qn5A6t0vaHx774cmejyMU+5wySxRezspL7ULh9NeuK2OhU+Oe3TpqrAg5TK
30
- R8GQILnVu2FemGA6sAkPDlcPtgA6ieI19PZOF6HVLmc/ID/dP/NgZWWzEeqQKmcK
31
- 2+HM+SEEDhZkScYekw4ZOe164ZtZG816oAv5x0pGitSIkumUp7V8iEZ/6ehr7Y9e
32
- XOg4eeun5L/JjmjARoW2kNdvkRD3c2EeSLqWvQRsBlypHfhs6JJuLlyZPGhU3R/v
33
- Sf3lVKpBCWgRpGTvy45XVpB+59y33PJmEuQ1PTEOYvQyao9UKMAAaAN/7qWQtjl0
34
- hlw=
35
- -----END CERTIFICATE-----
36
- date: 2013-12-18 00:00:00.000000000 Z
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-12-24 00:00:00.000000000 Z
37
44
  dependencies:
38
45
  - !ruby/object:Gem::Dependency
39
46
  name: addressable
40
- version_requirements: !ruby/object:Gem::Requirement
47
+ requirement: !ruby/object:Gem::Requirement
48
+ none: false
41
49
  requirements:
42
50
  - - ~>
43
51
  - !ruby/object:Gem::Version
44
52
  version: '2.3'
45
- requirement: !ruby/object:Gem::Requirement
53
+ type: :runtime
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ none: false
46
57
  requirements:
47
58
  - - ~>
48
59
  - !ruby/object:Gem::Version
49
60
  version: '2.3'
50
- prerelease: false
51
- type: :runtime
52
61
  - !ruby/object:Gem::Dependency
53
62
  name: buftok
54
- version_requirements: !ruby/object:Gem::Requirement
63
+ requirement: !ruby/object:Gem::Requirement
64
+ none: false
55
65
  requirements:
56
66
  - - ~>
57
67
  - !ruby/object:Gem::Version
58
68
  version: 0.2.0
59
- requirement: !ruby/object:Gem::Requirement
69
+ type: :runtime
70
+ prerelease: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ none: false
60
73
  requirements:
61
74
  - - ~>
62
75
  - !ruby/object:Gem::Version
63
76
  version: 0.2.0
64
- prerelease: false
65
- type: :runtime
66
77
  - !ruby/object:Gem::Dependency
67
78
  name: descendants_tracker
68
- version_requirements: !ruby/object:Gem::Requirement
79
+ requirement: !ruby/object:Gem::Requirement
80
+ none: false
69
81
  requirements:
70
82
  - - ~>
71
83
  - !ruby/object:Gem::Version
72
84
  version: 0.0.1
73
- requirement: !ruby/object:Gem::Requirement
85
+ type: :runtime
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ none: false
74
89
  requirements:
75
90
  - - ~>
76
91
  - !ruby/object:Gem::Version
77
92
  version: 0.0.1
78
- prerelease: false
79
- type: :runtime
80
93
  - !ruby/object:Gem::Dependency
81
94
  name: equalizer
82
- version_requirements: !ruby/object:Gem::Requirement
95
+ requirement: !ruby/object:Gem::Requirement
96
+ none: false
83
97
  requirements:
84
98
  - - ~>
85
99
  - !ruby/object:Gem::Version
86
- version: 0.0.7
87
- - - '!='
88
- - !ruby/object:Gem::Version
89
- version: 0.0.8
90
- requirement: !ruby/object:Gem::Requirement
100
+ version: 0.0.9
101
+ type: :runtime
102
+ prerelease: false
103
+ version_requirements: !ruby/object:Gem::Requirement
104
+ none: false
91
105
  requirements:
92
106
  - - ~>
93
107
  - !ruby/object:Gem::Version
94
- version: 0.0.7
95
- - - '!='
96
- - !ruby/object:Gem::Version
97
- version: 0.0.8
98
- prerelease: false
99
- type: :runtime
108
+ version: 0.0.9
100
109
  - !ruby/object:Gem::Dependency
101
110
  name: faraday
102
- version_requirements: !ruby/object:Gem::Requirement
111
+ requirement: !ruby/object:Gem::Requirement
112
+ none: false
103
113
  requirements:
104
- - - '>='
114
+ - - ! '>='
105
115
  - !ruby/object:Gem::Version
106
116
  version: '0.8'
107
117
  - - <
108
118
  - !ruby/object:Gem::Version
109
119
  version: '0.10'
110
- requirement: !ruby/object:Gem::Requirement
120
+ type: :runtime
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ none: false
111
124
  requirements:
112
- - - '>='
125
+ - - ! '>='
113
126
  - !ruby/object:Gem::Version
114
127
  version: '0.8'
115
128
  - - <
116
129
  - !ruby/object:Gem::Version
117
130
  version: '0.10'
118
- prerelease: false
119
- type: :runtime
120
131
  - !ruby/object:Gem::Dependency
121
132
  name: http
122
- version_requirements: !ruby/object:Gem::Requirement
133
+ requirement: !ruby/object:Gem::Requirement
134
+ none: false
123
135
  requirements:
124
136
  - - ~>
125
137
  - !ruby/object:Gem::Version
126
138
  version: 0.5.0
127
- requirement: !ruby/object:Gem::Requirement
139
+ type: :runtime
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ none: false
128
143
  requirements:
129
144
  - - ~>
130
145
  - !ruby/object:Gem::Version
131
146
  version: 0.5.0
132
- prerelease: false
133
- type: :runtime
134
147
  - !ruby/object:Gem::Dependency
135
148
  name: http_parser.rb
136
- version_requirements: !ruby/object:Gem::Requirement
149
+ requirement: !ruby/object:Gem::Requirement
150
+ none: false
137
151
  requirements:
138
152
  - - ~>
139
153
  - !ruby/object:Gem::Version
140
154
  version: 0.6.0
141
- requirement: !ruby/object:Gem::Requirement
155
+ type: :runtime
156
+ prerelease: false
157
+ version_requirements: !ruby/object:Gem::Requirement
158
+ none: false
142
159
  requirements:
143
160
  - - ~>
144
161
  - !ruby/object:Gem::Version
145
162
  version: 0.6.0
146
- prerelease: false
147
- type: :runtime
148
163
  - !ruby/object:Gem::Dependency
149
164
  name: json
150
- version_requirements: !ruby/object:Gem::Requirement
165
+ requirement: !ruby/object:Gem::Requirement
166
+ none: false
151
167
  requirements:
152
168
  - - ~>
153
169
  - !ruby/object:Gem::Version
154
170
  version: '1.8'
155
- requirement: !ruby/object:Gem::Requirement
171
+ type: :runtime
172
+ prerelease: false
173
+ version_requirements: !ruby/object:Gem::Requirement
174
+ none: false
156
175
  requirements:
157
176
  - - ~>
158
177
  - !ruby/object:Gem::Version
159
178
  version: '1.8'
160
- prerelease: false
161
- type: :runtime
162
179
  - !ruby/object:Gem::Dependency
163
180
  name: memoizable
164
- version_requirements: !ruby/object:Gem::Requirement
181
+ requirement: !ruby/object:Gem::Requirement
182
+ none: false
165
183
  requirements:
166
184
  - - ~>
167
185
  - !ruby/object:Gem::Version
168
- version: 0.3.1
169
- requirement: !ruby/object:Gem::Requirement
186
+ version: 0.4.0
187
+ type: :runtime
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ none: false
170
191
  requirements:
171
192
  - - ~>
172
193
  - !ruby/object:Gem::Version
173
- version: 0.3.1
174
- prerelease: false
175
- type: :runtime
194
+ version: 0.4.0
176
195
  - !ruby/object:Gem::Dependency
177
196
  name: simple_oauth
178
- version_requirements: !ruby/object:Gem::Requirement
197
+ requirement: !ruby/object:Gem::Requirement
198
+ none: false
179
199
  requirements:
180
200
  - - ~>
181
201
  - !ruby/object:Gem::Version
182
202
  version: 0.2.0
183
- requirement: !ruby/object:Gem::Requirement
203
+ type: :runtime
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ none: false
184
207
  requirements:
185
208
  - - ~>
186
209
  - !ruby/object:Gem::Version
187
210
  version: 0.2.0
188
- prerelease: false
189
- type: :runtime
190
211
  - !ruby/object:Gem::Dependency
191
212
  name: bundler
192
- version_requirements: !ruby/object:Gem::Requirement
213
+ requirement: !ruby/object:Gem::Requirement
214
+ none: false
193
215
  requirements:
194
216
  - - ~>
195
217
  - !ruby/object:Gem::Version
196
218
  version: '1.0'
197
- requirement: !ruby/object:Gem::Requirement
219
+ type: :development
220
+ prerelease: false
221
+ version_requirements: !ruby/object:Gem::Requirement
222
+ none: false
198
223
  requirements:
199
224
  - - ~>
200
225
  - !ruby/object:Gem::Version
201
226
  version: '1.0'
202
- prerelease: false
203
- type: :development
204
227
  description: A Ruby interface to the Twitter API.
205
228
  email:
206
229
  - sferik@gmail.com
@@ -215,7 +238,6 @@ files:
215
238
  - README.md
216
239
  - Rakefile
217
240
  - twitter.gemspec
218
- - lib/twitter.rb
219
241
  - lib/twitter/arguments.rb
220
242
  - lib/twitter/base.rb
221
243
  - lib/twitter/basic_user.rb
@@ -224,43 +246,12 @@ files:
224
246
  - lib/twitter/creatable.rb
225
247
  - lib/twitter/cursor.rb
226
248
  - lib/twitter/direct_message.rb
227
- - lib/twitter/entity.rb
228
- - lib/twitter/enumerable.rb
229
- - lib/twitter/error.rb
230
- - lib/twitter/factory.rb
231
- - lib/twitter/geo.rb
232
- - lib/twitter/geo_factory.rb
233
- - lib/twitter/geo_results.rb
234
- - lib/twitter/identity.rb
235
- - lib/twitter/language.rb
236
- - lib/twitter/list.rb
237
- - lib/twitter/media_factory.rb
238
- - lib/twitter/metadata.rb
239
- - lib/twitter/null_object.rb
240
- - lib/twitter/oembed.rb
241
- - lib/twitter/place.rb
242
- - lib/twitter/profile_banner.rb
243
- - lib/twitter/rate_limit.rb
244
- - lib/twitter/relationship.rb
245
- - lib/twitter/saved_search.rb
246
- - lib/twitter/search_results.rb
247
- - lib/twitter/settings.rb
248
- - lib/twitter/size.rb
249
- - lib/twitter/source_user.rb
250
- - lib/twitter/suggestion.rb
251
- - lib/twitter/target_user.rb
252
- - lib/twitter/token.rb
253
- - lib/twitter/trend.rb
254
- - lib/twitter/trend_results.rb
255
- - lib/twitter/tweet.rb
256
- - lib/twitter/user.rb
257
- - lib/twitter/version.rb
258
- - lib/twitter/core_ext/enumerable.rb
259
- - lib/twitter/core_ext/kernel.rb
260
249
  - lib/twitter/entity/hashtag.rb
261
250
  - lib/twitter/entity/symbol.rb
262
251
  - lib/twitter/entity/uri.rb
263
252
  - lib/twitter/entity/user_mention.rb
253
+ - lib/twitter/entity.rb
254
+ - lib/twitter/enumerable.rb
264
255
  - lib/twitter/error/already_favorited.rb
265
256
  - lib/twitter/error/already_posted.rb
266
257
  - lib/twitter/error/already_retweeted.rb
@@ -276,10 +267,25 @@ files:
276
267
  - lib/twitter/error/too_many_requests.rb
277
268
  - lib/twitter/error/unauthorized.rb
278
269
  - lib/twitter/error/unprocessable_entity.rb
270
+ - lib/twitter/error.rb
271
+ - lib/twitter/factory.rb
279
272
  - lib/twitter/geo/point.rb
280
273
  - lib/twitter/geo/polygon.rb
274
+ - lib/twitter/geo.rb
275
+ - lib/twitter/geo_factory.rb
276
+ - lib/twitter/geo_results.rb
277
+ - lib/twitter/identity.rb
278
+ - lib/twitter/language.rb
279
+ - lib/twitter/list.rb
281
280
  - lib/twitter/media/photo.rb
282
- - lib/twitter/rest/client.rb
281
+ - lib/twitter/media_factory.rb
282
+ - lib/twitter/metadata.rb
283
+ - lib/twitter/null_object.rb
284
+ - lib/twitter/oembed.rb
285
+ - lib/twitter/place.rb
286
+ - lib/twitter/profile_banner.rb
287
+ - lib/twitter/rate_limit.rb
288
+ - lib/twitter/relationship.rb
283
289
  - lib/twitter/rest/api/direct_messages.rb
284
290
  - lib/twitter/rest/api/favorites.rb
285
291
  - lib/twitter/rest/api/friends_and_followers.rb
@@ -297,10 +303,16 @@ files:
297
303
  - lib/twitter/rest/api/undocumented.rb
298
304
  - lib/twitter/rest/api/users.rb
299
305
  - lib/twitter/rest/api/utils.rb
306
+ - lib/twitter/rest/client.rb
300
307
  - lib/twitter/rest/request/multipart_with_file.rb
301
308
  - lib/twitter/rest/response/parse_error_json.rb
302
309
  - lib/twitter/rest/response/parse_json.rb
303
310
  - lib/twitter/rest/response/raise_error.rb
311
+ - lib/twitter/saved_search.rb
312
+ - lib/twitter/search_results.rb
313
+ - lib/twitter/settings.rb
314
+ - lib/twitter/size.rb
315
+ - lib/twitter/source_user.rb
304
316
  - lib/twitter/streaming/client.rb
305
317
  - lib/twitter/streaming/connection.rb
306
318
  - lib/twitter/streaming/deleted_tweet.rb
@@ -309,8 +321,16 @@ files:
309
321
  - lib/twitter/streaming/message_parser.rb
310
322
  - lib/twitter/streaming/response.rb
311
323
  - lib/twitter/streaming/stall_warning.rb
312
- - spec/helper.rb
313
- - spec/twitter_spec.rb
324
+ - lib/twitter/suggestion.rb
325
+ - lib/twitter/target_user.rb
326
+ - lib/twitter/token.rb
327
+ - lib/twitter/trend.rb
328
+ - lib/twitter/trend_results.rb
329
+ - lib/twitter/tweet.rb
330
+ - lib/twitter/user.rb
331
+ - lib/twitter/utils.rb
332
+ - lib/twitter/version.rb
333
+ - lib/twitter.rb
314
334
  - spec/fixtures/already_favorited.json
315
335
  - spec/fixtures/already_posted.json
316
336
  - spec/fixtures/already_retweeted.json
@@ -375,17 +395,22 @@ files:
375
395
  - spec/fixtures/users_list2.json
376
396
  - spec/fixtures/we_concept_bg2.png
377
397
  - spec/fixtures/wildcomet2.jpe
398
+ - spec/helper.rb
378
399
  - spec/twitter/base_spec.rb
379
400
  - spec/twitter/basic_user_spec.rb
380
401
  - spec/twitter/configuration_spec.rb
381
402
  - spec/twitter/cursor_spec.rb
382
403
  - spec/twitter/direct_message_spec.rb
404
+ - spec/twitter/entity/uri_spec.rb
383
405
  - spec/twitter/error_spec.rb
406
+ - spec/twitter/geo/point_spec.rb
407
+ - spec/twitter/geo/polygon_spec.rb
384
408
  - spec/twitter/geo_factory_spec.rb
385
409
  - spec/twitter/geo_results_spec.rb
386
410
  - spec/twitter/geo_spec.rb
387
411
  - spec/twitter/identifiable_spec.rb
388
412
  - spec/twitter/list_spec.rb
413
+ - spec/twitter/media/photo_spec.rb
389
414
  - spec/twitter/media_factory_spec.rb
390
415
  - spec/twitter/null_object_spec.rb
391
416
  - spec/twitter/oembed_spec.rb
@@ -393,23 +418,6 @@ files:
393
418
  - spec/twitter/profile_banner_spec.rb
394
419
  - spec/twitter/rate_limit_spec.rb
395
420
  - spec/twitter/relationship_spec.rb
396
- - spec/twitter/saved_search_spec.rb
397
- - spec/twitter/search_results_spec.rb
398
- - spec/twitter/settings_spec.rb
399
- - spec/twitter/size_spec.rb
400
- - spec/twitter/source_user_spec.rb
401
- - spec/twitter/suggestion_spec.rb
402
- - spec/twitter/target_user_spec.rb
403
- - spec/twitter/token_spec.rb
404
- - spec/twitter/trend_results_spec.rb
405
- - spec/twitter/trend_spec.rb
406
- - spec/twitter/tweet_spec.rb
407
- - spec/twitter/user_spec.rb
408
- - spec/twitter/entity/uri_spec.rb
409
- - spec/twitter/geo/point_spec.rb
410
- - spec/twitter/geo/polygon_spec.rb
411
- - spec/twitter/media/photo_spec.rb
412
- - spec/twitter/rest/client_spec.rb
413
421
  - spec/twitter/rest/api/direct_messages_spec.rb
414
422
  - spec/twitter/rest/api/favorites_spec.rb
415
423
  - spec/twitter/rest/api/friends_and_followers_spec.rb
@@ -426,38 +434,54 @@ files:
426
434
  - spec/twitter/rest/api/tweets_spec.rb
427
435
  - spec/twitter/rest/api/undocumented_spec.rb
428
436
  - spec/twitter/rest/api/users_spec.rb
437
+ - spec/twitter/rest/client_spec.rb
438
+ - spec/twitter/saved_search_spec.rb
439
+ - spec/twitter/search_results_spec.rb
440
+ - spec/twitter/settings_spec.rb
441
+ - spec/twitter/size_spec.rb
442
+ - spec/twitter/source_user_spec.rb
429
443
  - spec/twitter/streaming/client_spec.rb
430
444
  - spec/twitter/streaming/deleted_tweet_spec.rb
431
445
  - spec/twitter/streaming/event_spec.rb
432
446
  - spec/twitter/streaming/friend_list_spec.rb
433
447
  - spec/twitter/streaming/message_parser_spec.rb
448
+ - spec/twitter/suggestion_spec.rb
449
+ - spec/twitter/target_user_spec.rb
450
+ - spec/twitter/token_spec.rb
451
+ - spec/twitter/trend_results_spec.rb
452
+ - spec/twitter/trend_spec.rb
453
+ - spec/twitter/tweet_spec.rb
454
+ - spec/twitter/user_spec.rb
455
+ - spec/twitter_spec.rb
434
456
  homepage: http://sferik.github.com/twitter/
435
457
  licenses:
436
458
  - MIT
437
- metadata: {}
438
- post_install_message:
459
+ post_install_message:
439
460
  rdoc_options: []
440
461
  require_paths:
441
462
  - lib
442
463
  required_ruby_version: !ruby/object:Gem::Requirement
464
+ none: false
443
465
  requirements:
444
- - - '>='
466
+ - - ! '>='
445
467
  - !ruby/object:Gem::Version
446
468
  version: '0'
469
+ segments:
470
+ - 0
471
+ hash: 3125248739769463340
447
472
  required_rubygems_version: !ruby/object:Gem::Requirement
473
+ none: false
448
474
  requirements:
449
- - - '>='
475
+ - - ! '>='
450
476
  - !ruby/object:Gem::Version
451
477
  version: 1.3.5
452
478
  requirements: []
453
- rubyforge_project:
454
- rubygems_version: 2.1.9
455
- signing_key:
456
- specification_version: 4
479
+ rubyforge_project:
480
+ rubygems_version: 1.8.23
481
+ signing_key:
482
+ specification_version: 3
457
483
  summary: A Ruby interface to the Twitter API.
458
484
  test_files:
459
- - spec/helper.rb
460
- - spec/twitter_spec.rb
461
485
  - spec/fixtures/already_favorited.json
462
486
  - spec/fixtures/already_posted.json
463
487
  - spec/fixtures/already_retweeted.json
@@ -522,17 +546,22 @@ test_files:
522
546
  - spec/fixtures/users_list2.json
523
547
  - spec/fixtures/we_concept_bg2.png
524
548
  - spec/fixtures/wildcomet2.jpe
549
+ - spec/helper.rb
525
550
  - spec/twitter/base_spec.rb
526
551
  - spec/twitter/basic_user_spec.rb
527
552
  - spec/twitter/configuration_spec.rb
528
553
  - spec/twitter/cursor_spec.rb
529
554
  - spec/twitter/direct_message_spec.rb
555
+ - spec/twitter/entity/uri_spec.rb
530
556
  - spec/twitter/error_spec.rb
557
+ - spec/twitter/geo/point_spec.rb
558
+ - spec/twitter/geo/polygon_spec.rb
531
559
  - spec/twitter/geo_factory_spec.rb
532
560
  - spec/twitter/geo_results_spec.rb
533
561
  - spec/twitter/geo_spec.rb
534
562
  - spec/twitter/identifiable_spec.rb
535
563
  - spec/twitter/list_spec.rb
564
+ - spec/twitter/media/photo_spec.rb
536
565
  - spec/twitter/media_factory_spec.rb
537
566
  - spec/twitter/null_object_spec.rb
538
567
  - spec/twitter/oembed_spec.rb
@@ -540,23 +569,6 @@ test_files:
540
569
  - spec/twitter/profile_banner_spec.rb
541
570
  - spec/twitter/rate_limit_spec.rb
542
571
  - spec/twitter/relationship_spec.rb
543
- - spec/twitter/saved_search_spec.rb
544
- - spec/twitter/search_results_spec.rb
545
- - spec/twitter/settings_spec.rb
546
- - spec/twitter/size_spec.rb
547
- - spec/twitter/source_user_spec.rb
548
- - spec/twitter/suggestion_spec.rb
549
- - spec/twitter/target_user_spec.rb
550
- - spec/twitter/token_spec.rb
551
- - spec/twitter/trend_results_spec.rb
552
- - spec/twitter/trend_spec.rb
553
- - spec/twitter/tweet_spec.rb
554
- - spec/twitter/user_spec.rb
555
- - spec/twitter/entity/uri_spec.rb
556
- - spec/twitter/geo/point_spec.rb
557
- - spec/twitter/geo/polygon_spec.rb
558
- - spec/twitter/media/photo_spec.rb
559
- - spec/twitter/rest/client_spec.rb
560
572
  - spec/twitter/rest/api/direct_messages_spec.rb
561
573
  - spec/twitter/rest/api/favorites_spec.rb
562
574
  - spec/twitter/rest/api/friends_and_followers_spec.rb
@@ -573,9 +585,23 @@ test_files:
573
585
  - spec/twitter/rest/api/tweets_spec.rb
574
586
  - spec/twitter/rest/api/undocumented_spec.rb
575
587
  - spec/twitter/rest/api/users_spec.rb
588
+ - spec/twitter/rest/client_spec.rb
589
+ - spec/twitter/saved_search_spec.rb
590
+ - spec/twitter/search_results_spec.rb
591
+ - spec/twitter/settings_spec.rb
592
+ - spec/twitter/size_spec.rb
593
+ - spec/twitter/source_user_spec.rb
576
594
  - spec/twitter/streaming/client_spec.rb
577
595
  - spec/twitter/streaming/deleted_tweet_spec.rb
578
596
  - spec/twitter/streaming/event_spec.rb
579
597
  - spec/twitter/streaming/friend_list_spec.rb
580
598
  - spec/twitter/streaming/message_parser_spec.rb
581
- has_rdoc:
599
+ - spec/twitter/suggestion_spec.rb
600
+ - spec/twitter/target_user_spec.rb
601
+ - spec/twitter/token_spec.rb
602
+ - spec/twitter/trend_results_spec.rb
603
+ - spec/twitter/trend_spec.rb
604
+ - spec/twitter/tweet_spec.rb
605
+ - spec/twitter/user_spec.rb
606
+ - spec/twitter_spec.rb
607
+ has_rdoc:
metadata.gz.sig CHANGED
Binary file
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: c8ede6de03967ee80467ebc8bb1c0a92aafb5283
4
- data.tar.gz: 4f935d07a65ecf9c26216d08e115faee3245d0e8
5
- SHA512:
6
- metadata.gz: 13627ec0860841892df6557a893b9c67893d63654178d0d369c868150041246fad6d6bf25e38a6be120ff83988d7924750af53b8fab42458c3913e7d74bb5d46
7
- data.tar.gz: ec9357d3d90cd82b7fbb7d2f01b5e129352ff99735698258c30fcb1feffec70c07994c8aa07fccd4aa00bf131e409a620db57619080487dc946cf3268667df65
Binary file
@@ -1,8 +0,0 @@
1
- module Enumerable
2
- def threaded_map
3
- threads = map do |object|
4
- Thread.new { yield object }
5
- end
6
- threads.map(&:value)
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- module Kernel
2
- # Returns the object's singleton class (exists in Ruby 1.9.2)
3
- def singleton_class
4
- class << self
5
- self
6
- end
7
- end unless method_defined?(:singleton_class)
8
- end