Class: T::List

Inherits:
Thor
  • Object
show all
Includes:
Collectable, Printable, Requestable, Utils
Defined in:
lib/t/list.rb

Constant Summary collapse

DEFAULT_NUM_RESULTS =
20

Constants included from Utils

Utils::DISTANCE_THRESHOLDS

Constants included from RequestableAPI

RequestableAPI::BASE_URL, RequestableAPI::BASE_URL_UPLOAD, RequestableAPI::BASE_URL_V1, RequestableAPI::FORM_HEADERS, RequestableAPI::JSON_HEADERS, RequestableAPI::MAX_PAGE, RequestableAPI::MAX_SEARCH_RESULTS, RequestableAPI::V2_LIST_FIELDS, RequestableAPI::V2_PLACE_FIELDS, RequestableAPI::V2_TWEET_EXPANSIONS, RequestableAPI::V2_TWEET_FIELDS, RequestableAPI::V2_USER_EXPANSIONS, RequestableAPI::V2_USER_FIELDS

Constants included from Printable

Printable::LISTS_SORT_MAP, Printable::LIST_HEADINGS, Printable::MONTH_IN_SECONDS, Printable::TWEET_HEADINGS, Printable::USERS_SORT_MAP, Printable::USER_HEADINGS

Constants included from Collectable

Collectable::MAX_NUM_RESULTS, Collectable::MAX_PAGE

Instance Method Summary collapse

Methods included from RequestableAPI

#setup_requestable_api!

Methods included from RequestableAPI::AccountEndpoints

#x_before_request, #x_filter, #x_sample, #x_settings, #x_trend_locations, #x_trends, #x_update_profile, #x_update_profile_background_image, #x_update_profile_image

Methods included from RequestableAPI::ListEndpoints

#x_add_list_members, #x_create_list, #x_destroy_list, #x_list, #x_list_member?, #x_list_members, #x_list_timeline, #x_lists, #x_remove_list_members

Methods included from RequestableAPI::DMEndpoints

#x_create_direct_message_event, #x_destroy_direct_message, #x_direct_message, #x_direct_messages_received, #x_direct_messages_sent

Methods included from RequestableAPI::Mutations

#x_block, #x_destroy_status, #x_favorite, #x_follow, #x_mute, #x_muted_ids, #x_report_spam, #x_retweet, #x_unblock, #x_unfavorite, #x_unfollow, #x_unmute

Methods included from RequestableAPI::TweetEndpoints

#x_favorites, #x_home_timeline, #x_mentions, #x_retweeted_by_me, #x_retweeted_by_user, #x_retweeters_ids, #x_retweets_of_me, #x_search, #x_status, #x_update, #x_update_with_media, #x_user_timeline

Methods included from RequestableAPI::UserEndpoints

#x_follower_ids, #x_friend_ids, #x_friendship?, #x_user, #x_user_search, #x_users, #x_verify_credentials

Methods included from Collectable

#collect_with_count, #collect_with_max_id, #collect_with_page

Constructor Details

#initializeList

Returns a new instance of List.



19
20
21
22
# File 'lib/t/list.rb', line 19

def initialize(*)
  @rcfile = T::RCFile.instance
  super
end

Instance Method Details

#add(list_name, user, *users) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/t/list.rb', line 26

def add(list_name, user, *users)
  added_users, number = fetch_users(users.unshift(user), options) do |users_to_add|
    x_add_list_members(list_name, users_to_add)
    users_to_add
  end
  say "@#{@rcfile.active_profile[0]} added #{pluralize(number, 'member')} to the list \"#{list_name}\"."
  say
  if options["id"]
    say "Run `#{File.basename($PROGRAM_NAME)} list remove --id #{list_name} #{added_users.join(' ')}` to undo."
  else
    say "Run `#{File.basename($PROGRAM_NAME)} list remove #{list_name} #{added_users.collect { |added_user| "@#{added_user}" }.join(' ')}` to undo."
  end
end

#create(list_name, description = nil) ⇒ Object



42
43
44
45
46
47
# File 'lib/t/list.rb', line 42

def create(list_name, description = nil)
  opts = description ? {description:} : {}
  opts[:mode] = "private" if options["private"]
  x_create_list(list_name, opts)
  say "@#{@rcfile.active_profile[0]} created the list \"#{list_name}\"."
end

#information(user_list) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/t/list.rb', line 51

def information(user_list)
  owner, list_name = extract_owner(user_list, options)
  list = x_list(owner, list_name)
  if options["csv"]
    require "csv"
    say ["ID", "Description", "Slug", "Screen name", "Created at", "Members", "Subscribers", "Following", "Mode", "URL"].to_csv
    say [list["id"], list["description"], list["slug"], list["user"]["screen_name"], csv_formatted_time(list), list["member_count"], list["subscriber_count"], !!list["following"], list["mode"], list["uri"]].to_csv
  else
    array = []
    array << ["ID", list["id"].to_s]
    array << ["Description", list["description"]] unless list["description"].nil?
    array << ["Slug", list["slug"]]
    array << ["Screen name", "@#{list['user']['screen_name']}"]
    array << ["Created at", "#{ls_formatted_time(list, 'created_at', allow_relative: false)} (#{time_ago_in_words(parse_time(list['created_at']))} ago)"]
    array << ["Members", number_with_delimiter(list["member_count"])]
    array << ["Subscribers", number_with_delimiter(list["subscriber_count"])]
    array << ["Status", list["following"] ? "Following" : "Not following"]
    array << ["Mode", list["mode"]]
    array << ["URL", list["uri"]]
    print_table(array)
  end
end

#members(user_list) ⇒ Object



82
83
84
85
86
# File 'lib/t/list.rb', line 82

def members(user_list)
  owner, list_name = extract_owner(user_list, options)
  users = x_list_members(owner, list_name).to_a
  print_users(users)
end

#remove(list_name, user, *users) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/t/list.rb', line 90

def remove(list_name, user, *users)
  removed_users, number = fetch_users(users.unshift(user), options) do |users_to_remove|
    x_remove_list_members(list_name, users_to_remove)
    users_to_remove
  end
  say "@#{@rcfile.active_profile[0]} removed #{pluralize(number, 'member')} from the list \"#{list_name}\"."
  say
  if options["id"]
    say "Run `#{File.basename($PROGRAM_NAME)} list add --id #{list_name} #{removed_users.join(' ')}` to undo."
  else
    say "Run `#{File.basename($PROGRAM_NAME)} list add #{list_name} #{removed_users.collect { |removed_user| "@#{removed_user}" }.join(' ')}` to undo."
  end
end

#timeline(user_list) ⇒ Object



112
113
114
115
116
117
118
119
120
121
# File 'lib/t/list.rb', line 112

def timeline(user_list)
  owner, list_name = extract_owner(user_list, options)
  count = options["number"] || DEFAULT_NUM_RESULTS
  opts = {}
  opts[:include_entities] = !!options["decode_uris"]
  tweets = collect_with_count(count) do |count_opts|
    x_list_timeline(owner, list_name, count_opts.merge(opts))
  end
  print_tweets(tweets)
end