diff --git a/lib/twitter/arguments.rb b/lib/twitter/arguments.rb new file mode 100644 index 000000000..aa5f549db --- /dev/null +++ b/lib/twitter/arguments.rb @@ -0,0 +1,11 @@ +module Twitter + class Arguments < Array + attr_reader :options + + def initialize(args) + @options = args.last.is_a?(::Hash) ? args.pop : {} + super(args) + end + + end +end diff --git a/lib/twitter/rest/api/arguments.rb b/lib/twitter/rest/api/arguments.rb deleted file mode 100644 index 70277deb3..000000000 --- a/lib/twitter/rest/api/arguments.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Twitter - module REST - module API - class Arguments < Array - attr_reader :options - - def initialize(args) - @options = args.last.is_a?(::Hash) ? args.pop : {} - super(args) - end - - end - end - end -end diff --git a/lib/twitter/rest/api/direct_messages.rb b/lib/twitter/rest/api/direct_messages.rb index af0dce9aa..20a3b3d77 100644 --- a/lib/twitter/rest/api/direct_messages.rb +++ b/lib/twitter/rest/api/direct_messages.rb @@ -1,6 +1,6 @@ -require 'twitter/rest/api/arguments' -require 'twitter/rest/api/utils' +require 'twitter/arguments' require 'twitter/direct_message' +require 'twitter/rest/api/utils' require 'twitter/user' module Twitter @@ -84,7 +84,7 @@ def direct_message(id, options={}) # @param ids [Enumerable] A collection of direct message IDs. # @param options [Hash] A customizable set of options. def direct_messages(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) if arguments.empty? direct_messages_received(arguments.options) else diff --git a/lib/twitter/rest/api/favorites.rb b/lib/twitter/rest/api/favorites.rb index b091d5125..586f74617 100644 --- a/lib/twitter/rest/api/favorites.rb +++ b/lib/twitter/rest/api/favorites.rb @@ -1,7 +1,7 @@ -require 'twitter/rest/api/arguments' -require 'twitter/rest/api/utils' +require 'twitter/arguments' require 'twitter/error/already_favorited' require 'twitter/error/forbidden' +require 'twitter/rest/api/utils' require 'twitter/tweet' require 'twitter/user' @@ -30,7 +30,7 @@ module Favorites # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 100. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. def favorites(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) if user = arguments.pop merge_user!(arguments.options, user) end @@ -70,7 +70,7 @@ def unfavorite(*args) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @param options [Hash] A customizable set of options. def favorite(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) arguments.flatten.pmap do |tweet| id = extract_id(tweet) begin @@ -99,7 +99,7 @@ def favorite(*args) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @param options [Hash] A customizable set of options. def favorite!(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) arguments.flatten.pmap do |tweet| id = extract_id(tweet) begin diff --git a/lib/twitter/rest/api/friends_and_followers.rb b/lib/twitter/rest/api/friends_and_followers.rb index b89c5172c..6e34c803e 100644 --- a/lib/twitter/rest/api/friends_and_followers.rb +++ b/lib/twitter/rest/api/friends_and_followers.rb @@ -1,8 +1,8 @@ -require 'twitter/rest/api/arguments' -require 'twitter/rest/api/utils' +require 'twitter/arguments' require 'twitter/cursor' require 'twitter/error/forbidden' require 'twitter/relationship' +require 'twitter/rest/api/utils' require 'twitter/user' module Twitter @@ -64,7 +64,7 @@ def follower_ids(*args) # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @param options [Hash] A customizable set of options. def friendships(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) merge_users!(arguments.options, arguments) objects_from_response(Twitter::User, :get, "/1.1/friendships/lookup.json", arguments.options) end @@ -109,7 +109,7 @@ def friendships_outgoing(options={}) # @param options [Hash] A customizable set of options. # @option options [Boolean] :follow (false) Enable notifications for the target user. def follow(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) # Twitter always turns on notifications if the "follow" option is present, even if it's set to false # so only send follow if it's true arguments.options[:follow] = true if !!arguments.options.delete(:follow) @@ -137,7 +137,7 @@ def follow(*args) # @param options [Hash] A customizable set of options. # @option options [Boolean] :follow (false) Enable notifications for the target user. def follow!(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) # Twitter always turns on notifications if the "follow" option is present, even if it's set to false # so only send follow if it's true arguments.options[:follow] = true if !!arguments.options.delete(:follow) diff --git a/lib/twitter/rest/api/lists.rb b/lib/twitter/rest/api/lists.rb index 706421ead..b77c1e99e 100644 --- a/lib/twitter/rest/api/lists.rb +++ b/lib/twitter/rest/api/lists.rb @@ -1,10 +1,10 @@ -require 'twitter/rest/api/arguments' -require 'twitter/rest/api/utils' +require 'twitter/arguments' require 'twitter/core_ext/enumerable' require 'twitter/cursor' require 'twitter/error/forbidden' require 'twitter/error/not_found' require 'twitter/list' +require 'twitter/rest/api/utils' require 'twitter/tweet' require 'twitter/user' @@ -56,7 +56,7 @@ def lists(*args) # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Integer] :count The number of results to retrieve. def list_timeline(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) merge_list!(arguments.options, arguments.pop) merge_owner!(arguments.options, arguments.pop) objects_from_response(Twitter::Tweet, :get, "/1.1/lists/statuses.json", arguments.options) @@ -401,21 +401,21 @@ def lists_owned(*args) # @param args [Array] # @return [Array] def list_from_response(request_method, path, args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) merge_list!(arguments.options, arguments.pop) merge_owner!(arguments.options, arguments.pop) object_from_response(Twitter::List, request_method, path, arguments.options) end def cursor_from_response_with_list(request_method, path, args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) merge_list!(arguments.options, arguments.pop) merge_owner!(arguments.options, arguments.pop) cursor_from_response(:users, Twitter::User, request_method, path, arguments.options) end def list_user?(request_method, path, args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) merge_user!(arguments.options, arguments.pop) merge_list!(arguments.options, arguments.pop) merge_owner!(arguments.options, arguments.pop) @@ -426,7 +426,7 @@ def list_user?(request_method, path, args) end def list_from_response_with_user(request_method, path, args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) merge_user!(arguments.options, arguments.pop) merge_list!(arguments.options, arguments.pop) merge_owner!(arguments.options, arguments.pop) @@ -434,7 +434,7 @@ def list_from_response_with_user(request_method, path, args) end def list_from_response_with_users(request_method, path, args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) members = arguments.pop merge_list!(arguments.options, arguments.pop) merge_owner!(arguments.options, arguments.pop) diff --git a/lib/twitter/rest/api/saved_searches.rb b/lib/twitter/rest/api/saved_searches.rb index b4813e214..8867e2853 100644 --- a/lib/twitter/rest/api/saved_searches.rb +++ b/lib/twitter/rest/api/saved_searches.rb @@ -1,4 +1,4 @@ -require 'twitter/rest/api/arguments' +require 'twitter/arguments' require 'twitter/rest/api/utils' require 'twitter/saved_search' @@ -29,7 +29,7 @@ module SavedSearches # @param ids [Enumerable] A collection of saved search IDs. # @param options [Hash] A customizable set of options. def saved_searches(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) if arguments.empty? objects_from_response(Twitter::SavedSearch, :get, "/1.1/saved_searches/list.json", arguments.options) else @@ -79,7 +79,7 @@ def saved_search_create(query, options={}) # @param ids [Enumerable] A collection of saved search IDs. # @param options [Hash] A customizable set of options. def saved_search_destroy(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) arguments.flatten.pmap do |id| object_from_response(Twitter::SavedSearch, :post, "/1.1/saved_searches/destroy/#{id}.json", arguments.options) end diff --git a/lib/twitter/rest/api/suggested_users.rb b/lib/twitter/rest/api/suggested_users.rb index 12ba9f80b..2566d4abb 100644 --- a/lib/twitter/rest/api/suggested_users.rb +++ b/lib/twitter/rest/api/suggested_users.rb @@ -1,4 +1,4 @@ -require 'twitter/rest/api/arguments' +require 'twitter/arguments' require 'twitter/rest/api/utils' require 'twitter/suggestion' require 'twitter/user' @@ -25,7 +25,7 @@ module SuggestedUsers # @param slug [String] The short name of list or a category. # @param options [Hash] A customizable set of options. def suggestions(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) if slug = arguments.pop object_from_response(Twitter::Suggestion, :get, "/1.1/users/suggestions/#{slug}.json", arguments.options) else diff --git a/lib/twitter/rest/api/tweets.rb b/lib/twitter/rest/api/tweets.rb index 1ad8a7891..34334967c 100644 --- a/lib/twitter/rest/api/tweets.rb +++ b/lib/twitter/rest/api/tweets.rb @@ -1,9 +1,9 @@ -require 'twitter/rest/api/arguments' -require 'twitter/rest/api/utils' -require 'twitter/error/already_retweeted' +require 'twitter/arguments' require 'twitter/error/already_posted' +require 'twitter/error/already_retweeted' require 'twitter/error/forbidden' require 'twitter/oembed' +require 'twitter/rest/api/utils' require 'twitter/tweet' module Twitter @@ -138,7 +138,7 @@ def update(status, options={}) # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. def retweet(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) arguments.flatten.pmap do |tweet| id = extract_id(tweet) begin @@ -164,7 +164,7 @@ def retweet(*args) # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. def retweet!(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) arguments.flatten.pmap do |tweet| id = extract_id(tweet) begin @@ -239,7 +239,7 @@ def oembed(tweet, options={}) # @option options [String] :related A value for the TWT related parameter, as described in {https://dev.twitter.com/docs/intents Web Intents}. This value will be forwarded to all Web Intents calls. # @option options [String] :lang Language code for the rendered embed. This will affect the text and localization of the rendered HTML. def oembeds(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) arguments.flatten.pmap do |tweet| id = extract_id(tweet) oembed(id, arguments.options) @@ -259,7 +259,7 @@ def oembeds(*args) # @param tweet [Integer, String, URI, Twitter::Tweet] A Tweet ID, URI, or object. # @param options [Hash] A customizable set of options. def retweeters_ids(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) arguments.options[:id] ||= extract_id(arguments.first) cursor_from_response(:ids, nil, :get, "/1.1/statuses/retweeters/ids.json", arguments.options) end @@ -271,7 +271,7 @@ def retweeters_ids(*args) # @param args [Array] # @return [Array] def parallel_tweets_from_response(request_method, path, args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) arguments.flatten.pmap do |tweet| id = extract_id(tweet) object_from_response(Twitter::Tweet, request_method, path + "/#{id}.json", arguments.options) diff --git a/lib/twitter/rest/api/undocumented.rb b/lib/twitter/rest/api/undocumented.rb index b9dce8439..159c4acbd 100644 --- a/lib/twitter/rest/api/undocumented.rb +++ b/lib/twitter/rest/api/undocumented.rb @@ -1,5 +1,5 @@ +require 'twitter/arguments' require 'twitter/cursor' -require 'twitter/rest/api/arguments' require 'twitter/rest/api/utils' require 'twitter/tweet' require 'twitter/user' diff --git a/lib/twitter/rest/api/users.rb b/lib/twitter/rest/api/users.rb index ea0fa7f23..711516c5f 100644 --- a/lib/twitter/rest/api/users.rb +++ b/lib/twitter/rest/api/users.rb @@ -1,7 +1,7 @@ +require 'twitter/arguments' require 'twitter/core_ext/enumerable' require 'twitter/error/not_found' require 'twitter/profile_banner' -require 'twitter/rest/api/arguments' require 'twitter/rest/api/utils' require 'twitter/settings' require 'twitter/user' @@ -151,7 +151,7 @@ def blocking(options={}) # @overload block(options={}) # @param options [Hash] A customizable set of options. def blocked_ids(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) merge_user!(arguments.options, arguments.pop) cursor_from_response(:ids, nil, :get, "/1.1/blocks/ids.json", arguments.options) end @@ -226,7 +226,7 @@ def unblock(*args) # @option options [Symbol, String] :method Requests users via a GET request instead of the standard POST request if set to ':get'. # @option options [Boolean] :include_entities The tweet entities node will be disincluded when set to false. def users(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) method = arguments.options.delete(:method) || :post arguments.flatten.each_slice(MAX_USERS_PER_REQUEST).pmap do |users| objects_from_response(Twitter::User, method, "/1.1/users/lookup.json", merge_users(arguments.options, users)) @@ -252,7 +252,7 @@ def users(*args) # @option options [Boolean] :include_entities The tweet entities node will be disincluded when set to false. # @option options [Boolean, String, Integer] :skip_status Do not include user's Tweets when set to true, 't' or 1. def user(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) if user = arguments.pop merge_user!(arguments.options, user) object_from_response(Twitter::User, :get, "/1.1/users/show.json", arguments.options) @@ -372,7 +372,7 @@ def update_profile_banner(banner, options={}) # @overload profile_banner(user, options={}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. def profile_banner(*args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) merge_user!(arguments.options, arguments.pop || screen_name) unless arguments.options[:user_id] || arguments.options[:screen_name] object_from_response(Twitter::ProfileBanner, :get, "/1.1/users/profile_banner.json", arguments.options) end diff --git a/lib/twitter/rest/api/utils.rb b/lib/twitter/rest/api/utils.rb index cf6be5e08..f2310d4c8 100644 --- a/lib/twitter/rest/api/utils.rb +++ b/lib/twitter/rest/api/utils.rb @@ -1,5 +1,5 @@ +require 'twitter/arguments' require 'twitter/cursor' -require 'twitter/rest/api/arguments' require 'twitter/user' require 'uri' @@ -35,7 +35,7 @@ def extract_id(object) # @param args [Array] # @return [Array] def parallel_user_objects_from_response(request_method, path, args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) arguments.flatten.pmap do |user| object_from_response(Twitter::User, request_method, path, merge_user(arguments.options, user)) end @@ -46,7 +46,7 @@ def parallel_user_objects_from_response(request_method, path, args) # @param args [Array] # @return [Array] def user_objects_from_response(request_method, path, args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) merge_user!(arguments.options, arguments.pop || screen_name) unless arguments.options[:user_id] || arguments.options[:screen_name] objects_from_response(Twitter::User, request_method, path, arguments.options) end @@ -57,7 +57,7 @@ def user_objects_from_response(request_method, path, args) # @param args [Array] # @return [Array] def objects_from_response_with_user(klass, request_method, path, args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) merge_user!(arguments.options, arguments.pop) objects_from_response(klass, request_method, path, arguments.options) end @@ -87,7 +87,7 @@ def objects_from_array(klass, array) # @param args [Array] # @return [Array] def parallel_objects_from_response(klass, request_method, path, args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) arguments.flatten.pmap do |object| id = extract_id(object) object_from_response(klass, request_method, path, arguments.options.merge(:id => id)) @@ -111,7 +111,7 @@ def object_from_response(klass, request_method, path, options={}) # @param args [Array] # @return [Twitter::Cursor] def cursor_from_response_with_user(collection_name, klass, request_method, path, args) - arguments = Twitter::REST::API::Arguments.new(args) + arguments = Twitter::Arguments.new(args) merge_user!(arguments.options, arguments.pop || screen_name) unless arguments.options[:user_id] || arguments.options[:screen_name] cursor_from_response(collection_name, klass, request_method, path, arguments.options) end