lib/twitter/api/lists.rb in twitter-4.4.2 vs lib/twitter/api/lists.rb in twitter-4.4.3

- old
+ new

@@ -1,6 +1,8 @@ +require 'twitter/api/arguments' require 'twitter/api/utils' +require 'twitter/core_ext/enumerable' require 'twitter/cursor' require 'twitter/error/forbidden' require 'twitter/error/not_found' require 'twitter/list' require 'twitter/tweet' @@ -28,11 +30,11 @@ # @param options [Hash] A customizable set of options. # @example Returns all lists that @sferik subscribes to # Twitter.lists('sferik') # Twitter.lists(7505382) def lists(*args) - objects_from_response(Twitter::List, :get, "/1.1/lists/list.json", args) + objects_from_response_with_user(Twitter::List, :get, "/1.1/lists/list.json", args) end alias lists_subscribed_to lists # Show tweet timeline for members of the specified list # @@ -61,14 +63,14 @@ # Twitter.list_timeline('sferik', 'presidents') # Twitter.list_timeline('sferik', 8863586) # Twitter.list_timeline(7505382, 'presidents') # Twitter.list_timeline(7505382, 8863586) def list_timeline(*args) - options = extract_options!(args) - merge_list!(options, args.pop) - merge_owner!(options, args.pop || screen_name) unless options[:owner_id] || options[:owner_screen_name] - collection_from_response(Twitter::Tweet, :get, "/1.1/lists/statuses.json", options) + arguments = Twitter::API::Arguments.new(args) + merge_list!(arguments.options, arguments.pop) + merge_owner!(arguments.options, arguments.pop || screen_name) unless arguments.options[:owner_id] || arguments.options[:owner_screen_name] + objects_from_response(Twitter::Tweet, :get, "/1.1/lists/statuses.json", arguments.options) end # Removes the specified member from the list # # @see https://dev.twitter.com/docs/api/1.1/post/lists/members/destroy @@ -93,11 +95,11 @@ # Twitter.list_remove_member('sferik', 'presidents', 813286) # Twitter.list_remove_member('sferik', 'presidents', 'BarackObama') # Twitter.list_remove_member('sferik', 8863586, 'BarackObama') # Twitter.list_remove_member(7505382, 'presidents', 813286) def list_remove_member(*args) - list_modify_member(:post, "/1.1/lists/members/destroy.json", args) + list_from_response_with_user(:post, "/1.1/lists/members/destroy.json", args) end # List the lists the specified user has been added to # # @see https://dev.twitter.com/docs/api/1.1/get/lists/memberships @@ -118,11 +120,11 @@ # @option options [Boolean, String, Integer] :filter_to_owned_lists When set to true, t or 1, will return just lists the authenticating user owns, and the user represented by user_id or screen_name is a member of. # @example List the lists that @sferik has been added to # Twitter.memberships('sferik') # Twitter.memberships(7505382) def memberships(*args) - lists_from_response(:get, "/1.1/lists/memberships.json", args, :memberships) + cursor_from_response_with_user(:lists, Twitter::List, :get, "/1.1/lists/memberships.json", args, :memberships) end # Returns the subscribers of the specified list # # @see https://dev.twitter.com/docs/api/1.1/get/lists/subscribers @@ -145,11 +147,11 @@ # @example Return the subscribers of @sferik's "presidents" list # Twitter.list_subscribers('sferik', 'presidents') # Twitter.list_subscribers('sferik', 8863586) # Twitter.list_subscribers(7505382, 'presidents') def list_subscribers(*args) - list_users(:get, "/1.1/lists/subscribers.json", args, :list_subscribers) + cursor_from_response_with_list(:get, "/1.1/lists/subscribers.json", args, :list_subscribers) end # Make the authenticated user follow the specified list # # @see https://dev.twitter.com/docs/api/1.1/post/lists/subscribers/create @@ -258,11 +260,11 @@ # Twitter.list_add_members(7505382, 'presidents', ['BarackObama', 'pengwynn']) # Twitter.list_add_members(7505382, 'presidents', [813286, 18755393]) # Twitter.list_add_members(7505382, 8863586, ['BarackObama', 'pengwynn']) # Twitter.list_add_members(7505382, 8863586, [813286, 18755393]) def list_add_members(*args) - list_modify_members(:post, "/1.1/lists/members/create_all.json", args) + list_from_response_with_users(:post, "/1.1/lists/members/create_all.json", args) end # Check if a user is a member of the specified list # # @see https://dev.twitter.com/docs/api/1.1/get/lists/members/show @@ -313,11 +315,11 @@ # Twitter.list_members('sferik', 'presidents') # Twitter.list_members('sferik', 8863586) # Twitter.list_members(7505382, 'presidents') # Twitter.list_members(7505382, 8863586) def list_members(*args) - list_users(:get, "/1.1/lists/members.json", args, :list_members) + cursor_from_response_with_list(:get, "/1.1/lists/members.json", args, :list_members) end # Add a member to a list # # @see https://dev.twitter.com/docs/api/1.1/post/lists/members/create @@ -342,11 +344,11 @@ # Twitter.list_add_member('sferik', 'presidents', 813286) # Twitter.list_add_member('sferik', 8863586, 813286) # Twitter.list_add_member(7505382, 'presidents', 813286) # Twitter.list_add_member(7505382, 8863586, 813286) def list_add_member(*args) - list_modify_member(:post, "/1.1/lists/members/create.json", args) + list_from_response_with_user(:post, "/1.1/lists/members/create.json", args) end # Deletes the specified list # # @see https://dev.twitter.com/docs/api/1.1/post/lists/destroy @@ -467,11 +469,11 @@ # @option options [Integer] :cursor (-1) Breaks the results into pages. Provide values as returned in the response objects's next_cursor and previous_cursor attributes to page back and forth in the list. # @example List the lists that @sferik follows # Twitter.subscriptions('sferik') # Twitter.subscriptions(7505382) def subscriptions(*args) - lists_from_response(:get, "/1.1/lists/subscriptions.json", args, :subscriptions) + cursor_from_response_with_user(:lists, Twitter::List, :get, "/1.1/lists/subscriptions.json", args, :subscriptions) end # Removes specified members from the list # # @see https://dev.twitter.com/docs/api/1.1/post/lists/members/destroy_all @@ -499,70 +501,58 @@ # Twitter.list_remove_members(7505382, 'presidents', ['BarackObama', 'pengwynn']) # Twitter.list_remove_members(7505382, 'presidents', [813286, 18755393]) # Twitter.list_remove_members(7505382, 8863586, ['BarackObama', 'pengwynn']) # Twitter.list_remove_members(7505382, 8863586, [813286, 18755393]) def list_remove_members(*args) - list_modify_members(:post, "/1.1/lists/members/destroy_all.json", args) + list_from_response_with_users(:post, "/1.1/lists/members/destroy_all.json", args) end private # @param request_method [Symbol] # @param path [String] # @param args [Array] # @return [Array<Twitter::User>] def list_from_response(request_method, path, args) - options = extract_options!(args) - merge_list!(options, args.pop) - merge_owner!(options, args.pop || screen_name) unless options[:owner_id] || options[:owner_screen_name] - object_from_response(Twitter::List, request_method, path, options) + arguments = Twitter::API::Arguments.new(args) + merge_list!(arguments.options, arguments.pop) + merge_owner!(arguments.options, arguments.pop || screen_name) unless arguments.options[:owner_id] || arguments.options[:owner_screen_name] + object_from_response(Twitter::List, request_method, path, arguments.options) end - # @param request_method [Symbol] - # @param path [String] - # @param args [Array] - # @return [Array<Twitter::List>] - def lists_from_response(request_method, path, args, calling_method) - options = extract_options!(args) - merge_default_cursor!(options) - merge_user!(options, args.pop || screen_name) unless options[:user_id] || options[:screen_name] - cursor_from_response(:lists, Twitter::List, request_method, path, options, calling_method) + def cursor_from_response_with_list(request_method, path, args, calling_method) + arguments = Twitter::API::Arguments.new(args) + merge_list!(arguments.options, arguments.pop) + merge_owner!(arguments.options, arguments.pop || screen_name) unless arguments.options[:owner_id] || arguments.options[:owner_screen_name] + cursor_from_response(:users, Twitter::User, request_method, path, arguments.options, calling_method) end - def list_users(request_method, path, args, calling_method) - options = extract_options!(args) - merge_default_cursor!(options) - merge_list!(options, args.pop) - merge_owner!(options, args.pop || screen_name) unless options[:owner_id] || options[:owner_screen_name] - cursor_from_response(:users, Twitter::User, request_method, path, options, calling_method) - end - def list_user?(request_method, path, args) - options = extract_options!(args) - merge_user!(options, args.pop) - merge_list!(options, args.pop) - merge_owner!(options, args.pop || screen_name) unless options[:owner_id] || options[:owner_screen_name] - send(request_method.to_sym, path, options) + arguments = Twitter::API::Arguments.new(args) + merge_user!(arguments.options, arguments.pop) + merge_list!(arguments.options, arguments.pop) + merge_owner!(arguments.options, arguments.pop || screen_name) unless arguments.options[:owner_id] || arguments.options[:owner_screen_name] + send(request_method.to_sym, path, arguments.options) true rescue Twitter::Error::NotFound, Twitter::Error::Forbidden false end - def list_modify_member(request_method, path, args) - options = extract_options!(args) - merge_user!(options, args.pop) - merge_list!(options, args.pop) - merge_owner!(options, args.pop || screen_name) unless options[:owner_id] || options[:owner_screen_name] - object_from_response(Twitter::List, request_method, path, options) + def list_from_response_with_user(request_method, path, args) + arguments = Twitter::API::Arguments.new(args) + merge_user!(arguments.options, arguments.pop) + merge_list!(arguments.options, arguments.pop) + merge_owner!(arguments.options, arguments.pop || screen_name) unless arguments.options[:owner_id] || arguments.options[:owner_screen_name] + object_from_response(Twitter::List, request_method, path, arguments.options) end - def list_modify_members(request_method, path, args) - options = extract_options!(args) - members = args.pop - merge_list!(options, args.pop) - merge_owner!(options, args.pop || screen_name) unless options[:owner_id] || options[:owner_screen_name] + def list_from_response_with_users(request_method, path, args) + arguments = Twitter::API::Arguments.new(args) + members = arguments.pop + merge_list!(arguments.options, arguments.pop) + merge_owner!(arguments.options, arguments.pop || screen_name) unless arguments.options[:owner_id] || arguments.options[:owner_screen_name] members.flatten.each_slice(MAX_USERS_PER_REQUEST).threaded_map do |users| - object_from_response(Twitter::List, request_method, path, merge_users(options, users)) + object_from_response(Twitter::List, request_method, path, merge_users(arguments.options, users)) end.last end # Take a list and merge it into the hash with the correct key #