twitter 4.8.1 → 5.0.0.rc.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 +0 -0
- data/CHANGELOG.md +30 -0
- data/LICENSE.md +1 -1
- data/README.md +386 -266
- data/lib/twitter.rb +4 -39
- data/lib/twitter/arguments.rb +11 -0
- data/lib/twitter/base.rb +89 -68
- data/lib/twitter/client.rb +69 -110
- data/lib/twitter/configuration.rb +7 -3
- data/lib/twitter/creatable.rb +2 -4
- data/lib/twitter/cursor.rb +50 -42
- data/lib/twitter/direct_message.rb +2 -11
- data/lib/twitter/entity/uri.rb +13 -0
- data/lib/twitter/enumerable.rb +15 -0
- data/lib/twitter/error.rb +55 -7
- data/lib/twitter/error/already_favorited.rb +1 -1
- data/lib/twitter/error/already_posted.rb +10 -0
- data/lib/twitter/error/already_retweeted.rb +1 -1
- data/lib/twitter/error/bad_gateway.rb +2 -3
- data/lib/twitter/error/bad_request.rb +2 -2
- data/lib/twitter/error/forbidden.rb +2 -2
- data/lib/twitter/error/gateway_timeout.rb +2 -3
- data/lib/twitter/error/internal_server_error.rb +2 -3
- data/lib/twitter/error/not_acceptable.rb +2 -2
- data/lib/twitter/error/not_found.rb +2 -2
- data/lib/twitter/error/service_unavailable.rb +2 -3
- data/lib/twitter/error/too_many_requests.rb +2 -2
- data/lib/twitter/error/unauthorized.rb +2 -2
- data/lib/twitter/error/unprocessable_entity.rb +2 -2
- data/lib/twitter/factory.rb +2 -8
- data/lib/twitter/geo_factory.rb +2 -2
- data/lib/twitter/geo_results.rb +36 -0
- data/lib/twitter/identity.rb +0 -22
- data/lib/twitter/list.rb +18 -4
- data/lib/twitter/media/photo.rb +3 -3
- data/lib/twitter/media_factory.rb +2 -2
- data/lib/twitter/null_object.rb +24 -0
- data/lib/twitter/oembed.rb +3 -2
- data/lib/twitter/place.rb +15 -9
- data/lib/twitter/profile_banner.rb +5 -3
- data/lib/twitter/rate_limit.rb +1 -17
- data/lib/twitter/relationship.rb +2 -10
- data/lib/twitter/rest/api/direct_messages.rb +135 -0
- data/lib/twitter/rest/api/favorites.rb +120 -0
- data/lib/twitter/rest/api/friends_and_followers.rb +290 -0
- data/lib/twitter/rest/api/help.rb +58 -0
- data/lib/twitter/rest/api/lists.rb +491 -0
- data/lib/twitter/rest/api/oauth.rb +45 -0
- data/lib/twitter/rest/api/places_and_geo.rb +104 -0
- data/lib/twitter/rest/api/saved_searches.rb +91 -0
- data/lib/twitter/rest/api/search.rb +37 -0
- data/lib/twitter/rest/api/spam_reporting.rb +29 -0
- data/lib/twitter/rest/api/suggested_users.rb +51 -0
- data/lib/twitter/rest/api/timelines.rb +202 -0
- data/lib/twitter/rest/api/trends.rb +58 -0
- data/lib/twitter/rest/api/tweets.rb +293 -0
- data/lib/twitter/rest/api/undocumented.rb +52 -0
- data/lib/twitter/rest/api/users.rb +383 -0
- data/lib/twitter/rest/api/utils.rb +219 -0
- data/lib/twitter/rest/client.rb +193 -0
- data/lib/twitter/rest/request/multipart_with_file.rb +36 -0
- data/lib/twitter/rest/response/parse_json.rb +27 -0
- data/lib/twitter/{response → rest/response}/raise_error.rb +8 -11
- data/lib/twitter/search_results.rb +33 -21
- data/lib/twitter/settings.rb +1 -6
- data/lib/twitter/size.rb +1 -1
- data/lib/twitter/streaming/client.rb +77 -0
- data/lib/twitter/streaming/connection.rb +22 -0
- data/lib/twitter/streaming/response.rb +30 -0
- data/lib/twitter/suggestion.rb +4 -2
- data/lib/twitter/token.rb +8 -0
- data/lib/twitter/trend.rb +2 -1
- data/lib/twitter/trend_results.rb +59 -0
- data/lib/twitter/tweet.rb +41 -85
- data/lib/twitter/user.rb +51 -41
- data/lib/twitter/version.rb +4 -4
- data/spec/fixtures/already_posted.json +1 -0
- data/spec/fixtures/ids_list.json +1 -1
- data/spec/fixtures/ids_list2.json +1 -1
- data/spec/fixtures/search.json +1 -1
- data/spec/fixtures/search_malformed.json +1 -1
- data/spec/fixtures/track_streaming.json +3 -0
- data/spec/helper.rb +8 -13
- data/spec/twitter/base_spec.rb +25 -99
- data/spec/twitter/configuration_spec.rb +1 -1
- data/spec/twitter/cursor_spec.rb +13 -31
- data/spec/twitter/direct_message_spec.rb +41 -8
- data/spec/twitter/entity/uri_spec.rb +74 -0
- data/spec/twitter/error_spec.rb +59 -11
- data/spec/twitter/geo/point_spec.rb +1 -1
- data/spec/twitter/geo_factory_spec.rb +3 -3
- data/spec/twitter/geo_results_spec.rb +35 -0
- data/spec/twitter/identifiable_spec.rb +0 -21
- data/spec/twitter/list_spec.rb +51 -8
- data/spec/twitter/media/photo_spec.rb +118 -3
- data/spec/twitter/media_factory_spec.rb +2 -2
- data/spec/twitter/null_object_spec.rb +26 -0
- data/spec/twitter/oembed_spec.rb +69 -45
- data/spec/twitter/place_spec.rb +68 -12
- data/spec/twitter/profile_banner_spec.rb +1 -1
- data/spec/twitter/rate_limit_spec.rb +12 -12
- data/spec/twitter/relationship_spec.rb +31 -9
- data/spec/twitter/{api → rest/api}/direct_messages_spec.rb +22 -9
- data/spec/twitter/{api → rest/api}/favorites_spec.rb +80 -7
- data/spec/twitter/{api → rest/api}/friends_and_followers_spec.rb +104 -65
- data/spec/twitter/{api → rest/api}/geo_spec.rb +10 -10
- data/spec/twitter/{api → rest/api}/help_spec.rb +6 -6
- data/spec/twitter/{api → rest/api}/lists_spec.rb +77 -56
- data/spec/twitter/{api → rest/api}/oauth_spec.rb +6 -6
- data/spec/twitter/{api → rest/api}/saved_searches_spec.rb +7 -7
- data/spec/twitter/{api → rest/api}/search_spec.rb +8 -9
- data/spec/twitter/{api → rest/api}/spam_reporting_spec.rb +3 -3
- data/spec/twitter/{api → rest/api}/suggested_users_spec.rb +5 -5
- data/spec/twitter/{api → rest/api}/timelines_spec.rb +9 -9
- data/spec/twitter/{api → rest/api}/trends_spec.rb +6 -6
- data/spec/twitter/rest/api/tweets_spec.rb +503 -0
- data/spec/twitter/{api → rest/api}/undocumented_spec.rb +19 -45
- data/spec/twitter/{api → rest/api}/users_spec.rb +60 -35
- data/spec/twitter/rest/client_spec.rb +193 -0
- data/spec/twitter/saved_search_spec.rb +11 -0
- data/spec/twitter/search_results_spec.rb +29 -42
- data/spec/twitter/settings_spec.rb +17 -6
- data/spec/twitter/streaming/client_spec.rb +75 -0
- data/spec/twitter/token_spec.rb +16 -0
- data/spec/twitter/trend_results_spec.rb +89 -0
- data/spec/twitter/trend_spec.rb +23 -0
- data/spec/twitter/tweet_spec.rb +122 -115
- data/spec/twitter/user_spec.rb +136 -77
- data/spec/twitter_spec.rb +0 -119
- data/twitter.gemspec +8 -5
- metadata +148 -141
- metadata.gz.sig +0 -0
- data/lib/twitter/action/favorite.rb +0 -19
- data/lib/twitter/action/follow.rb +0 -30
- data/lib/twitter/action/list_member_added.rb +0 -39
- data/lib/twitter/action/mention.rb +0 -46
- data/lib/twitter/action/reply.rb +0 -27
- data/lib/twitter/action/retweet.rb +0 -27
- data/lib/twitter/action/tweet.rb +0 -20
- data/lib/twitter/action_factory.rb +0 -22
- data/lib/twitter/api/arguments.rb +0 -13
- data/lib/twitter/api/direct_messages.rb +0 -148
- data/lib/twitter/api/favorites.rb +0 -126
- data/lib/twitter/api/friends_and_followers.rb +0 -334
- data/lib/twitter/api/help.rb +0 -64
- data/lib/twitter/api/lists.rb +0 -618
- data/lib/twitter/api/oauth.rb +0 -44
- data/lib/twitter/api/places_and_geo.rb +0 -121
- data/lib/twitter/api/saved_searches.rb +0 -99
- data/lib/twitter/api/search.rb +0 -37
- data/lib/twitter/api/spam_reporting.rb +0 -30
- data/lib/twitter/api/suggested_users.rb +0 -55
- data/lib/twitter/api/timelines.rb +0 -214
- data/lib/twitter/api/trends.rb +0 -63
- data/lib/twitter/api/tweets.rb +0 -304
- data/lib/twitter/api/undocumented.rb +0 -97
- data/lib/twitter/api/users.rb +0 -439
- data/lib/twitter/api/utils.rb +0 -187
- data/lib/twitter/configurable.rb +0 -96
- data/lib/twitter/default.rb +0 -102
- data/lib/twitter/entity/url.rb +0 -9
- data/lib/twitter/error/client_error.rb +0 -35
- data/lib/twitter/error/decode_error.rb +0 -9
- data/lib/twitter/error/identity_map_key_error.rb +0 -9
- data/lib/twitter/error/server_error.rb +0 -28
- data/lib/twitter/exceptable.rb +0 -36
- data/lib/twitter/identity_map.rb +0 -22
- data/lib/twitter/request/multipart_with_file.rb +0 -34
- data/lib/twitter/response/parse_json.rb +0 -25
- data/spec/fixtures/about_me.json +0 -1
- data/spec/fixtures/activity_summary.json +0 -1
- data/spec/fixtures/bad_gateway.json +0 -1
- data/spec/fixtures/bad_request.json +0 -1
- data/spec/fixtures/by_friends.json +0 -1
- data/spec/fixtures/end_session.json +0 -1
- data/spec/fixtures/forbidden.json +0 -1
- data/spec/fixtures/internal_server_error.json +0 -1
- data/spec/fixtures/not_acceptable.json +0 -1
- data/spec/fixtures/phoenix_search.phoenix +0 -1
- data/spec/fixtures/resolve.json +0 -1
- data/spec/fixtures/service_unavailable.json +0 -1
- data/spec/fixtures/totals.json +0 -1
- data/spec/fixtures/trends.json +0 -1
- data/spec/fixtures/unauthorized.json +0 -1
- data/spec/fixtures/video_facets.json +0 -1
- data/spec/twitter/action/favorite_spec.rb +0 -29
- data/spec/twitter/action/follow_spec.rb +0 -29
- data/spec/twitter/action/list_member_added_spec.rb +0 -41
- data/spec/twitter/action/mention_spec.rb +0 -52
- data/spec/twitter/action/reply_spec.rb +0 -41
- data/spec/twitter/action/retweet_spec.rb +0 -41
- data/spec/twitter/action_factory_spec.rb +0 -35
- data/spec/twitter/action_spec.rb +0 -16
- data/spec/twitter/api/tweets_spec.rb +0 -285
- data/spec/twitter/client_spec.rb +0 -223
- data/spec/twitter/error/client_error_spec.rb +0 -23
- data/spec/twitter/error/server_error_spec.rb +0 -20
@@ -1,9 +1,9 @@
|
|
1
|
-
require 'twitter/error
|
1
|
+
require 'twitter/error'
|
2
2
|
|
3
3
|
module Twitter
|
4
4
|
class Error
|
5
5
|
# Raised when Twitter returns the HTTP status code 401
|
6
|
-
class Unauthorized < Twitter::Error
|
6
|
+
class Unauthorized < Twitter::Error
|
7
7
|
HTTP_STATUS_CODE = 401
|
8
8
|
end
|
9
9
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require 'twitter/error
|
1
|
+
require 'twitter/error'
|
2
2
|
|
3
3
|
module Twitter
|
4
4
|
class Error
|
5
5
|
# Raised when Twitter returns the HTTP status code 422
|
6
|
-
class UnprocessableEntity < Twitter::Error
|
6
|
+
class UnprocessableEntity < Twitter::Error
|
7
7
|
HTTP_STATUS_CODE = 422
|
8
8
|
end
|
9
9
|
end
|
data/lib/twitter/factory.rb
CHANGED
@@ -1,17 +1,11 @@
|
|
1
1
|
module Twitter
|
2
2
|
class Factory
|
3
3
|
|
4
|
-
|
5
|
-
#
|
6
|
-
# @param attrs [Hash]
|
7
|
-
# @raise [ArgumentError] Error raised when supplied argument is missing an :action key.
|
8
|
-
# @return [Twitter::Action::Favorite, Twitter::Action::Follow, Twitter::Action::ListMemberAdded, Twitter::Action::Mention, Twitter::Action::Reply, Twitter::Action::Retweet]
|
9
|
-
def self.fetch_or_new(method, klass, attrs={})
|
10
|
-
return unless attrs
|
4
|
+
def self.new(method, klass, attrs={})
|
11
5
|
type = attrs.delete(method.to_sym)
|
12
6
|
if type
|
13
7
|
const_name = type.gsub(/\/(.?)/){"::#{$1.upcase}"}.gsub(/(?:^|_)(.)/){$1.upcase}
|
14
|
-
klass.const_get(const_name.to_sym).
|
8
|
+
klass.const_get(const_name.to_sym).new(attrs)
|
15
9
|
else
|
16
10
|
raise ArgumentError, "argument must have :#{method} key"
|
17
11
|
end
|
data/lib/twitter/geo_factory.rb
CHANGED
@@ -5,12 +5,12 @@ require 'twitter/geo/polygon'
|
|
5
5
|
module Twitter
|
6
6
|
class GeoFactory < Twitter::Factory
|
7
7
|
|
8
|
-
#
|
8
|
+
# Construct a new geo object
|
9
9
|
#
|
10
10
|
# @param attrs [Hash]
|
11
11
|
# @raise [ArgumentError] Error raised when supplied argument is missing a :type key.
|
12
12
|
# @return [Twitter::Geo]
|
13
|
-
def self.
|
13
|
+
def self.new(attrs={})
|
14
14
|
super(:type, Twitter::Geo, attrs)
|
15
15
|
end
|
16
16
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'twitter/enumerable'
|
2
|
+
|
3
|
+
module Twitter
|
4
|
+
class GeoResults
|
5
|
+
include Twitter::Enumerable
|
6
|
+
attr_reader :attrs
|
7
|
+
alias to_h attrs
|
8
|
+
alias to_hash attrs
|
9
|
+
alias to_hsh attrs
|
10
|
+
|
11
|
+
# Construct a new SearchResults object from a response hash
|
12
|
+
#
|
13
|
+
# @param response [Hash]
|
14
|
+
# @return [Twitter::Base]
|
15
|
+
def self.from_response(response={})
|
16
|
+
new(response[:body])
|
17
|
+
end
|
18
|
+
|
19
|
+
# Initializes a new SearchResults object
|
20
|
+
#
|
21
|
+
# @param attrs [Hash]
|
22
|
+
# @return [Twitter::GeoResults]
|
23
|
+
def initialize(attrs={})
|
24
|
+
@attrs = attrs
|
25
|
+
@collection = Array(@attrs[:result][:places]).map do |place|
|
26
|
+
Twitter::Place.new(place)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [String]
|
31
|
+
def token
|
32
|
+
@attrs[:token]
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
data/lib/twitter/identity.rb
CHANGED
@@ -1,30 +1,8 @@
|
|
1
1
|
require 'twitter/base'
|
2
|
-
require 'twitter/error/identity_map_key_error'
|
3
2
|
|
4
3
|
module Twitter
|
5
4
|
class Identity < Twitter::Base
|
6
5
|
|
7
|
-
def self.fetch(attrs)
|
8
|
-
return unless identity_map
|
9
|
-
|
10
|
-
id = attrs[:id]
|
11
|
-
if id && object = identity_map.fetch(id)
|
12
|
-
return object.update(attrs)
|
13
|
-
end
|
14
|
-
|
15
|
-
return yield if block_given?
|
16
|
-
raise Twitter::Error::IdentityMapKeyError, "key not found"
|
17
|
-
end
|
18
|
-
|
19
|
-
# Stores an object in the identity map.
|
20
|
-
#
|
21
|
-
# @param object [Object]
|
22
|
-
# @return [Twitter::Identity]
|
23
|
-
def self.store(object)
|
24
|
-
return object unless identity_map
|
25
|
-
identity_map.store(object.id, object)
|
26
|
-
end
|
27
|
-
|
28
6
|
# Initializes a new object
|
29
7
|
#
|
30
8
|
# @param attrs [Hash]
|
data/lib/twitter/list.rb
CHANGED
@@ -5,12 +5,26 @@ module Twitter
|
|
5
5
|
class List < Twitter::Identity
|
6
6
|
include Twitter::Creatable
|
7
7
|
attr_reader :description, :following, :full_name, :member_count,
|
8
|
-
:mode, :name, :slug, :subscriber_count
|
8
|
+
:mode, :name, :slug, :subscriber_count
|
9
|
+
object_attr_reader :User, :user
|
9
10
|
|
10
|
-
# @return [
|
11
|
-
def
|
12
|
-
@
|
11
|
+
# @return [URI] The URI to the list members.
|
12
|
+
def members_uri
|
13
|
+
@members_uri ||= ::URI.parse("https://twitter.com/#{user.screen_name}/#{slug}/members")
|
13
14
|
end
|
15
|
+
alias members_url members_uri
|
16
|
+
|
17
|
+
# @return [URI] The URI to the list subscribers.
|
18
|
+
def subscribers_uri
|
19
|
+
@subscribers_uri ||= ::URI.parse("https://twitter.com/#{user.screen_name}/#{slug}/subscribers")
|
20
|
+
end
|
21
|
+
alias subscribers_url subscribers_uri
|
22
|
+
|
23
|
+
# @return [URI] The URI to the list.
|
24
|
+
def uri
|
25
|
+
@uri ||= ::URI.parse("https://twitter.com/#{user.screen_name}/#{slug}")
|
26
|
+
end
|
27
|
+
alias url uri
|
14
28
|
|
15
29
|
end
|
16
30
|
end
|
data/lib/twitter/media/photo.rb
CHANGED
@@ -3,15 +3,15 @@ require 'twitter/identity'
|
|
3
3
|
module Twitter
|
4
4
|
module Media
|
5
5
|
class Photo < Twitter::Identity
|
6
|
-
attr_reader :
|
7
|
-
|
6
|
+
attr_reader :indices
|
7
|
+
uri_attr_reader :display_uri, :expanded_uri, :media_uri, :media_uri_https, :uri
|
8
8
|
|
9
9
|
# Returns an array of photo sizes
|
10
10
|
#
|
11
11
|
# @return [Array<Twitter::Size>]
|
12
12
|
def sizes
|
13
13
|
@sizes ||= Array(@attrs[:sizes]).inject({}) do |object, (key, value)|
|
14
|
-
object[key] = Twitter::Size.
|
14
|
+
object[key] = Twitter::Size.new(value)
|
15
15
|
object
|
16
16
|
end
|
17
17
|
end
|
@@ -4,12 +4,12 @@ require 'twitter/media/photo'
|
|
4
4
|
module Twitter
|
5
5
|
class MediaFactory < Twitter::Factory
|
6
6
|
|
7
|
-
#
|
7
|
+
# Construct a new media object
|
8
8
|
#
|
9
9
|
# @param attrs [Hash]
|
10
10
|
# @raise [ArgumentError] Error raised when supplied argument is missing a :type key.
|
11
11
|
# @return [Twitter::Media]
|
12
|
-
def self.
|
12
|
+
def self.new(attrs={})
|
13
13
|
super(:type, Twitter::Media, attrs)
|
14
14
|
end
|
15
15
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
module Twitter
|
4
|
+
class NullObject
|
5
|
+
include Singleton
|
6
|
+
|
7
|
+
def nil?
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
def method_missing(*args, &block)
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def respond_to?(method_name, include_private=false)
|
16
|
+
true
|
17
|
+
end if RUBY_VERSION < "1.9"
|
18
|
+
|
19
|
+
def respond_to_missing?(method_name, include_private=false)
|
20
|
+
true
|
21
|
+
end if RUBY_VERSION >= "1.9"
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
data/lib/twitter/oembed.rb
CHANGED
@@ -2,7 +2,8 @@ require 'twitter/base'
|
|
2
2
|
|
3
3
|
module Twitter
|
4
4
|
class OEmbed < Twitter::Base
|
5
|
-
attr_reader :author_name, :
|
6
|
-
:
|
5
|
+
attr_reader :author_name, :cache_age, :height, :html, :provider_name,
|
6
|
+
:type, :version, :width
|
7
|
+
uri_attr_reader :author_uri, :provider_uri, :uri
|
7
8
|
end
|
8
9
|
end
|
data/lib/twitter/place.rb
CHANGED
@@ -2,29 +2,35 @@ require 'twitter/identity'
|
|
2
2
|
|
3
3
|
module Twitter
|
4
4
|
class Place < Twitter::Identity
|
5
|
-
attr_reader :attributes, :country, :full_name, :name, :
|
5
|
+
attr_reader :attributes, :country, :full_name, :name, :woeid
|
6
6
|
alias woe_id woeid
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
7
|
+
object_attr_reader :GeoFactory, :bounding_box
|
8
|
+
object_attr_reader :Place, :contained_within
|
9
|
+
alias contained? contained_within?
|
10
|
+
uri_attr_reader :uri
|
12
11
|
|
13
12
|
# @return [String]
|
14
13
|
def country_code
|
15
|
-
|
14
|
+
memoize(:country_code) do
|
15
|
+
@attrs[:country_code] || @attrs[:countryCode]
|
16
|
+
end
|
16
17
|
end
|
17
18
|
|
18
19
|
# @return [Integer]
|
19
20
|
def parent_id
|
20
|
-
|
21
|
+
memoize(:parent_id) do
|
22
|
+
@attrs[:parentid]
|
23
|
+
end
|
21
24
|
end
|
22
25
|
|
23
26
|
# @return [String]
|
24
27
|
def place_type
|
25
|
-
|
28
|
+
memoize(:place_type) do
|
29
|
+
@attrs[:place_type] || @attrs[:placeType] && @attrs[:placeType][:name]
|
30
|
+
end
|
26
31
|
end
|
27
32
|
|
33
|
+
# return [Integer]
|
28
34
|
def id
|
29
35
|
@attrs[:id] || @attrs[:woeid]
|
30
36
|
end
|
@@ -7,9 +7,11 @@ module Twitter
|
|
7
7
|
#
|
8
8
|
# @return [Array<Twitter::Size>]
|
9
9
|
def sizes
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
memoize(:sizes) do
|
11
|
+
Array(@attrs[:sizes]).inject({}) do |object, (key, value)|
|
12
|
+
object[key] = Twitter::Size.new(value)
|
13
|
+
object
|
14
|
+
end
|
13
15
|
end
|
14
16
|
end
|
15
17
|
|
data/lib/twitter/rate_limit.rb
CHANGED
@@ -1,12 +1,5 @@
|
|
1
1
|
module Twitter
|
2
|
-
class RateLimit
|
3
|
-
attr_reader :attrs
|
4
|
-
alias to_hash attrs
|
5
|
-
|
6
|
-
# @return [Twitter::RateLimit]
|
7
|
-
def initialize(attrs={})
|
8
|
-
@attrs = attrs
|
9
|
-
end
|
2
|
+
class RateLimit < Twitter::Base
|
10
3
|
|
11
4
|
# @return [Integer]
|
12
5
|
def limit
|
@@ -32,14 +25,5 @@ module Twitter
|
|
32
25
|
end
|
33
26
|
alias retry_after reset_in
|
34
27
|
|
35
|
-
# Update the attributes of a RateLimit
|
36
|
-
#
|
37
|
-
# @param attrs [Hash]
|
38
|
-
# @return [Twitter::RateLimit]
|
39
|
-
def update(attrs)
|
40
|
-
@attrs.update(attrs)
|
41
|
-
self
|
42
|
-
end
|
43
|
-
|
44
28
|
end
|
45
29
|
end
|
data/lib/twitter/relationship.rb
CHANGED
@@ -2,6 +2,8 @@ require 'twitter/base'
|
|
2
2
|
|
3
3
|
module Twitter
|
4
4
|
class Relationship < Twitter::Base
|
5
|
+
object_attr_reader :SourceUser, :source
|
6
|
+
object_attr_reader :TargetUser, :target
|
5
7
|
|
6
8
|
# Initializes a new object
|
7
9
|
#
|
@@ -11,16 +13,6 @@ module Twitter
|
|
11
13
|
@attrs = attrs[:relationship]
|
12
14
|
end
|
13
15
|
|
14
|
-
# @return [Twitter::SourceUser]
|
15
|
-
def source
|
16
|
-
@source ||= Twitter::SourceUser.fetch_or_new(@attrs[:source])
|
17
|
-
end
|
18
|
-
|
19
|
-
# @return [Twitter::TargetUser]
|
20
|
-
def target
|
21
|
-
@target ||= Twitter::TargetUser.fetch_or_new(@attrs[:target])
|
22
|
-
end
|
23
|
-
|
24
16
|
# Update the attributes of a Relationship
|
25
17
|
#
|
26
18
|
# @param attrs [Hash]
|
@@ -0,0 +1,135 @@
|
|
1
|
+
require 'twitter/arguments'
|
2
|
+
require 'twitter/direct_message'
|
3
|
+
require 'twitter/rest/api/utils'
|
4
|
+
require 'twitter/user'
|
5
|
+
|
6
|
+
module Twitter
|
7
|
+
module REST
|
8
|
+
module API
|
9
|
+
module DirectMessages
|
10
|
+
include Twitter::REST::API::Utils
|
11
|
+
|
12
|
+
# Returns the 20 most recent direct messages sent to the authenticating user
|
13
|
+
#
|
14
|
+
# @see https://dev.twitter.com/docs/api/1.1/get/direct_messages
|
15
|
+
# @note This method requires an access token with RWD (read, write & direct message) permissions. Consult The Application Permission Model for more information.
|
16
|
+
# @rate_limited Yes
|
17
|
+
# @authentication Requires user context
|
18
|
+
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
19
|
+
# @return [Array<Twitter::DirectMessage>] Direct messages sent to the authenticating user.
|
20
|
+
# @param options [Hash] A customizable set of options.
|
21
|
+
# @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID.
|
22
|
+
# @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID.
|
23
|
+
# @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200.
|
24
|
+
# @option options [Integer] :page Specifies the page of results to retrieve.
|
25
|
+
def direct_messages_received(options={})
|
26
|
+
objects_from_response(Twitter::DirectMessage, :get, "/1.1/direct_messages.json", options)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Returns the 20 most recent direct messages sent by the authenticating user
|
30
|
+
#
|
31
|
+
# @see https://dev.twitter.com/docs/api/1.1/get/direct_messages/sent
|
32
|
+
# @note This method requires an access token with RWD (read, write & direct message) permissions. Consult The Application Permission Model for more information.
|
33
|
+
# @rate_limited Yes
|
34
|
+
# @authentication Requires user context
|
35
|
+
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
36
|
+
# @return [Array<Twitter::DirectMessage>] Direct messages sent by the authenticating user.
|
37
|
+
# @param options [Hash] A customizable set of options.
|
38
|
+
# @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID.
|
39
|
+
# @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID.
|
40
|
+
# @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200.
|
41
|
+
# @option options [Integer] :page Specifies the page of results to retrieve.
|
42
|
+
def direct_messages_sent(options={})
|
43
|
+
objects_from_response(Twitter::DirectMessage, :get, "/1.1/direct_messages/sent.json", options)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Returns a direct message
|
47
|
+
#
|
48
|
+
# @see https://dev.twitter.com/docs/api/1.1/get/direct_messages/show
|
49
|
+
# @note This method requires an access token with RWD (read, write & direct message) permissions. Consult The Application Permission Model for more information.
|
50
|
+
# @rate_limited Yes
|
51
|
+
# @authentication Requires user context
|
52
|
+
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
53
|
+
# @return [Twitter::DirectMessage] The requested messages.
|
54
|
+
# @param id [Integer] A direct message ID.
|
55
|
+
# @param options [Hash] A customizable set of options.
|
56
|
+
def direct_message(id, options={})
|
57
|
+
options[:id] = id
|
58
|
+
object_from_response(Twitter::DirectMessage, :get, "/1.1/direct_messages/show.json", options)
|
59
|
+
end
|
60
|
+
|
61
|
+
# @note This method requires an access token with RWD (read, write & direct message) permissions. Consult The Application Permission Model for more information.
|
62
|
+
# @rate_limited Yes
|
63
|
+
# @authentication Requires user context
|
64
|
+
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
65
|
+
# @return [Array<Twitter::DirectMessage>] The requested messages.
|
66
|
+
# @overload direct_messages(options={})
|
67
|
+
# Returns the 20 most recent direct messages sent to the authenticating user
|
68
|
+
#
|
69
|
+
# @see https://dev.twitter.com/docs/api/1.1/get/direct_messages
|
70
|
+
# @param options [Hash] A customizable set of options.
|
71
|
+
# @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID.
|
72
|
+
# @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID.
|
73
|
+
# @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200.
|
74
|
+
# @option options [Integer] :page Specifies the page of results to retrieve.
|
75
|
+
# @overload direct_messages(*ids)
|
76
|
+
# Returns direct messages
|
77
|
+
#
|
78
|
+
# @see https://dev.twitter.com/docs/api/1.1/get/direct_messages/show
|
79
|
+
# @param ids [Enumerable<Integer>] A collection of direct message IDs.
|
80
|
+
# @overload direct_messages(*ids, options)
|
81
|
+
# Returns direct messages
|
82
|
+
#
|
83
|
+
# @see https://dev.twitter.com/docs/api/1.1/get/direct_messages/show
|
84
|
+
# @param ids [Enumerable<Integer>] A collection of direct message IDs.
|
85
|
+
# @param options [Hash] A customizable set of options.
|
86
|
+
def direct_messages(*args)
|
87
|
+
arguments = Twitter::Arguments.new(args)
|
88
|
+
if arguments.empty?
|
89
|
+
direct_messages_received(arguments.options)
|
90
|
+
else
|
91
|
+
arguments.flatten.threaded_map do |id|
|
92
|
+
direct_message(id, arguments.options)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# Destroys direct messages
|
98
|
+
#
|
99
|
+
# @see https://dev.twitter.com/docs/api/1.1/post/direct_messages/destroy
|
100
|
+
# @note This method requires an access token with RWD (read, write & direct message) permissions. Consult The Application Permission Model for more information.
|
101
|
+
# @rate_limited No
|
102
|
+
# @authentication Requires user context
|
103
|
+
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
104
|
+
# @return [Array<Twitter::DirectMessage>] Deleted direct message.
|
105
|
+
# @overload direct_message_destroy(*ids)
|
106
|
+
# @param ids [Enumerable<Integer>] A collection of direct message IDs.
|
107
|
+
# @overload direct_message_destroy(*ids, options)
|
108
|
+
# @param ids [Enumerable<Integer>] A collection of direct message IDs.
|
109
|
+
# @param options [Hash] A customizable set of options.
|
110
|
+
def direct_message_destroy(*args)
|
111
|
+
threaded_objects_from_response(Twitter::DirectMessage, :post, "/1.1/direct_messages/destroy.json", args)
|
112
|
+
end
|
113
|
+
|
114
|
+
# Sends a new direct message to the specified user from the authenticating user
|
115
|
+
#
|
116
|
+
# @see https://dev.twitter.com/docs/api/1.1/post/direct_messages/new
|
117
|
+
# @rate_limited No
|
118
|
+
# @authentication Requires user context
|
119
|
+
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
120
|
+
# @return [Twitter::DirectMessage] The sent message.
|
121
|
+
# @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object.
|
122
|
+
# @param text [String] The text of your direct message, up to 140 characters.
|
123
|
+
# @param options [Hash] A customizable set of options.
|
124
|
+
def direct_message_create(user, text, options={})
|
125
|
+
merge_user!(options, user)
|
126
|
+
options[:text] = text
|
127
|
+
object_from_response(Twitter::DirectMessage, :post, "/1.1/direct_messages/new.json", options)
|
128
|
+
end
|
129
|
+
alias d direct_message_create
|
130
|
+
alias m direct_message_create
|
131
|
+
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|