Class: T::CLI::List::Add
Constant Summary
collapse
- MAX_USERS_PER_LIST =
500
- MAX_USERS_PER_REQUEST =
100
Constants included
from Requestable
Requestable::DEFAULT_HOST, Requestable::DEFAULT_PROTOCOL
Instance Method Summary
collapse
#base_url, #client, #host, included, #protocol
#collect_with_cursor
Constructor Details
#initialize ⇒ Add
Returns a new instance of Add.
22
23
24
25
|
# File 'lib/t/cli/list/add.rb', line 22
def initialize(*)
super
@rcfile = RCFile.instance
end
|
Instance Method Details
#followers(list_name) ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/t/cli/list/add.rb', line 61
def followers(list_name)
list_member_ids = collect_with_cursor do |cursor|
client.list_members(list_name, :cursor => cursor, :skip_status => true, :include_entities => false)
end
existing_list_members = list_member_ids.length
if existing_list_members >= MAX_USERS_PER_LIST
return say "The list \"#{list_name}\" are already contains the maximum of #{MAX_USERS_PER_LIST} members."
end
follower_ids = collect_with_cursor do |cursor|
followers = client.follower_ids(:cursor => cursor)
end
list_member_ids_to_add = (follower_ids - list_member_ids)
number = list_member_ids_to_add.length
if number.zero?
return say "All of @#{@rcfile.default_profile[0]}'s followers are already members of the list \"#{list_name}\"."
elsif existing_list_members + number > MAX_USERS_PER_LIST
return unless yes? "Lists can't have more than #{MAX_USERS_PER_LIST} members. Do you want to add up to #{MAX_USERS_PER_LIST} followers to the list \"#{list_name}\"?"
else
return unless yes? "Are you sure you want to add #{number} #{number == 1 ? 'follower' : 'followers'} to the list \"#{list_name}\"?"
end
max_members_to_add = MAX_USERS_PER_LIST - existing_list_members
list_member_ids_to_add[0...max_members_to_add].in_groups_of(MAX_USERS_PER_REQUEST, false).threaded_each do |user_id_group|
retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
client.list_add_members(list_name, user_id_group)
end
end
number_added = [number, max_members_to_add].min
say "@#{@rcfile.default_profile[0]} added #{number_added} #{number_added == 1 ? 'follower' : 'followers'} to the list \"#{list_name}\"."
say
say "Run `#{File.basename($0)} list remove all followers #{list_name}` to undo."
end
|
#friends(list_name) ⇒ Object
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/t/cli/list/add.rb', line 28
def friends(list_name)
list_member_ids = collect_with_cursor do |cursor|
client.list_members(list_name, :cursor => cursor, :skip_status => true, :include_entities => false)
end
existing_list_members = list_member_ids.length
if existing_list_members >= MAX_USERS_PER_LIST
return say "The list \"#{list_name}\" are already contains the maximum of #{MAX_USERS_PER_LIST} members."
end
friend_ids = collect_with_cursor do |cursor|
client.friend_ids(:cursor => cursor)
end
list_member_ids_to_add = (friend_ids - list_member_ids)
number = list_member_ids_to_add.length
if number.zero?
return say "All of @#{@rcfile.default_profile[0]}'s friends are already members of the list \"#{list_name}\"."
elsif existing_list_members + number > MAX_USERS_PER_LIST
return unless yes? "Lists can't have more than #{MAX_USERS_PER_LIST} members. Do you want to add up to #{MAX_USERS_PER_LIST} friends to the list \"#{list_name}\"?"
else
return unless yes? "Are you sure you want to add #{number} #{number == 1 ? 'friend' : 'friends'} to the list \"#{list_name}\"?"
end
max_members_to_add = MAX_USERS_PER_LIST - existing_list_members
list_member_ids_to_add[0...max_members_to_add].in_groups_of(MAX_USERS_PER_REQUEST, false).threaded_each do |user_id_group|
retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
client.list_add_members(list_name, user_id_group)
end
end
number_added = [number, max_members_to_add].min
say "@#{@rcfile.default_profile[0]} added #{number_added} #{number_added == 1 ? 'friend' : 'friends'} to the list \"#{list_name}\"."
say
say "Run `#{File.basename($0)} list remove all friends #{list_name}` to undo."
end
|
#listed(from_list_name, to_list_name) ⇒ Object
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/t/cli/list/add.rb', line 94
def listed(from_list_name, to_list_name)
to_list_members = collect_with_cursor do |cursor|
client.list_members(to_list_name, :cursor => cursor, :skip_status => true, :include_entities => false)
end
existing_list_members = to_list_members.length
if existing_list_members >= MAX_USERS_PER_LIST
return say "The list \"#{to_list_name}\" are already contains the maximum of #{MAX_USERS_PER_LIST} members."
end
from_list_members = collect_with_cursor do |cursor|
client.list_members(from_list_name, :cursor => cursor, :skip_status => true, :include_entities => false)
end
list_member_ids_to_add = (from_list_members.collect(&:id) - to_list_members.collect(&:id))
number = list_member_ids_to_add.length
if number.zero?
return say "All of the members of the list \"#{from_list_name}\" are already members of the list \"#{to_list_name}\"."
elsif existing_list_members + number > MAX_USERS_PER_LIST
return unless yes? "Lists can't have more than #{MAX_USERS_PER_LIST} members. Do you want to add up to #{MAX_USERS_PER_LIST} members to the list \"#{to_list_name}\"?"
else
return unless yes? "Are you sure you want to add #{number} #{number == 1 ? 'member' : 'members'} to the list \"#{to_list_name}\"?"
end
max_members_to_add = MAX_USERS_PER_LIST - existing_list_members
list_member_ids_to_add[0...max_members_to_add].in_groups_of(MAX_USERS_PER_REQUEST, false).threaded_each do |user_id_group|
retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
client.list_add_members(to_list_name, user_id_group)
end
end
number_added = [number, max_members_to_add].min
say "@#{@rcfile.default_profile[0]} added #{number_added} #{number_added == 1 ? 'member' : 'members'} to the list \"#{to_list_name}\"."
say
say "Run `#{File.basename($0)} list remove all listed #{from_list_name} #{to_list_name}` to undo."
end
|
#users(list_name, screen_name, *screen_names) ⇒ Object
127
128
129
130
131
132
133
134
135
136
137
138
139
|
# File 'lib/t/cli/list/add.rb', line 127
def users(list_name, screen_name, *screen_names)
screen_names.unshift(screen_name)
screen_names.map!(&:strip_at)
screen_names.in_groups_of(MAX_USERS_PER_REQUEST, false).threaded_each do |user_id_group|
retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
client.list_add_members(list_name, user_id_group)
end
end
number = screen_names.length
say "@#{@rcfile.default_profile[0]} added #{number} #{number == 1 ? 'user' : 'users'} to the list \"#{list_name}\"."
say
say "Run `#{File.basename($0)} list remove users #{list_name} #{screen_names.join(' ')}` to undo."
end
|