ifttt-twitter 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemtest +0 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.travis.yml +9 -0
- data/.yardopts +8 -0
- data/Gemfile +7 -0
- data/HISTORY.md +520 -0
- data/LICENSE.md +20 -0
- data/README.md +251 -0
- data/Rakefile +13 -0
- data/lib/twitter.rb +24 -0
- data/lib/twitter/action.rb +9 -0
- data/lib/twitter/action_factory.rb +28 -0
- data/lib/twitter/authenticatable.rb +24 -0
- data/lib/twitter/base.rb +40 -0
- data/lib/twitter/client.rb +126 -0
- data/lib/twitter/client/accounts.rb +180 -0
- data/lib/twitter/client/activity.rb +48 -0
- data/lib/twitter/client/block.rb +104 -0
- data/lib/twitter/client/direct_messages.rb +110 -0
- data/lib/twitter/client/favorites.rb +82 -0
- data/lib/twitter/client/friends_and_followers.rb +293 -0
- data/lib/twitter/client/help.rb +38 -0
- data/lib/twitter/client/legal.rb +32 -0
- data/lib/twitter/client/lists.rb +643 -0
- data/lib/twitter/client/local_trends.rb +46 -0
- data/lib/twitter/client/notification.rb +49 -0
- data/lib/twitter/client/places_and_geo.rb +113 -0
- data/lib/twitter/client/saved_searches.rb +73 -0
- data/lib/twitter/client/search.rb +94 -0
- data/lib/twitter/client/spam_reporting.rb +30 -0
- data/lib/twitter/client/suggested_users.rb +60 -0
- data/lib/twitter/client/timelines.rb +265 -0
- data/lib/twitter/client/trends.rb +55 -0
- data/lib/twitter/client/tweets.rb +191 -0
- data/lib/twitter/client/urls.rb +26 -0
- data/lib/twitter/client/users.rb +203 -0
- data/lib/twitter/config.rb +106 -0
- data/lib/twitter/configuration.rb +20 -0
- data/lib/twitter/connection.rb +43 -0
- data/lib/twitter/core_ext/hash.rb +81 -0
- data/lib/twitter/creatable.rb +14 -0
- data/lib/twitter/cursor.rb +44 -0
- data/lib/twitter/direct_message.rb +27 -0
- data/lib/twitter/error.rb +37 -0
- data/lib/twitter/error/bad_gateway.rb +7 -0
- data/lib/twitter/error/bad_request.rb +7 -0
- data/lib/twitter/error/client_error.rb +7 -0
- data/lib/twitter/error/enhance_your_calm.rb +13 -0
- data/lib/twitter/error/forbidden.rb +7 -0
- data/lib/twitter/error/internal_server_error.rb +7 -0
- data/lib/twitter/error/not_acceptable.rb +7 -0
- data/lib/twitter/error/not_found.rb +7 -0
- data/lib/twitter/error/server_error.rb +7 -0
- data/lib/twitter/error/service_unavailable.rb +7 -0
- data/lib/twitter/error/unauthorized.rb +7 -0
- data/lib/twitter/favorite.rb +28 -0
- data/lib/twitter/follow.rb +27 -0
- data/lib/twitter/geo_factory.rb +22 -0
- data/lib/twitter/language.rb +7 -0
- data/lib/twitter/list.rb +22 -0
- data/lib/twitter/list_member_added.rb +36 -0
- data/lib/twitter/media_factory.rb +21 -0
- data/lib/twitter/mention.rb +43 -0
- data/lib/twitter/metadata.rb +7 -0
- data/lib/twitter/oembed.rb +8 -0
- data/lib/twitter/photo.rb +24 -0
- data/lib/twitter/place.rb +36 -0
- data/lib/twitter/point.rb +27 -0
- data/lib/twitter/polygon.rb +14 -0
- data/lib/twitter/rate_limit_status.rb +15 -0
- data/lib/twitter/relationship.rb +18 -0
- data/lib/twitter/reply.rb +36 -0
- data/lib/twitter/request.rb +38 -0
- data/lib/twitter/request/gateway.rb +20 -0
- data/lib/twitter/request/multipart_with_file.rb +37 -0
- data/lib/twitter/request/oauth.rb +26 -0
- data/lib/twitter/request/phoenix.rb +22 -0
- data/lib/twitter/response/parse_json.rb +28 -0
- data/lib/twitter/response/raise_client_error.rb +49 -0
- data/lib/twitter/response/raise_server_error.rb +23 -0
- data/lib/twitter/retweet.rb +36 -0
- data/lib/twitter/saved_search.rb +16 -0
- data/lib/twitter/settings.rb +17 -0
- data/lib/twitter/size.rb +16 -0
- data/lib/twitter/status.rb +80 -0
- data/lib/twitter/suggestion.rb +22 -0
- data/lib/twitter/trend.rb +14 -0
- data/lib/twitter/user.rb +65 -0
- data/lib/twitter/version.rb +30 -0
- data/spec/faraday/request_spec.rb +25 -0
- data/spec/faraday/response_spec.rb +68 -0
- data/spec/fixtures/about_me.json +1 -0
- data/spec/fixtures/all.json +1 -0
- data/spec/fixtures/bad_gateway.json +1 -0
- data/spec/fixtures/bad_request.json +1 -0
- data/spec/fixtures/by_friends.json +1 -0
- data/spec/fixtures/category.json +1 -0
- data/spec/fixtures/configuration.json +1 -0
- data/spec/fixtures/contributees.json +1 -0
- data/spec/fixtures/contributors.json +1 -0
- data/spec/fixtures/direct_message.json +1 -0
- data/spec/fixtures/direct_messages.json +1 -0
- data/spec/fixtures/end_session.json +1 -0
- data/spec/fixtures/enhance_your_calm.text +11 -0
- data/spec/fixtures/false.json +1 -0
- data/spec/fixtures/favorites.json +1 -0
- data/spec/fixtures/forbidden.json +1 -0
- data/spec/fixtures/friendships.json +1 -0
- data/spec/fixtures/id_list.json +1 -0
- data/spec/fixtures/ids.json +1 -0
- data/spec/fixtures/image_facets.json +1 -0
- data/spec/fixtures/internal_server_error.json +1 -0
- data/spec/fixtures/languages.json +1 -0
- data/spec/fixtures/list.json +1 -0
- data/spec/fixtures/lists.json +1 -0
- data/spec/fixtures/locations.json +1 -0
- data/spec/fixtures/matching_trends.json +1 -0
- data/spec/fixtures/me.jpeg +0 -0
- data/spec/fixtures/media_timeline.json +1 -0
- data/spec/fixtures/members.json +1 -0
- data/spec/fixtures/n605431196_2079896_558_normal.jpg +0 -0
- data/spec/fixtures/no_user_matches.json +1 -0
- data/spec/fixtures/not_acceptable.json +1 -0
- data/spec/fixtures/not_found.json +1 -0
- data/spec/fixtures/oembed.json +1 -0
- data/spec/fixtures/pengwynn.json +1 -0
- data/spec/fixtures/phoenix_search.phoenix +1 -0
- data/spec/fixtures/place.json +1 -0
- data/spec/fixtures/places.json +1 -0
- data/spec/fixtures/privacy.json +1 -0
- data/spec/fixtures/profile_image.text +24 -0
- data/spec/fixtures/rate_limit_status.json +1 -0
- data/spec/fixtures/recommendations.json +1 -0
- data/spec/fixtures/relationship.json +1 -0
- data/spec/fixtures/resolve.json +1 -0
- data/spec/fixtures/retweet.json +1 -0
- data/spec/fixtures/retweeters_of.json +1 -0
- data/spec/fixtures/retweets.json +1 -0
- data/spec/fixtures/saved_search.json +1 -0
- data/spec/fixtures/saved_searches.json +1 -0
- data/spec/fixtures/search.json +1 -0
- data/spec/fixtures/service_unavailable.json +1 -0
- data/spec/fixtures/settings.json +1 -0
- data/spec/fixtures/sferik.json +1 -0
- data/spec/fixtures/status.json +1 -0
- data/spec/fixtures/status_with_media.json +104 -0
- data/spec/fixtures/statuses.json +1 -0
- data/spec/fixtures/suggestions.json +1 -0
- data/spec/fixtures/tos.json +1 -0
- data/spec/fixtures/totals.json +1 -0
- data/spec/fixtures/trends.json +1 -0
- data/spec/fixtures/trends_current.json +1 -0
- data/spec/fixtures/trends_daily.json +1 -0
- data/spec/fixtures/trends_weekly.json +1 -0
- data/spec/fixtures/true.json +1 -0
- data/spec/fixtures/unauthorized.json +1 -0
- data/spec/fixtures/user_search.json +1 -0
- data/spec/fixtures/user_timeline.json +1 -0
- data/spec/fixtures/users.json +1 -0
- data/spec/fixtures/users_list.json +1 -0
- data/spec/fixtures/video_facets.json +1 -0
- data/spec/fixtures/we_concept_bg2.png +0 -0
- data/spec/helper.rb +49 -0
- data/spec/twitter/action_factory_spec.rb +37 -0
- data/spec/twitter/action_spec.rb +16 -0
- data/spec/twitter/base_spec.rb +29 -0
- data/spec/twitter/client/accounts_spec.rb +181 -0
- data/spec/twitter/client/activity_spec.rb +43 -0
- data/spec/twitter/client/block_spec.rb +106 -0
- data/spec/twitter/client/direct_messages_spec.rb +98 -0
- data/spec/twitter/client/favorites_spec.rb +80 -0
- data/spec/twitter/client/friends_and_followers_spec.rb +478 -0
- data/spec/twitter/client/help_spec.rb +44 -0
- data/spec/twitter/client/legal_spec.rb +41 -0
- data/spec/twitter/client/lists_spec.rb +1104 -0
- data/spec/twitter/client/local_trends_spec.rb +58 -0
- data/spec/twitter/client/notification_spec.rb +47 -0
- data/spec/twitter/client/places_and_geo_spec.rb +100 -0
- data/spec/twitter/client/saved_searches_spec.rb +80 -0
- data/spec/twitter/client/search_spec.rb +92 -0
- data/spec/twitter/client/spam_reporting_spec.rb +28 -0
- data/spec/twitter/client/suggested_users_spec.rb +65 -0
- data/spec/twitter/client/timelines_spec.rb +231 -0
- data/spec/twitter/client/trends_spec.rb +51 -0
- data/spec/twitter/client/tweets_spec.rb +189 -0
- data/spec/twitter/client/urls_spec.rb +31 -0
- data/spec/twitter/client/users_spec.rb +323 -0
- data/spec/twitter/client_spec.rb +94 -0
- data/spec/twitter/configuration_spec.rb +17 -0
- data/spec/twitter/cursor_spec.rb +43 -0
- data/spec/twitter/direct_message_spec.rb +56 -0
- data/spec/twitter/favorite_spec.rb +29 -0
- data/spec/twitter/follow_spec.rb +29 -0
- data/spec/twitter/geo_factory_spec.rb +21 -0
- data/spec/twitter/list_spec.rb +34 -0
- data/spec/twitter/media_factory_spec.rb +17 -0
- data/spec/twitter/mention_spec.rb +52 -0
- data/spec/twitter/oembed_spec.rb +145 -0
- data/spec/twitter/photo_spec.rb +35 -0
- data/spec/twitter/place_spec.rb +75 -0
- data/spec/twitter/point_spec.rb +32 -0
- data/spec/twitter/polygon_spec.rb +18 -0
- data/spec/twitter/rate_limit_status_spec.rb +16 -0
- data/spec/twitter/relationship_spec.rb +27 -0
- data/spec/twitter/reply_spec.rb +41 -0
- data/spec/twitter/retweet_spec.rb +41 -0
- data/spec/twitter/saved_search_spec.rb +34 -0
- data/spec/twitter/settings_spec.rb +16 -0
- data/spec/twitter/size_spec.rb +18 -0
- data/spec/twitter/status_spec.rb +148 -0
- data/spec/twitter/suggestion_spec.rb +20 -0
- data/spec/twitter/trend_spec.rb +20 -0
- data/spec/twitter/user_spec.rb +50 -0
- data/spec/twitter_spec.rb +91 -0
- data/twitter.gemspec +42 -0
- metadata +564 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'active_support/core_ext/kernel/singleton_class'
|
2
|
+
require 'twitter/base'
|
3
|
+
|
4
|
+
module Twitter
|
5
|
+
class Cursor < Twitter::Base
|
6
|
+
attr_reader :collection
|
7
|
+
lazy_attr_reader :next_cursor, :previous_cursor
|
8
|
+
alias :next :next_cursor
|
9
|
+
alias :previous :previous_cursor
|
10
|
+
|
11
|
+
# Initializes a new Cursor object
|
12
|
+
#
|
13
|
+
# @param attrs [Hash]
|
14
|
+
# @params method [String, Symbol] The name of the method to return the collection
|
15
|
+
# @params klass [Class] The class to instantiate object in the collection
|
16
|
+
# @return [Twitter::Cursor]
|
17
|
+
def initialize(attrs, method, klass=nil)
|
18
|
+
super(attrs)
|
19
|
+
@collection = Array(attrs[method.to_s]).map do |item|
|
20
|
+
if klass
|
21
|
+
klass.new(item)
|
22
|
+
else
|
23
|
+
item
|
24
|
+
end
|
25
|
+
end
|
26
|
+
singleton_class.class_eval do
|
27
|
+
alias_method method.to_sym, :collection
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Boolean]
|
32
|
+
def first?
|
33
|
+
previous_cursor.zero?
|
34
|
+
end
|
35
|
+
alias :first :first?
|
36
|
+
|
37
|
+
# @return [Boolean]
|
38
|
+
def last?
|
39
|
+
next_cursor.zero?
|
40
|
+
end
|
41
|
+
alias :last :last?
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'twitter/base'
|
2
|
+
require 'twitter/creatable'
|
3
|
+
require 'twitter/user'
|
4
|
+
|
5
|
+
module Twitter
|
6
|
+
class DirectMessage < Twitter::Base
|
7
|
+
include Twitter::Creatable
|
8
|
+
lazy_attr_reader :id, :text
|
9
|
+
|
10
|
+
# @param other [Twiter::DirectMessage]
|
11
|
+
# @return [Boolean]
|
12
|
+
def ==(other)
|
13
|
+
super || (other.class == self.class && other.id == self.id)
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Twitter::User]
|
17
|
+
def recipient
|
18
|
+
@recipient ||= Twitter::User.new(@attrs['recipient']) unless @attrs['recipient'].nil?
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Twitter::User]
|
22
|
+
def sender
|
23
|
+
@sender ||= Twitter::User.new(@attrs['sender']) unless @attrs['sender'].nil?
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Twitter
|
2
|
+
# Custom error class for rescuing from all Twitter errors
|
3
|
+
class Error < StandardError
|
4
|
+
attr_reader :http_headers
|
5
|
+
|
6
|
+
# Initializes a new Error object
|
7
|
+
#
|
8
|
+
# @param message [String]
|
9
|
+
# @param http_headers [Hash]
|
10
|
+
# @return [Twitter::Error]
|
11
|
+
def initialize(message, http_headers)
|
12
|
+
@http_headers = Hash[http_headers]
|
13
|
+
super(message)
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Time]
|
17
|
+
def ratelimit_reset
|
18
|
+
Time.at(@http_headers.values_at('x-ratelimit-reset', 'X-RateLimit-Reset').detect{|value| value}.to_i)
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Integer]
|
22
|
+
def ratelimit_limit
|
23
|
+
@http_headers.values_at('x-ratelimit-limit', 'X-RateLimit-Limit').detect{|value| value}.to_i
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Integer]
|
27
|
+
def ratelimit_remaining
|
28
|
+
@http_headers.values_at('x-ratelimit-remaining', 'X-RateLimit-Remaining').detect{|value| value}.to_i
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Integer]
|
32
|
+
def retry_after
|
33
|
+
[(ratelimit_reset - Time.now).ceil, 0].max
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'twitter/error/client_error'
|
2
|
+
|
3
|
+
module Twitter
|
4
|
+
# Raised when Twitter returns the HTTP status code 420
|
5
|
+
class Error::EnhanceYourCalm < Twitter::Error::ClientError
|
6
|
+
# The number of seconds your application should wait before requesting date from the Search API again
|
7
|
+
#
|
8
|
+
# @see http://dev.twitter.com/pages/rate-limiting
|
9
|
+
def retry_after
|
10
|
+
@http_headers.values_at('retry-after', 'Retry-After').detect{|value| value }.to_i
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'twitter/action'
|
2
|
+
require 'twitter/status'
|
3
|
+
require 'twitter/user'
|
4
|
+
|
5
|
+
module Twitter
|
6
|
+
class Favorite < Twitter::Action
|
7
|
+
lazy_attr_reader :target_objects
|
8
|
+
|
9
|
+
# A collection of users who favorited a status
|
10
|
+
#
|
11
|
+
# @return [Array<Twitter::User>]
|
12
|
+
def sources
|
13
|
+
@sources = Array(@attrs['sources']).map do |user|
|
14
|
+
Twitter::User.new(user)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# A collection containing the favorited status
|
19
|
+
#
|
20
|
+
# @return [Array<Twitter::Status>]
|
21
|
+
def targets
|
22
|
+
@targets = Array(@attrs['targets']).map do |status|
|
23
|
+
Twitter::Status.new(status)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'twitter/action'
|
2
|
+
require 'twitter/user'
|
3
|
+
|
4
|
+
module Twitter
|
5
|
+
class Follow < Twitter::Action
|
6
|
+
lazy_attr_reader :target_objects
|
7
|
+
|
8
|
+
# A collection of users who followed a user
|
9
|
+
#
|
10
|
+
# @return [Array<Twitter::User>]
|
11
|
+
def sources
|
12
|
+
@sources = Array(@attrs['sources']).map do |user|
|
13
|
+
Twitter::User.new(user)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# A collection containing the followed user
|
18
|
+
#
|
19
|
+
# @return [Array<Twitter::User>]
|
20
|
+
def targets
|
21
|
+
@targets = Array(@attrs['targets']).map do |user|
|
22
|
+
Twitter::User.new(user)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'twitter/point'
|
2
|
+
require 'twitter/polygon'
|
3
|
+
|
4
|
+
module Twitter
|
5
|
+
class GeoFactory
|
6
|
+
|
7
|
+
# Instantiates a new geo object
|
8
|
+
#
|
9
|
+
# @param attrs [Hash]
|
10
|
+
# @raise [ArgumentError] Error raised when supplied argument is missing a 'type' key.
|
11
|
+
# @return [Twitter::Point, Twitter::Polygon]
|
12
|
+
def self.new(geo={})
|
13
|
+
type = geo.delete('type')
|
14
|
+
if type
|
15
|
+
Twitter.const_get(type.capitalize.to_sym).new(geo)
|
16
|
+
else
|
17
|
+
raise ArgumentError, "argument must have a 'type' key"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
data/lib/twitter/list.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'twitter/base'
|
2
|
+
require 'twitter/user'
|
3
|
+
|
4
|
+
module Twitter
|
5
|
+
class List < Twitter::Base
|
6
|
+
lazy_attr_reader :description, :following, :full_name, :id, :member_count,
|
7
|
+
:mode, :name, :slug, :subscriber_count, :uri
|
8
|
+
alias :following? :following
|
9
|
+
|
10
|
+
# @param other [Twitter::List]
|
11
|
+
# @return [Boolean]
|
12
|
+
def ==(other)
|
13
|
+
super || (other.class == self.class && other.id == self.id)
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Twitter::User]
|
17
|
+
def user
|
18
|
+
@user ||= Twitter::User.new(@attrs['user']) unless @attrs['user'].nil?
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'twitter/action'
|
2
|
+
require 'twitter/list'
|
3
|
+
require 'twitter/user'
|
4
|
+
|
5
|
+
module Twitter
|
6
|
+
class ListMemberAdded < Twitter::Action
|
7
|
+
lazy_attr_reader :target_objects
|
8
|
+
|
9
|
+
# A collection of users who added to the list
|
10
|
+
#
|
11
|
+
# @return [Array<Twitter::User>]
|
12
|
+
def sources
|
13
|
+
@sources = Array(@attrs['sources']).map do |user|
|
14
|
+
Twitter::User.new(user)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# A collection of lists that were added to
|
19
|
+
#
|
20
|
+
# @return [Array<Twitter::List>]
|
21
|
+
def target_objects
|
22
|
+
@target_objects = Array(@attrs['target_objects']).map do |list|
|
23
|
+
Twitter::List.new(list)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# A collection of users who were added to the list
|
28
|
+
#
|
29
|
+
# @return [Array<Twitter::User>]
|
30
|
+
def targets
|
31
|
+
@targets = Array(@attrs['targets']).map do |user|
|
32
|
+
Twitter::User.new(user)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'twitter/photo'
|
2
|
+
|
3
|
+
module Twitter
|
4
|
+
class MediaFactory
|
5
|
+
|
6
|
+
# Instantiates a new media object
|
7
|
+
#
|
8
|
+
# @param attrs [Hash]
|
9
|
+
# @raise [ArgumentError] Error raised when supplied argument is missing a 'type' key.
|
10
|
+
# @return [Twitter::Photo]
|
11
|
+
def self.new(media={})
|
12
|
+
type = media.delete('type')
|
13
|
+
if type
|
14
|
+
Twitter.const_get(type.capitalize.to_sym).new(media)
|
15
|
+
else
|
16
|
+
raise ArgumentError, "argument must have a 'type' key"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'twitter/action'
|
2
|
+
require 'twitter/status'
|
3
|
+
require 'twitter/user'
|
4
|
+
|
5
|
+
module Twitter
|
6
|
+
class Mention < Twitter::Action
|
7
|
+
|
8
|
+
# A collection of users who mentioned a user
|
9
|
+
#
|
10
|
+
# @return [Array<Twitter::User>]
|
11
|
+
def sources
|
12
|
+
@sources = Array(@attrs['sources']).map do |user|
|
13
|
+
Twitter::User.new(user)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# The user who mentioned a user
|
18
|
+
#
|
19
|
+
# @return [Twitter::User]
|
20
|
+
def source
|
21
|
+
@source = sources.first
|
22
|
+
end
|
23
|
+
|
24
|
+
# A collection of statuses that mention a user
|
25
|
+
#
|
26
|
+
# @return [Array<Twitter::Status>]
|
27
|
+
def target_objects
|
28
|
+
@target_objects = Array(@attrs['target_objects']).map do |status|
|
29
|
+
Twitter::Status.new(status)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# A collection containing the mentioned user
|
34
|
+
#
|
35
|
+
# @return [Array<Twitter::User>]
|
36
|
+
def targets
|
37
|
+
@targets = Array(@attrs['targets']).map do |user|
|
38
|
+
Twitter::User.new(user)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|