twitter 7.0.0 → 8.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -4
- data/README.md +4 -6
- data/lib/twitter/base.rb +11 -11
- data/lib/twitter/basic_user.rb +3 -2
- data/lib/twitter/client.rb +3 -3
- data/lib/twitter/creatable.rb +2 -2
- data/lib/twitter/cursor.rb +3 -3
- data/lib/twitter/direct_message.rb +4 -5
- data/lib/twitter/direct_message_event.rb +3 -3
- data/lib/twitter/direct_messages/welcome_message.rb +3 -3
- data/lib/twitter/direct_messages/welcome_message_rule.rb +2 -2
- data/lib/twitter/direct_messages/welcome_message_rule_wrapper.rb +3 -3
- data/lib/twitter/direct_messages/welcome_message_wrapper.rb +3 -3
- data/lib/twitter/entities.rb +6 -6
- data/lib/twitter/entity/hashtag.rb +1 -1
- data/lib/twitter/entity/symbol.rb +1 -1
- data/lib/twitter/entity/uri.rb +1 -1
- data/lib/twitter/entity/user_mention.rb +1 -1
- data/lib/twitter/entity.rb +1 -1
- data/lib/twitter/enumerable.rb +1 -3
- data/lib/twitter/error.rb +7 -6
- data/lib/twitter/factory.rb +1 -1
- data/lib/twitter/geo/point.rb +1 -1
- data/lib/twitter/geo/polygon.rb +1 -1
- data/lib/twitter/geo.rb +2 -2
- data/lib/twitter/geo_factory.rb +3 -3
- data/lib/twitter/geo_results.rb +2 -2
- data/lib/twitter/headers.rb +4 -4
- data/lib/twitter/identity.rb +2 -2
- data/lib/twitter/language.rb +1 -1
- data/lib/twitter/list.rb +3 -2
- data/lib/twitter/media/animated_gif.rb +1 -1
- data/lib/twitter/media/photo.rb +2 -2
- data/lib/twitter/media/video.rb +3 -3
- data/lib/twitter/media/video_info.rb +2 -2
- data/lib/twitter/media_factory.rb +4 -4
- data/lib/twitter/metadata.rb +1 -1
- data/lib/twitter/null_object.rb +4 -4
- data/lib/twitter/oembed.rb +2 -1
- data/lib/twitter/place.rb +3 -3
- data/lib/twitter/premium_search_results.rb +5 -5
- data/lib/twitter/profile.rb +8 -8
- data/lib/twitter/profile_banner.rb +2 -2
- data/lib/twitter/rate_limit.rb +4 -4
- data/lib/twitter/relationship.rb +2 -1
- data/lib/twitter/rest/account_activity.rb +3 -3
- data/lib/twitter/rest/api.rb +19 -19
- data/lib/twitter/rest/client.rb +4 -4
- data/lib/twitter/rest/direct_messages/welcome_messages.rb +13 -13
- data/lib/twitter/rest/direct_messages.rb +17 -17
- data/lib/twitter/rest/favorites.rb +15 -19
- data/lib/twitter/rest/form_encoder.rb +27 -0
- data/lib/twitter/rest/friends_and_followers.rb +21 -21
- data/lib/twitter/rest/help.rb +6 -18
- data/lib/twitter/rest/lists.rb +32 -32
- data/lib/twitter/rest/oauth.rb +8 -8
- data/lib/twitter/rest/places_and_geo.rb +6 -6
- data/lib/twitter/rest/premium_search.rb +3 -3
- data/lib/twitter/rest/request.rb +28 -21
- data/lib/twitter/rest/saved_searches.rb +6 -6
- data/lib/twitter/rest/search.rb +3 -3
- data/lib/twitter/rest/spam_reporting.rb +3 -3
- data/lib/twitter/rest/suggested_users.rb +5 -5
- data/lib/twitter/rest/timelines.rb +7 -7
- data/lib/twitter/rest/trends.rb +7 -7
- data/lib/twitter/rest/tweets.rb +19 -23
- data/lib/twitter/rest/undocumented.rb +7 -7
- data/lib/twitter/rest/upload_utils.rb +13 -13
- data/lib/twitter/rest/users.rb +32 -32
- data/lib/twitter/rest/utils.rb +17 -17
- data/lib/twitter/saved_search.rb +2 -2
- data/lib/twitter/search_results.rb +6 -6
- data/lib/twitter/settings.rb +2 -1
- data/lib/twitter/size.rb +2 -2
- data/lib/twitter/source_user.rb +1 -1
- data/lib/twitter/streaming/client.rb +14 -14
- data/lib/twitter/streaming/connection.rb +4 -5
- data/lib/twitter/streaming/message_parser.rb +6 -6
- data/lib/twitter/streaming/response.rb +11 -10
- data/lib/twitter/suggestion.rb +3 -3
- data/lib/twitter/target_user.rb +1 -1
- data/lib/twitter/trend.rb +3 -2
- data/lib/twitter/trend_results.rb +5 -5
- data/lib/twitter/tweet.rb +3 -3
- data/lib/twitter/user.rb +9 -9
- data/lib/twitter/utils.rb +2 -2
- data/lib/twitter/variant.rb +2 -1
- data/lib/twitter/version.rb +3 -3
- data/lib/twitter.rb +36 -36
- data/twitter.gemspec +19 -18
- metadata +23 -22
- data/lib/twitter/configuration.rb +0 -27
data/lib/twitter/profile.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "addressable/uri"
|
2
|
+
require "cgi"
|
3
|
+
require "memoizable"
|
4
4
|
|
5
5
|
module Twitter
|
6
6
|
module Profile
|
7
|
-
PROFILE_IMAGE_SUFFIX_REGEX = /_normal(\.gif|\.jpe?g|\.png)$/i
|
8
|
-
PREDICATE_URI_METHOD_REGEX = /_uri
|
7
|
+
PROFILE_IMAGE_SUFFIX_REGEX = /_normal(\.gif|\.jpe?g|\.png)$/i
|
8
|
+
PREDICATE_URI_METHOD_REGEX = /_uri\?$/
|
9
9
|
include Memoizable
|
10
10
|
|
11
11
|
class << self
|
@@ -27,7 +27,7 @@ module Twitter
|
|
27
27
|
# @param size [String, Symbol] The size of the image. Must be one of: 'mobile', 'mobile_retina', 'web', 'web_retina', 'ipad', or 'ipad_retina'
|
28
28
|
# @return [Addressable::URI]
|
29
29
|
def profile_banner_uri(size = :web)
|
30
|
-
parse_uri(insecure_uri([@attrs[:profile_banner_url], size].join(
|
30
|
+
parse_uri(insecure_uri([@attrs[:profile_banner_url], size].join("/"))) unless @attrs[:profile_banner_url].nil?
|
31
31
|
end
|
32
32
|
alias profile_banner_url profile_banner_uri
|
33
33
|
|
@@ -36,7 +36,7 @@ module Twitter
|
|
36
36
|
# @param size [String, Symbol] The size of the image. Must be one of: 'mobile', 'mobile_retina', 'web', 'web_retina', 'ipad', or 'ipad_retina'
|
37
37
|
# @return [Addressable::URI]
|
38
38
|
def profile_banner_uri_https(size = :web)
|
39
|
-
parse_uri([@attrs[:profile_banner_url], size].join(
|
39
|
+
parse_uri([@attrs[:profile_banner_url], size].join("/")) unless @attrs[:profile_banner_url].nil?
|
40
40
|
end
|
41
41
|
alias profile_banner_url_https profile_banner_uri_https
|
42
42
|
|
@@ -85,7 +85,7 @@ module Twitter
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def insecure_uri(uri)
|
88
|
-
uri.to_s.sub(/^https/i,
|
88
|
+
uri.to_s.sub(/^https/i, "http")
|
89
89
|
end
|
90
90
|
|
91
91
|
def profile_image_suffix(size)
|
data/lib/twitter/rate_limit.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "memoizable"
|
2
2
|
|
3
3
|
module Twitter
|
4
4
|
class RateLimit < Twitter::Base
|
@@ -6,21 +6,21 @@ module Twitter
|
|
6
6
|
|
7
7
|
# @return [Integer]
|
8
8
|
def limit
|
9
|
-
limit = @attrs[
|
9
|
+
limit = @attrs["x-rate-limit-limit"]
|
10
10
|
limit&.to_i
|
11
11
|
end
|
12
12
|
memoize :limit
|
13
13
|
|
14
14
|
# @return [Integer]
|
15
15
|
def remaining
|
16
|
-
remaining = @attrs[
|
16
|
+
remaining = @attrs["x-rate-limit-remaining"]
|
17
17
|
remaining&.to_i
|
18
18
|
end
|
19
19
|
memoize :remaining
|
20
20
|
|
21
21
|
# @return [Time]
|
22
22
|
def reset_at
|
23
|
-
reset = @attrs[
|
23
|
+
reset = @attrs["x-rate-limit-reset"]
|
24
24
|
Time.at(reset.to_i).utc if reset
|
25
25
|
end
|
26
26
|
memoize :reset_at
|
data/lib/twitter/relationship.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "twitter/base"
|
2
2
|
|
3
3
|
module Twitter
|
4
4
|
class Relationship < Twitter::Base
|
@@ -10,6 +10,7 @@ module Twitter
|
|
10
10
|
# @param attrs [Hash]
|
11
11
|
# @return [Twitter::Relationship]
|
12
12
|
def initialize(attrs = {})
|
13
|
+
super
|
13
14
|
@attrs = attrs[:relationship]
|
14
15
|
end
|
15
16
|
end
|
data/lib/twitter/rest/api.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
1
|
+
require "twitter/rest/account_activity"
|
2
|
+
require "twitter/rest/direct_messages"
|
3
|
+
require "twitter/rest/direct_messages/welcome_messages"
|
4
|
+
require "twitter/rest/favorites"
|
5
|
+
require "twitter/rest/friends_and_followers"
|
6
|
+
require "twitter/rest/help"
|
7
|
+
require "twitter/rest/lists"
|
8
|
+
require "twitter/rest/oauth"
|
9
|
+
require "twitter/rest/places_and_geo"
|
10
|
+
require "twitter/rest/saved_searches"
|
11
|
+
require "twitter/rest/search"
|
12
|
+
require "twitter/rest/premium_search"
|
13
|
+
require "twitter/rest/spam_reporting"
|
14
|
+
require "twitter/rest/suggested_users"
|
15
|
+
require "twitter/rest/timelines"
|
16
|
+
require "twitter/rest/trends"
|
17
|
+
require "twitter/rest/tweets"
|
18
|
+
require "twitter/rest/undocumented"
|
19
|
+
require "twitter/rest/users"
|
20
20
|
|
21
21
|
module Twitter
|
22
22
|
module REST
|
data/lib/twitter/rest/client.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require "twitter/client"
|
2
|
+
require "twitter/rest/api"
|
3
|
+
require "twitter/rest/request"
|
4
|
+
require "twitter/rest/utils"
|
5
5
|
|
6
6
|
module Twitter
|
7
7
|
module REST
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require "twitter/arguments"
|
2
|
+
require "twitter/rest/upload_utils"
|
3
|
+
require "twitter/rest/utils"
|
4
|
+
require "twitter/utils"
|
5
5
|
|
6
6
|
module Twitter
|
7
7
|
module REST
|
@@ -22,12 +22,12 @@ module Twitter
|
|
22
22
|
},
|
23
23
|
}
|
24
24
|
json_options[:welcome_message][:name] = name if name
|
25
|
-
welcome_message_wrapper = perform_request_with_object(:json_post,
|
25
|
+
welcome_message_wrapper = perform_request_with_object(:json_post, "/1.1/direct_messages/welcome_messages/new.json", json_options.merge!(options), Twitter::DirectMessages::WelcomeMessageWrapper)
|
26
26
|
welcome_message_wrapper.welcome_message
|
27
27
|
end
|
28
28
|
|
29
29
|
def destroy_welcome_message(*ids)
|
30
|
-
perform_requests(:delete,
|
30
|
+
perform_requests(:delete, "/1.1/direct_messages/welcome_messages/destroy.json", ids)
|
31
31
|
end
|
32
32
|
|
33
33
|
def update_welcome_message(welcome_message_id, text, options = {})
|
@@ -39,20 +39,20 @@ module Twitter
|
|
39
39
|
text: text,
|
40
40
|
},
|
41
41
|
}
|
42
|
-
welcome_message_wrapper = perform_request_with_object(:json_put,
|
42
|
+
welcome_message_wrapper = perform_request_with_object(:json_put, "/1.1/direct_messages/welcome_messages/update.json", json_options.merge!(options), Twitter::DirectMessages::WelcomeMessageWrapper, params)
|
43
43
|
welcome_message_wrapper.welcome_message
|
44
44
|
end
|
45
45
|
|
46
46
|
def welcome_message(id, options = {})
|
47
47
|
options = options.dup
|
48
48
|
options[:id] = id
|
49
|
-
welcome_message_wrapper = perform_get_with_object(
|
49
|
+
welcome_message_wrapper = perform_get_with_object("/1.1/direct_messages/welcome_messages/show.json", options, Twitter::DirectMessages::WelcomeMessageWrapper)
|
50
50
|
welcome_message_wrapper.welcome_message
|
51
51
|
end
|
52
52
|
|
53
53
|
def welcome_message_list(options = {})
|
54
54
|
limit = options.fetch(:count, 20)
|
55
|
-
welcome_message_wrappers = perform_get_with_cursor(
|
55
|
+
welcome_message_wrappers = perform_get_with_cursor("/1.1/direct_messages/welcome_messages/list.json", options.merge!(no_default_cursor: true, count: 50, limit: limit), :welcome_messages, Twitter::DirectMessages::WelcomeMessageWrapper)
|
56
56
|
welcome_message_wrappers.collect(&:welcome_message)
|
57
57
|
end
|
58
58
|
|
@@ -64,24 +64,24 @@ module Twitter
|
|
64
64
|
welcome_message_id: welcome_message_id,
|
65
65
|
},
|
66
66
|
}
|
67
|
-
rule_wrapper = perform_request_with_object(:json_post,
|
67
|
+
rule_wrapper = perform_request_with_object(:json_post, "/1.1/direct_messages/welcome_messages/rules/new.json", json_options.merge!(options), Twitter::DirectMessages::WelcomeMessageRuleWrapper)
|
68
68
|
rule_wrapper.welcome_message_rule
|
69
69
|
end
|
70
70
|
|
71
71
|
def destroy_welcome_message_rule(*ids)
|
72
|
-
perform_requests(:delete,
|
72
|
+
perform_requests(:delete, "/1.1/direct_messages/welcome_messages/rules/destroy.json", ids)
|
73
73
|
end
|
74
74
|
|
75
75
|
def welcome_message_rule(id, options = {})
|
76
76
|
options = options.dup
|
77
77
|
options[:id] = id
|
78
|
-
rule_wrapper = perform_get_with_object(
|
78
|
+
rule_wrapper = perform_get_with_object("/1.1/direct_messages/welcome_messages/rules/show.json", options, Twitter::DirectMessages::WelcomeMessageRuleWrapper)
|
79
79
|
rule_wrapper.welcome_message_rule
|
80
80
|
end
|
81
81
|
|
82
82
|
def welcome_message_rule_list(options = {})
|
83
83
|
limit = options.fetch(:count, 20)
|
84
|
-
rule_wrappers = perform_get_with_cursor(
|
84
|
+
rule_wrappers = perform_get_with_cursor("/1.1/direct_messages/welcome_messages/rules/list.json", options.merge!(no_default_cursor: true, count: 50, limit: limit), :welcome_message_rules, Twitter::DirectMessages::WelcomeMessageRuleWrapper)
|
85
85
|
rule_wrappers.collect(&:welcome_message_rule)
|
86
86
|
end
|
87
87
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
1
|
+
require "twitter/arguments"
|
2
|
+
require "twitter/direct_message"
|
3
|
+
require "twitter/direct_message_event"
|
4
|
+
require "twitter/rest/upload_utils"
|
5
|
+
require "twitter/rest/utils"
|
6
|
+
require "twitter/user"
|
7
|
+
require "twitter/utils"
|
8
8
|
|
9
9
|
module Twitter
|
10
10
|
module REST
|
@@ -25,7 +25,7 @@ module Twitter
|
|
25
25
|
# @option options [String] :cursor Specifies the cursor position of results to retrieve.
|
26
26
|
def direct_messages_events(options = {})
|
27
27
|
limit = options.fetch(:count, 20)
|
28
|
-
perform_get_with_cursor(
|
28
|
+
perform_get_with_cursor("/1.1/direct_messages/events/list.json", options.merge!(no_default_cursor: true, count: 50, limit: limit), :events, Twitter::DirectMessageEvent)
|
29
29
|
end
|
30
30
|
|
31
31
|
# Returns all Direct Messages for the authenticated user (both sent and received) within the last 30 days. Sorted in reverse-chronological order.
|
@@ -102,7 +102,7 @@ module Twitter
|
|
102
102
|
def direct_message_event(id, options = {})
|
103
103
|
options = options.dup
|
104
104
|
options[:id] = id
|
105
|
-
perform_get_with_object(
|
105
|
+
perform_get_with_object("/1.1/direct_messages/events/show.json", options, Twitter::DirectMessageEvent)
|
106
106
|
end
|
107
107
|
|
108
108
|
# Returns direct messages specified in arguments, or, if no arguments are given, returns direct messages received by authenticating user
|
@@ -153,7 +153,7 @@ module Twitter
|
|
153
153
|
# @param ids [Enumerable<Integer>] A collection of direct message IDs.
|
154
154
|
def destroy_direct_message(*ids)
|
155
155
|
pmap(ids) do |id|
|
156
|
-
perform_requests(:delete,
|
156
|
+
perform_requests(:delete, "/1.1/direct_messages/events/destroy.json", id: id)
|
157
157
|
end
|
158
158
|
nil
|
159
159
|
end
|
@@ -169,7 +169,7 @@ module Twitter
|
|
169
169
|
# @param text [String] The text of your direct message, up to 10,000 characters.
|
170
170
|
# @param options [Hash] A customizable set of options.
|
171
171
|
def create_direct_message(user_id, text, options = {})
|
172
|
-
event = perform_request_with_object(:json_post,
|
172
|
+
event = perform_request_with_object(:json_post, "/1.1/direct_messages/events/new.json", format_json_options(user_id, text, options), Twitter::DirectMessageEvent)
|
173
173
|
event.direct_message
|
174
174
|
end
|
175
175
|
alias d create_direct_message
|
@@ -190,8 +190,8 @@ module Twitter
|
|
190
190
|
def create_direct_message_event(*args)
|
191
191
|
arguments = Twitter::Arguments.new(args)
|
192
192
|
options = arguments.options.dup
|
193
|
-
options[:event] = {type:
|
194
|
-
response = Twitter::REST::Request.new(self, :json_post,
|
193
|
+
options[:event] = {type: "message_create", message_create: {target: {recipient_id: extract_id(arguments[0])}, message_data: {text: arguments[1]}}} if arguments.length >= 2
|
194
|
+
response = Twitter::REST::Request.new(self, :json_post, "/1.1/direct_messages/events/new.json", options).perform
|
195
195
|
Twitter::DirectMessageEvent.new(response[:event])
|
196
196
|
end
|
197
197
|
|
@@ -209,17 +209,17 @@ module Twitter
|
|
209
209
|
# @param media [File] A media file (PNG, JPEG, GIF or MP4).
|
210
210
|
# @param options [Hash] A customizable set of options.
|
211
211
|
def create_direct_message_event_with_media(user, text, media, options = {})
|
212
|
-
media_id = upload(media, media_category_prefix:
|
212
|
+
media_id = upload(media, media_category_prefix: "dm")[:media_id]
|
213
213
|
options = options.dup
|
214
|
-
options[:event] = {type:
|
215
|
-
response = Twitter::REST::Request.new(self, :json_post,
|
214
|
+
options[:event] = {type: "message_create", message_create: {target: {recipient_id: extract_id(user)}, message_data: {text: text, attachment: {type: "media", media: {id: media_id}}}}}
|
215
|
+
response = Twitter::REST::Request.new(self, :json_post, "/1.1/direct_messages/events/new.json", options).perform
|
216
216
|
Twitter::DirectMessageEvent.new(response[:event])
|
217
217
|
end
|
218
218
|
|
219
219
|
private
|
220
220
|
|
221
221
|
def format_json_options(user_id, text, options)
|
222
|
-
{
|
222
|
+
{event: {type: "message_create", message_create: {target: {recipient_id: user_id}, message_data: {text: text}.merge(options)}}}
|
223
223
|
end
|
224
224
|
end
|
225
225
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
1
|
+
require "twitter/arguments"
|
2
|
+
require "twitter/error"
|
3
|
+
require "twitter/rest/utils"
|
4
|
+
require "twitter/tweet"
|
5
|
+
require "twitter/user"
|
6
|
+
require "twitter/utils"
|
7
7
|
|
8
8
|
module Twitter
|
9
9
|
module REST
|
@@ -32,7 +32,7 @@ module Twitter
|
|
32
32
|
def favorites(*args)
|
33
33
|
arguments = Twitter::Arguments.new(args)
|
34
34
|
merge_user!(arguments.options, arguments.pop) if arguments.last
|
35
|
-
perform_get_with_objects(
|
35
|
+
perform_get_with_objects("/1.1/favorites/list.json", arguments.options, Twitter::Tweet)
|
36
36
|
end
|
37
37
|
|
38
38
|
# Un-favorites the specified Tweets as the authenticating user
|
@@ -50,11 +50,9 @@ module Twitter
|
|
50
50
|
def unfavorite(*args)
|
51
51
|
arguments = Twitter::Arguments.new(args)
|
52
52
|
pmap(arguments) do |tweet|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
next
|
57
|
-
end
|
53
|
+
perform_post_with_object("/1.1/favorites/destroy.json", arguments.options.merge(id: extract_id(tweet)), Twitter::Tweet)
|
54
|
+
rescue Twitter::Error::NotFound
|
55
|
+
next
|
58
56
|
end.compact
|
59
57
|
end
|
60
58
|
alias destroy_favorite unfavorite
|
@@ -73,7 +71,7 @@ module Twitter
|
|
73
71
|
# @param tweets [Enumerable<Integer, String, URI, Twitter::Tweet>] A collection of Tweet IDs, URIs, or objects.
|
74
72
|
# @param options [Hash] A customizable set of options.
|
75
73
|
def unfavorite!(*args)
|
76
|
-
parallel_objects_from_response(Twitter::Tweet, :post,
|
74
|
+
parallel_objects_from_response(Twitter::Tweet, :post, "/1.1/favorites/destroy.json", args)
|
77
75
|
end
|
78
76
|
|
79
77
|
# Favorites the specified Tweets as the authenticating user
|
@@ -91,11 +89,9 @@ module Twitter
|
|
91
89
|
def favorite(*args)
|
92
90
|
arguments = Twitter::Arguments.new(args)
|
93
91
|
pmap(arguments) do |tweet|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
next
|
98
|
-
end
|
92
|
+
perform_post_with_object("/1.1/favorites/create.json", arguments.options.merge(id: extract_id(tweet)), Twitter::Tweet)
|
93
|
+
rescue Twitter::Error::AlreadyFavorited, Twitter::Error::NotFound
|
94
|
+
next
|
99
95
|
end.compact
|
100
96
|
end
|
101
97
|
alias fav favorite
|
@@ -118,7 +114,7 @@ module Twitter
|
|
118
114
|
def favorite!(*args)
|
119
115
|
arguments = Twitter::Arguments.new(args)
|
120
116
|
pmap(arguments) do |tweet|
|
121
|
-
perform_post_with_object(
|
117
|
+
perform_post_with_object("/1.1/favorites/create.json", arguments.options.merge(id: extract_id(tweet)), Twitter::Tweet)
|
122
118
|
end
|
123
119
|
end
|
124
120
|
alias create_favorite! favorite!
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Twitter
|
2
|
+
module REST
|
3
|
+
class FormEncoder
|
4
|
+
UNESCAPED_CHARS = /[^a-z0-9\-._~]/i
|
5
|
+
|
6
|
+
def self.encode(data)
|
7
|
+
data.collect do |k, v|
|
8
|
+
if v.nil?
|
9
|
+
::URI::DEFAULT_PARSER.escape(k.to_s, UNESCAPED_CHARS)
|
10
|
+
elsif v.respond_to?(:to_ary)
|
11
|
+
v.to_ary.collect do |w|
|
12
|
+
str = ::URI::DEFAULT_PARSER.escape(k.to_s, UNESCAPED_CHARS)
|
13
|
+
unless w.nil?
|
14
|
+
str << "="
|
15
|
+
str << ::URI::DEFAULT_PARSER.escape(w.to_s, UNESCAPED_CHARS)
|
16
|
+
end
|
17
|
+
end.join("&")
|
18
|
+
else
|
19
|
+
str = ::URI::DEFAULT_PARSER.escape(k.to_s, UNESCAPED_CHARS)
|
20
|
+
str << "="
|
21
|
+
str << ::URI::DEFAULT_PARSER.escape(v.to_s, UNESCAPED_CHARS)
|
22
|
+
end
|
23
|
+
end.join("&")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
1
|
+
require "twitter/arguments"
|
2
|
+
require "twitter/cursor"
|
3
|
+
require "twitter/relationship"
|
4
|
+
require "twitter/rest/request"
|
5
|
+
require "twitter/rest/utils"
|
6
|
+
require "twitter/user"
|
7
|
+
require "twitter/utils"
|
8
8
|
|
9
9
|
module Twitter
|
10
10
|
module REST
|
@@ -27,7 +27,7 @@ module Twitter
|
|
27
27
|
# @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object.
|
28
28
|
# @param options [Hash] A customizable set of options.
|
29
29
|
def friend_ids(*args)
|
30
|
-
cursor_from_response_with_user(:ids, nil,
|
30
|
+
cursor_from_response_with_user(:ids, nil, "/1.1/friends/ids.json", args)
|
31
31
|
end
|
32
32
|
|
33
33
|
# @see https://dev.twitter.com/rest/reference/get/followers/ids
|
@@ -45,7 +45,7 @@ module Twitter
|
|
45
45
|
# @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object.
|
46
46
|
# @param options [Hash] A customizable set of options.
|
47
47
|
def follower_ids(*args)
|
48
|
-
cursor_from_response_with_user(:ids, nil,
|
48
|
+
cursor_from_response_with_user(:ids, nil, "/1.1/followers/ids.json", args)
|
49
49
|
end
|
50
50
|
|
51
51
|
# Returns the relationship of the authenticating user to the comma separated list of up to 100 screen_names or user_ids provided. Values for connections can be: following, following_requested, followed_by, none.
|
@@ -63,7 +63,7 @@ module Twitter
|
|
63
63
|
def friendships(*args)
|
64
64
|
arguments = Twitter::Arguments.new(args)
|
65
65
|
merge_users!(arguments.options, arguments)
|
66
|
-
perform_get_with_objects(
|
66
|
+
perform_get_with_objects("/1.1/friendships/lookup.json", arguments.options, Twitter::User)
|
67
67
|
end
|
68
68
|
|
69
69
|
# Returns an array of numeric IDs for every user who has a pending request to follow the authenticating user
|
@@ -75,7 +75,7 @@ module Twitter
|
|
75
75
|
# @return [Twitter::Cursor]
|
76
76
|
# @param options [Hash] A customizable set of options.
|
77
77
|
def friendships_incoming(options = {})
|
78
|
-
perform_get_with_cursor(
|
78
|
+
perform_get_with_cursor("/1.1/friendships/incoming.json", options, :ids)
|
79
79
|
end
|
80
80
|
|
81
81
|
# Returns an array of numeric IDs for every protected user for whom the authenticating user has a pending follow request
|
@@ -87,7 +87,7 @@ module Twitter
|
|
87
87
|
# @return [Twitter::Cursor]
|
88
88
|
# @param options [Hash] A customizable set of options.
|
89
89
|
def friendships_outgoing(options = {})
|
90
|
-
perform_get_with_cursor(
|
90
|
+
perform_get_with_cursor("/1.1/friendships/outgoing.json", options, :ids)
|
91
91
|
end
|
92
92
|
|
93
93
|
# Allows the authenticating user to follow the specified users, unless they are already followed
|
@@ -131,7 +131,7 @@ module Twitter
|
|
131
131
|
def follow!(*args)
|
132
132
|
arguments = Twitter::Arguments.new(args)
|
133
133
|
pmap(arguments) do |user|
|
134
|
-
perform_post_with_object(
|
134
|
+
perform_post_with_object("/1.1/friendships/create.json", merge_user(arguments.options, user), Twitter::User)
|
135
135
|
end.compact
|
136
136
|
end
|
137
137
|
alias create_friendship! follow!
|
@@ -149,7 +149,7 @@ module Twitter
|
|
149
149
|
# @param users [Enumerable<Integer, String, Twitter::User>] A collection of Twitter user IDs, screen names, or objects.
|
150
150
|
# @param options [Hash] A customizable set of options.
|
151
151
|
def unfollow(*args)
|
152
|
-
parallel_users_from_response(:post,
|
152
|
+
parallel_users_from_response(:post, "/1.1/friendships/destroy.json", args)
|
153
153
|
end
|
154
154
|
alias destroy_friendship unfollow
|
155
155
|
|
@@ -166,7 +166,7 @@ module Twitter
|
|
166
166
|
# @option options [Boolean] :retweets Enable/disable retweets from the target user.
|
167
167
|
def friendship_update(user, options = {})
|
168
168
|
merge_user!(options, user)
|
169
|
-
perform_post_with_object(
|
169
|
+
perform_post_with_object("/1.1/friendships/update.json", options, Twitter::Relationship)
|
170
170
|
end
|
171
171
|
|
172
172
|
# Returns detailed information about the relationship between two users
|
@@ -181,11 +181,11 @@ module Twitter
|
|
181
181
|
# @param options [Hash] A customizable set of options.
|
182
182
|
def friendship(source, target, options = {})
|
183
183
|
options = options.dup
|
184
|
-
merge_user!(options, source,
|
184
|
+
merge_user!(options, source, "source")
|
185
185
|
options[:source_id] = options.delete(:source_user_id) unless options[:source_user_id].nil?
|
186
|
-
merge_user!(options, target,
|
186
|
+
merge_user!(options, target, "target")
|
187
187
|
options[:target_id] = options.delete(:target_user_id) unless options[:target_user_id].nil?
|
188
|
-
perform_get_with_object(
|
188
|
+
perform_get_with_object("/1.1/friendships/show.json", options, Twitter::Relationship)
|
189
189
|
end
|
190
190
|
alias friendship_show friendship
|
191
191
|
alias relationship friendship
|
@@ -225,7 +225,7 @@ module Twitter
|
|
225
225
|
# @option options [Boolean, String, Integer] :skip_status Do not include contributee's Tweets when set to true, 't' or 1.
|
226
226
|
# @option options [Boolean, String, Integer] :include_user_entities The user entities node will be disincluded when set to false.
|
227
227
|
def followers(*args)
|
228
|
-
cursor_from_response_with_user(:users, Twitter::User,
|
228
|
+
cursor_from_response_with_user(:users, Twitter::User, "/1.1/followers/list.json", args)
|
229
229
|
end
|
230
230
|
|
231
231
|
# Returns a cursored collection of user objects for every user the specified user is following (otherwise known as their "friends").
|
@@ -249,7 +249,7 @@ module Twitter
|
|
249
249
|
# @option options [Boolean, String, Integer] :skip_status Do not include contributee's Tweets when set to true, 't' or 1.
|
250
250
|
# @option options [Boolean, String, Integer] :include_user_entities The user entities node will be disincluded when set to false.
|
251
251
|
def friends(*args)
|
252
|
-
cursor_from_response_with_user(:users, Twitter::User,
|
252
|
+
cursor_from_response_with_user(:users, Twitter::User, "/1.1/friends/list.json", args)
|
253
253
|
end
|
254
254
|
alias following friends
|
255
255
|
|
@@ -261,7 +261,7 @@ module Twitter
|
|
261
261
|
# @return [Array<Integer>]
|
262
262
|
# @param options [Hash] A customizable set of options.
|
263
263
|
def no_retweet_ids(options = {})
|
264
|
-
perform_get(
|
264
|
+
perform_get("/1.1/friendships/no_retweets/ids.json", options).collect(&:to_i)
|
265
265
|
end
|
266
266
|
alias no_retweets_ids no_retweet_ids
|
267
267
|
end
|
data/lib/twitter/rest/help.rb
CHANGED
@@ -1,24 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require 'twitter/rest/utils'
|
1
|
+
require "twitter/language"
|
2
|
+
require "twitter/rest/request"
|
3
|
+
require "twitter/rest/utils"
|
5
4
|
|
6
5
|
module Twitter
|
7
6
|
module REST
|
8
7
|
module Help
|
9
8
|
include Twitter::REST::Utils
|
10
9
|
|
11
|
-
# Returns the current configuration used by Twitter
|
12
|
-
#
|
13
|
-
# @see https://dev.twitter.com/rest/reference/get/help/configuration
|
14
|
-
# @rate_limited Yes
|
15
|
-
# @authentication Requires user context
|
16
|
-
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
17
|
-
# @return [Twitter::Configuration] Twitter's configuration.
|
18
|
-
def configuration(options = {})
|
19
|
-
perform_get_with_object('/1.1/help/configuration.json', options, Twitter::Configuration)
|
20
|
-
end
|
21
|
-
|
22
10
|
# Returns the list of languages supported by Twitter
|
23
11
|
#
|
24
12
|
# @see https://dev.twitter.com/rest/reference/get/help/languages
|
@@ -27,7 +15,7 @@ module Twitter
|
|
27
15
|
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
28
16
|
# @return [Array<Twitter::Language>]
|
29
17
|
def languages(options = {})
|
30
|
-
perform_get_with_objects(
|
18
|
+
perform_get_with_objects("/1.1/help/languages.json", options, Twitter::Language)
|
31
19
|
end
|
32
20
|
|
33
21
|
# Returns {https://twitter.com/privacy Twitter's Privacy Policy}
|
@@ -38,7 +26,7 @@ module Twitter
|
|
38
26
|
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
39
27
|
# @return [String]
|
40
28
|
def privacy(options = {})
|
41
|
-
perform_get(
|
29
|
+
perform_get("/1.1/help/privacy.json", options)[:privacy]
|
42
30
|
end
|
43
31
|
|
44
32
|
# Returns {https://twitter.com/tos Twitter's Terms of Service}
|
@@ -49,7 +37,7 @@ module Twitter
|
|
49
37
|
# @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid.
|
50
38
|
# @return [String]
|
51
39
|
def tos(options = {})
|
52
|
-
perform_get(
|
40
|
+
perform_get("/1.1/help/tos.json", options)[:tos]
|
53
41
|
end
|
54
42
|
end
|
55
43
|
end
|