twitter 5.1.1 → 5.2.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.
Files changed (139) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.yardopts +2 -0
  3. data/CHANGELOG.md +10 -1
  4. data/CONTRIBUTING.md +2 -2
  5. data/README.md +30 -20
  6. data/Rakefile +26 -5
  7. data/lib/twitter/arguments.rb +0 -1
  8. data/lib/twitter/base.rb +13 -16
  9. data/lib/twitter/basic_user.rb +3 -3
  10. data/lib/twitter/client.rb +7 -8
  11. data/lib/twitter/configuration.rb +5 -5
  12. data/lib/twitter/core_ext/enumerable.rb +0 -2
  13. data/lib/twitter/core_ext/kernel.rb +0 -2
  14. data/lib/twitter/creatable.rb +0 -1
  15. data/lib/twitter/cursor.rb +7 -10
  16. data/lib/twitter/direct_message.rb +1 -1
  17. data/lib/twitter/entity/uri.rb +2 -2
  18. data/lib/twitter/enumerable.rb +1 -2
  19. data/lib/twitter/error.rb +4 -6
  20. data/lib/twitter/error/already_favorited.rb +1 -1
  21. data/lib/twitter/error/already_posted.rb +1 -1
  22. data/lib/twitter/error/already_retweeted.rb +1 -1
  23. data/lib/twitter/error/too_many_requests.rb +2 -2
  24. data/lib/twitter/factory.rb +2 -6
  25. data/lib/twitter/geo.rb +1 -1
  26. data/lib/twitter/geo/point.rb +3 -5
  27. data/lib/twitter/geo_factory.rb +1 -5
  28. data/lib/twitter/geo_results.rb +5 -8
  29. data/lib/twitter/identity.rb +1 -2
  30. data/lib/twitter/list.rb +4 -5
  31. data/lib/twitter/media/photo.rb +1 -2
  32. data/lib/twitter/media_factory.rb +1 -5
  33. data/lib/twitter/null_object.rb +4 -6
  34. data/lib/twitter/oembed.rb +1 -1
  35. data/lib/twitter/place.rb +4 -5
  36. data/lib/twitter/profile_banner.rb +1 -3
  37. data/lib/twitter/rate_limit.rb +1 -3
  38. data/lib/twitter/relationship.rb +1 -2
  39. data/lib/twitter/rest/api/direct_messages.rb +13 -14
  40. data/lib/twitter/rest/api/favorites.rb +10 -11
  41. data/lib/twitter/rest/api/friends_and_followers.rb +36 -36
  42. data/lib/twitter/rest/api/help.rb +8 -9
  43. data/lib/twitter/rest/api/lists.rb +62 -63
  44. data/lib/twitter/rest/api/oauth.rb +3 -4
  45. data/lib/twitter/rest/api/places_and_geo.rb +9 -10
  46. data/lib/twitter/rest/api/saved_searches.rb +5 -6
  47. data/lib/twitter/rest/api/search.rb +2 -3
  48. data/lib/twitter/rest/api/spam_reporting.rb +1 -2
  49. data/lib/twitter/rest/api/suggested_users.rb +4 -5
  50. data/lib/twitter/rest/api/timelines.rb +17 -18
  51. data/lib/twitter/rest/api/trends.rb +10 -11
  52. data/lib/twitter/rest/api/tweets.rb +15 -16
  53. data/lib/twitter/rest/api/undocumented.rb +6 -7
  54. data/lib/twitter/rest/api/users.rb +51 -52
  55. data/lib/twitter/rest/api/utils.rb +23 -30
  56. data/lib/twitter/rest/client.rb +8 -9
  57. data/lib/twitter/rest/request/multipart_with_file.rb +0 -1
  58. data/lib/twitter/rest/response/parse_error_json.rb +0 -2
  59. data/lib/twitter/rest/response/parse_json.rb +0 -2
  60. data/lib/twitter/rest/response/raise_error.rb +1 -3
  61. data/lib/twitter/search_results.rb +12 -15
  62. data/lib/twitter/settings.rb +2 -2
  63. data/lib/twitter/size.rb +2 -2
  64. data/lib/twitter/source_user.rb +1 -1
  65. data/lib/twitter/streaming/client.rb +71 -18
  66. data/lib/twitter/streaming/connection.rb +1 -3
  67. data/lib/twitter/streaming/deleted_tweet.rb +8 -0
  68. data/lib/twitter/streaming/event.rb +8 -8
  69. data/lib/twitter/streaming/friend_list.rb +2 -9
  70. data/lib/twitter/streaming/message_parser.rb +13 -7
  71. data/lib/twitter/streaming/response.rb +0 -2
  72. data/lib/twitter/streaming/stall_warning.rb +7 -0
  73. data/lib/twitter/suggestion.rb +0 -1
  74. data/lib/twitter/token.rb +2 -3
  75. data/lib/twitter/trend_results.rb +5 -8
  76. data/lib/twitter/tweet.rb +16 -24
  77. data/lib/twitter/user.rb +30 -32
  78. data/lib/twitter/version.rb +2 -5
  79. data/spec/fixtures/track_streaming_user.json +2 -1
  80. data/spec/helper.rb +6 -2
  81. data/spec/twitter/base_spec.rb +9 -9
  82. data/spec/twitter/basic_user_spec.rb +6 -6
  83. data/spec/twitter/configuration_spec.rb +4 -4
  84. data/spec/twitter/cursor_spec.rb +27 -27
  85. data/spec/twitter/direct_message_spec.rb +36 -36
  86. data/spec/twitter/entity/uri_spec.rb +27 -27
  87. data/spec/twitter/error_spec.rb +21 -21
  88. data/spec/twitter/geo/point_spec.rb +9 -9
  89. data/spec/twitter/geo/polygon_spec.rb +5 -5
  90. data/spec/twitter/geo_factory_spec.rb +7 -7
  91. data/spec/twitter/geo_results_spec.rb +11 -11
  92. data/spec/twitter/geo_spec.rb +5 -5
  93. data/spec/twitter/identifiable_spec.rb +9 -9
  94. data/spec/twitter/list_spec.rb +38 -38
  95. data/spec/twitter/media/photo_spec.rb +54 -54
  96. data/spec/twitter/media_factory_spec.rb +5 -5
  97. data/spec/twitter/null_object_spec.rb +6 -6
  98. data/spec/twitter/oembed_spec.rb +65 -65
  99. data/spec/twitter/place_spec.rb +89 -60
  100. data/spec/twitter/profile_banner_spec.rb +3 -3
  101. data/spec/twitter/rate_limit_spec.rb +18 -18
  102. data/spec/twitter/relationship_spec.rb +16 -16
  103. data/spec/twitter/rest/api/direct_messages_spec.rb +61 -61
  104. data/spec/twitter/rest/api/favorites_spec.rb +93 -93
  105. data/spec/twitter/rest/api/friends_and_followers_spec.rb +349 -349
  106. data/spec/twitter/rest/api/geo_spec.rb +33 -33
  107. data/spec/twitter/rest/api/help_spec.rb +24 -24
  108. data/spec/twitter/rest/api/lists_spec.rb +487 -487
  109. data/spec/twitter/rest/api/oauth_spec.rb +30 -30
  110. data/spec/twitter/rest/api/saved_searches_spec.rb +40 -40
  111. data/spec/twitter/rest/api/search_spec.rb +16 -16
  112. data/spec/twitter/rest/api/spam_reporting_spec.rb +9 -9
  113. data/spec/twitter/rest/api/suggested_users_spec.rb +23 -23
  114. data/spec/twitter/rest/api/timelines_spec.rb +58 -58
  115. data/spec/twitter/rest/api/trends_spec.rb +26 -26
  116. data/spec/twitter/rest/api/tweets_spec.rb +284 -284
  117. data/spec/twitter/rest/api/undocumented_spec.rb +51 -51
  118. data/spec/twitter/rest/api/users_spec.rb +360 -360
  119. data/spec/twitter/rest/client_spec.rb +99 -103
  120. data/spec/twitter/saved_search_spec.rb +16 -16
  121. data/spec/twitter/search_results_spec.rb +44 -44
  122. data/spec/twitter/settings_spec.rb +8 -8
  123. data/spec/twitter/size_spec.rb +5 -5
  124. data/spec/twitter/source_user_spec.rb +6 -6
  125. data/spec/twitter/streaming/client_spec.rb +53 -49
  126. data/spec/twitter/streaming/deleted_tweet_spec.rb +23 -0
  127. data/spec/twitter/streaming/event_spec.rb +20 -22
  128. data/spec/twitter/streaming/friend_list_spec.rb +11 -0
  129. data/spec/twitter/streaming/message_parser_spec.rb +54 -0
  130. data/spec/twitter/suggestion_spec.rb +11 -11
  131. data/spec/twitter/target_user_spec.rb +6 -6
  132. data/spec/twitter/token_spec.rb +4 -4
  133. data/spec/twitter/trend_results_spec.rb +30 -30
  134. data/spec/twitter/trend_spec.rb +20 -20
  135. data/spec/twitter/tweet_spec.rb +170 -173
  136. data/spec/twitter/user_spec.rb +179 -179
  137. data/twitter.gemspec +2 -2
  138. metadata +21 -4
  139. metadata.gz.sig +2 -1
@@ -88,23 +88,23 @@ module Twitter
88
88
  end
89
89
 
90
90
  # Perform an HTTP DELETE request
91
- def delete(path, params={})
91
+ def delete(path, params = {})
92
92
  request(:delete, path, params)
93
93
  end
94
94
 
95
95
  # Perform an HTTP GET request
96
- def get(path, params={})
96
+ def get(path, params = {})
97
97
  request(:get, path, params)
98
98
  end
99
99
 
100
100
  # Perform an HTTP POST request
101
- def post(path, params={})
102
- signature_params = params.values.any?{|value| value.respond_to?(:to_io)} ? {} : params
101
+ def post(path, params = {})
102
+ signature_params = params.values.any? { |value| value.respond_to?(:to_io) } ? {} : params
103
103
  request(:post, path, params, signature_params)
104
104
  end
105
105
 
106
106
  # Perform an HTTP PUT request
107
- def put(path, params={})
107
+ def put(path, params = {})
108
108
  request(:put, path, params)
109
109
  end
110
110
 
@@ -127,7 +127,7 @@ module Twitter
127
127
  @connection ||= Faraday.new(ENDPOINT, connection_options)
128
128
  end
129
129
 
130
- def request(method, path, params={}, signature_params=params)
130
+ def request(method, path, params = {}, signature_params = params) # rubocop:disable ParameterLists
131
131
  response = connection.send(method.to_sym, path, params) do |request|
132
132
  bearer_token_request = params.delete(:bearer_token_request)
133
133
  if bearer_token_request
@@ -143,7 +143,7 @@ module Twitter
143
143
  raise Twitter::Error
144
144
  end
145
145
 
146
- def auth_token(method, path, params={}, signature_params=params)
146
+ def auth_token(method, path, params = {}, signature_params = params) # rubocop:disable ParameterLists
147
147
  if !user_token?
148
148
  @bearer_token = token unless bearer_token?
149
149
  bearer_auth_header
@@ -167,9 +167,8 @@ module Twitter
167
167
 
168
168
  # Base64.strict_encode64 is not available on Ruby 1.8.7
169
169
  def strict_encode64(str)
170
- Base64.encode64(str).gsub("\n", "")
170
+ Base64.encode64(str).gsub("\n", '')
171
171
  end
172
-
173
172
  end
174
173
  end
175
174
  end
@@ -29,7 +29,6 @@ module Twitter
29
29
  'application/octet-stream'
30
30
  end
31
31
  end
32
-
33
32
  end
34
33
  end
35
34
  end
@@ -4,11 +4,9 @@ module Twitter
4
4
  module REST
5
5
  module Response
6
6
  class ParseErrorJson < Twitter::REST::Response::ParseJson
7
-
8
7
  def unparsable_status_codes
9
8
  super + [200]
10
9
  end
11
-
12
10
  end
13
11
  end
14
12
  end
@@ -5,7 +5,6 @@ module Twitter
5
5
  module REST
6
6
  module Response
7
7
  class ParseJson < Faraday::Response::Middleware
8
-
9
8
  def parse(body)
10
9
  case body
11
10
  when /\A^\s*$\z/, nil
@@ -24,7 +23,6 @@ module Twitter
24
23
  def unparsable_status_codes
25
24
  [204, 301, 302, 304]
26
25
  end
27
-
28
26
  end
29
27
  end
30
28
  end
@@ -15,13 +15,11 @@ module Twitter
15
15
  module REST
16
16
  module Response
17
17
  class RaiseError < Faraday::Response::Middleware
18
-
19
18
  def on_complete(env)
20
19
  status_code = env[:status].to_i
21
20
  error_class = Twitter::Error.errors[status_code]
22
- raise error_class.from_response(env) if error_class
21
+ fail error_class.from_response(env) if error_class
23
22
  end
24
-
25
23
  end
26
24
  end
27
25
  end
@@ -4,27 +4,25 @@ module Twitter
4
4
  class SearchResults
5
5
  include Twitter::Enumerable
6
6
  attr_reader :attrs
7
- alias to_h attrs
8
- alias to_hash attrs
9
- alias to_hsh attrs
7
+ alias_method :to_h, :attrs
8
+ alias_method :to_hash, :attrs
9
+ alias_method :to_hsh, :attrs
10
10
 
11
11
  class << self
12
-
13
12
  # Construct a new SearchResults object from a response hash
14
13
  #
15
14
  # @param response [Hash]
16
15
  # @return [Twitter::Base]
17
- def from_response(response={})
16
+ def from_response(response = {})
18
17
  new(response[:body])
19
18
  end
20
-
21
19
  end
22
20
 
23
21
  # Initializes a new SearchResults object
24
22
  #
25
23
  # @param attrs [Hash]
26
24
  # @return [Twitter::SearchResults]
27
- def initialize(attrs={})
25
+ def initialize(attrs = {})
28
26
  @attrs = attrs
29
27
  @collection = Array(@attrs[:statuses]).map do |tweet|
30
28
  Tweet.new(tweet)
@@ -55,8 +53,8 @@ module Twitter
55
53
  def results_per_page
56
54
  @attrs[:search_metadata][:count] if @attrs[:search_metadata]
57
55
  end
58
- alias rpp results_per_page
59
- alias count results_per_page
56
+ alias_method :rpp, :results_per_page
57
+ alias_method :count, :results_per_page
60
58
 
61
59
  # @return [Integer]
62
60
  def since_id
@@ -67,7 +65,7 @@ module Twitter
67
65
  def next_results?
68
66
  !!(@attrs[:search_metadata] && @attrs[:search_metadata][:next_results])
69
67
  end
70
- alias next_page? next_results?
68
+ alias_method :next_page?, :next_results?
71
69
 
72
70
  # Returns a Hash of query parameters for the next result in the search
73
71
  #
@@ -79,7 +77,7 @@ module Twitter
79
77
  query_string_to_hash(query_string)
80
78
  end
81
79
  end
82
- alias next_page next_results
80
+ alias_method :next_page, :next_results
83
81
 
84
82
  # Returns a Hash of query parameters for the refresh URL in the search
85
83
  #
@@ -89,7 +87,7 @@ module Twitter
89
87
  query_string = strip_first_character(@attrs[:search_metadata][:refresh_url])
90
88
  query_string_to_hash(query_string)
91
89
  end
92
- alias refresh_page refresh_results
90
+ alias_method :refresh_page, :refresh_results
93
91
 
94
92
  private
95
93
 
@@ -110,7 +108,7 @@ module Twitter
110
108
  # @example Remove the first character from a query string
111
109
  # strip_first_character!("?foo=bar&baz=qux") #=> "foo=bar&baz=qux"
112
110
  def strip_first_character!(string)
113
- string[0] = ""
111
+ string[0] = ''
114
112
  string
115
113
  end
116
114
 
@@ -132,8 +130,7 @@ module Twitter
132
130
  # @example Convert hash's keys to symbols
133
131
  # symbolize_keys({"foo"=>"bar", "baz"=>"qux"}) #=> {:foo=>"bar", :baz=>"qux"}
134
132
  def symbolize_keys(hash)
135
- Hash[hash.map{|key, value| [key.to_sym, value]}]
133
+ Hash[hash.map { |key, value| [key.to_sym, value] }]
136
134
  end
137
-
138
135
  end
139
136
  end
@@ -3,8 +3,8 @@ require 'twitter/base'
3
3
  module Twitter
4
4
  class Settings < Twitter::Base
5
5
  attr_reader :always_use_https, :discoverable_by_email, :geo_enabled,
6
- :language, :protected, :screen_name, :show_all_inline_media, :sleep_time,
7
- :time_zone
6
+ :language, :protected, :screen_name, :show_all_inline_media,
7
+ :sleep_time, :time_zone
8
8
  object_attr_reader :Place, :trend_location
9
9
  end
10
10
  end
@@ -5,7 +5,7 @@ module Twitter
5
5
  class Size < Twitter::Base
6
6
  include Equalizer.new(:h, :w)
7
7
  attr_reader :h, :resize, :w
8
- alias height h
9
- alias width w
8
+ alias_method :height, :h
9
+ alias_method :width, :w
10
10
  end
11
11
  end
@@ -3,6 +3,6 @@ require 'twitter/basic_user'
3
3
  module Twitter
4
4
  class SourceUser < Twitter::BasicUser
5
5
  attr_reader :all_replies, :blocking, :can_dm, :followed_by, :marked_spam,
6
- :notifications_enabled, :want_retweets
6
+ :notifications_enabled, :want_retweets
7
7
  end
8
8
  end
@@ -4,8 +4,6 @@ require 'twitter/client'
4
4
  require 'twitter/streaming/connection'
5
5
  require 'twitter/streaming/response'
6
6
  require 'twitter/streaming/message_parser'
7
- require 'twitter/streaming/event'
8
- require 'twitter/streaming/friend_list'
9
7
 
10
8
  module Twitter
11
9
  module Streaming
@@ -15,34 +13,74 @@ module Twitter
15
13
  # Initializes a new Client object
16
14
  #
17
15
  # @return [Twitter::Streaming::Client]
18
- def initialize(options={}, &block)
16
+ def initialize(options = {}, &block)
19
17
  super
20
18
  @connection = Streaming::Connection.new
21
19
  end
22
20
 
23
- # @yield [Twitter::Tweet] A stream of tweets.
24
- def filter(options={}, &block)
21
+ # Returns public statuses that match one or more filter predicates
22
+ #
23
+ # @see https://dev.twitter.com/docs/api/1.1/post/statuses/filter
24
+ # @see https://dev.twitter.com/docs/streaming-apis/parameters
25
+ # @note At least one predicate parameter (follow, locations, or track) must be specified.
26
+ # @param options [Hash] A customizable set of options.
27
+ # @option options [String] :follow A comma separated list of user IDs, indicating the users to return statuses for in the stream.
28
+ # @option options [String] :track Includes additional Tweets matching the specified keywords. Phrases of keywords are specified by a comma-separated list.
29
+ # @option options [String] :locations Includes additional Tweets falling within the specified bounding boxes.
30
+ # @yield [Twitter::Tweet, Twitter::Streaming::Event, Twitter::DirectMessage, Twitter::Streaming::FriendList, Twitter::Streaming::DeletedTweet, Twitter::Streaming::StallWarning] A stream of Twitter objects.
31
+ def filter(options = {}, &block)
25
32
  request(:post, 'https://stream.twitter.com:443/1.1/statuses/filter.json', options, &block)
26
33
  end
27
34
 
28
- # @yield [Twitter::Tweet] A stream of tweets.
29
- def firehose(options={}, &block)
35
+ # Returns all public statuses
36
+ #
37
+ # @see https://dev.twitter.com/docs/api/1.1/get/statuses/firehose
38
+ # @see https://dev.twitter.com/docs/streaming-apis/parameters
39
+ # @note This endpoint requires special permission to access.
40
+ # @param options [Hash] A customizable set of options.
41
+ # @option options [Integer] :count The number of messages to backfill.
42
+ # @yield [Twitter::Tweet, Twitter::Streaming::Event, Twitter::DirectMessage, Twitter::Streaming::FriendList, Twitter::Streaming::DeletedTweet, Twitter::Streaming::StallWarning] A stream of Twitter objects.
43
+ def firehose(options = {}, &block)
30
44
  request(:get, 'https://stream.twitter.com:443/1.1/statuses/firehose.json', options, &block)
31
45
  end
32
46
 
33
- # @yield [Twitter::Tweet] A stream of tweets.
34
- def sample(options={}, &block)
47
+ # Returns a small random sample of all public statuses
48
+ #
49
+ # @see https://dev.twitter.com/docs/api/1.1/get/statuses/sample
50
+ # @see https://dev.twitter.com/docs/streaming-apis/parameters
51
+ # @yield [Twitter::Tweet, Twitter::Streaming::Event, Twitter::DirectMessage, Twitter::Streaming::FriendList, Twitter::Streaming::DeletedTweet, Twitter::Streaming::StallWarning] A stream of Twitter objects.
52
+ def sample(options = {}, &block)
35
53
  request(:get, 'https://stream.twitter.com:443/1.1/statuses/sample.json', options, &block)
36
54
  end
37
55
 
38
- # @yield [Twitter::Tweet] A stream of tweets.
56
+ # Streams messages for a set of user
57
+ #
58
+ # @see https://dev.twitter.com/docs/api/1.1/get/site
59
+ # @see https://dev.twitter.com/docs/streaming-apis/streams/site
60
+ # @see https://dev.twitter.com/docs/streaming-apis/parameters
61
+ # @param follow [Enumerable<Integer, String, Twitter::User>] A list of user IDs, indicating the users to return statuses for in the stream.
62
+ # @param options [Hash] A customizable set of options.
63
+ # @option options [String] :with Specifies whether to return information for just the users specified in the follow parameter, or include messages from accounts they follow.
64
+ # @option options [String] :replies Specifies whether stall warnings should be delivered.
65
+ # @yield [Twitter::Tweet, Twitter::Streaming::Event, Twitter::DirectMessage, Twitter::Streaming::FriendList, Twitter::Streaming::DeletedTweet, Twitter::Streaming::StallWarning] A stream of Twitter objects.
39
66
  def site(*args, &block)
40
67
  arguments = Arguments.new(args)
41
- request(:get, 'https://sitestream.twitter.com:443/1.1/site.json', arguments.options.merge(:follow => arguments.join(',')), &block)
68
+ user_ids = collect_user_ids(arguments)
69
+ request(:get, 'https://sitestream.twitter.com:443/1.1/site.json', arguments.options.merge(:follow => user_ids.join(',')), &block)
42
70
  end
43
71
 
44
- # @yield [Twitter::Tweet] A stream of tweets.
45
- def user(options={}, &block)
72
+ # Streams messages for a single user
73
+ #
74
+ # @see https://dev.twitter.com/docs/api/1.1/get/user
75
+ # @see https://dev.twitter.com/docs/streaming-apis/streams/user
76
+ # @see https://dev.twitter.com/docs/streaming-apis/parameters
77
+ # @param options [Hash] A customizable set of options.
78
+ # @option options [String] :with Specifies whether to return information for just the users specified in the follow parameter, or include messages from accounts they follow.
79
+ # @option options [String] :replies Specifies whether stall warnings should be delivered.
80
+ # @option options [String] :track Includes additional Tweets matching the specified keywords. Phrases of keywords are specified by a comma-separated list.
81
+ # @option options [String] :locations Includes additional Tweets falling within the specified bounding boxes.
82
+ # @yield [Twitter::Tweet, Twitter::Streaming::Event, Twitter::DirectMessage, Twitter::Streaming::FriendList, Twitter::Streaming::DeletedTweet, Twitter::Streaming::StallWarning] A stream of Twitter objects.
83
+ def user(options = {}, &block)
46
84
  request(:get, 'https://userstream.twitter.com:443/1.1/user.json', options, &block)
47
85
  end
48
86
 
@@ -54,19 +92,19 @@ module Twitter
54
92
  elsif instance_variable_defined?(:@before_request)
55
93
  @before_request
56
94
  else
57
- Proc.new {}
95
+ proc {}
58
96
  end
59
97
  end
60
98
 
61
99
  private
62
100
 
63
- def request(method, uri, params, &block)
101
+ def request(method, uri, params, &block) # rubocop:disable ParameterLists
64
102
  before_request.call
65
103
  headers = default_headers.merge(:authorization => oauth_auth_header(method, uri, params).to_s)
66
104
  request = HTTP::Request.new(method, uri + '?' + to_url_params(params), headers)
67
105
  response = Streaming::Response.new do |data|
68
- if item = Streaming::MessageParser.parse(data)
69
- yield item
106
+ if item = Streaming::MessageParser.parse(data) # rubocop:disable AssignmentInCondition, IfUnlessModifier
107
+ block.call(item)
70
108
  end
71
109
  end
72
110
  @connection.stream(request, response)
@@ -74,7 +112,7 @@ module Twitter
74
112
 
75
113
  def to_url_params(params)
76
114
  params.map do |param, value|
77
- [param, URI.encode(value)].join("=")
115
+ [param, URI.encode(value)].join('=')
78
116
  end.sort.join('&')
79
117
  end
80
118
 
@@ -84,6 +122,21 @@ module Twitter
84
122
  :user_agent => user_agent,
85
123
  }
86
124
  end
125
+
126
+ def collect_user_ids(users)
127
+ user_ids = []
128
+ users.flatten.each do |user|
129
+ case user
130
+ when Integer
131
+ user_ids << user
132
+ when String
133
+ user_ids << user.to_i
134
+ when Twitter::User
135
+ user_ids << user.id
136
+ end
137
+ end
138
+ user_ids
139
+ end
87
140
  end
88
141
  end
89
142
  end
@@ -5,18 +5,16 @@ require 'resolv'
5
5
  module Twitter
6
6
  module Streaming
7
7
  class Connection
8
-
9
8
  def stream(request, response)
10
9
  client_context = OpenSSL::SSL::SSLContext.new
11
10
  client = TCPSocket.new(Resolv.getaddress(request.uri.host), request.uri.port)
12
11
  ssl_client = OpenSSL::SSL::SSLSocket.new(client, client_context)
13
12
  ssl_client.connect
14
13
  request.stream(ssl_client)
15
- while body = ssl_client.readpartial(1024)
14
+ while body = ssl_client.readpartial(1024) # rubocop:disable AssignmentInCondition, WhileUntilModifier
16
15
  response << body
17
16
  end
18
17
  end
19
-
20
18
  end
21
19
  end
22
20
  end
@@ -0,0 +1,8 @@
1
+ module Twitter
2
+ module Streaming
3
+ class DeletedTweet < Twitter::Identity
4
+ attr_reader :user_id
5
+ end
6
+ DeletedStatus = DeletedTweet # rubocop:disable ConstantName
7
+ end
8
+ end
@@ -1,28 +1,28 @@
1
1
  module Twitter
2
2
  module Streaming
3
3
  class Event
4
-
5
4
  LIST_EVENTS = [
6
- :list_created, :list_destroyed, :list_updated, :list_member_added,
7
- :list_member_added, :list_member_removed, :list_user_subscribed,
8
- :list_user_subscribed, :list_user_unsubscribed, :list_user_unsubscribed
5
+ :list_created, :list_destroyed, :list_updated, :list_member_added,
6
+ :list_member_added, :list_member_removed, :list_user_subscribed,
7
+ :list_user_subscribed, :list_user_unsubscribed, :list_user_unsubscribed,
9
8
  ]
10
9
 
11
10
  TWEET_EVENTS = [
12
- :favorite, :unfavorite
11
+ :favorite, :unfavorite,
13
12
  ]
14
-
13
+
15
14
  attr_reader :name, :source, :target, :target_object
16
15
 
17
16
  # @param data [Hash]
18
17
  def initialize(data)
19
- @name = data[:event].intern
18
+ @name = data[:event].to_sym
20
19
  @source = Twitter::User.new(data[:source])
21
20
  @target = Twitter::User.new(data[:target])
22
21
  @target_object = target_object_factory(@name, data[:target_object])
23
22
  end
24
23
 
25
24
  private
25
+
26
26
  def target_object_factory(event_name, data)
27
27
  if LIST_EVENTS.include?(event_name)
28
28
  Twitter::List.new(data)
@@ -32,4 +32,4 @@ module Twitter
32
32
  end
33
33
  end
34
34
  end
35
- end
35
+ end