Class: T::CLI::Unfollow

Inherits:
Thor
  • Object
show all
Includes:
T::Collectable, Requestable
Defined in:
lib/t/cli/unfollow.rb

Constant Summary

Constants included from Requestable

Requestable::DEFAULT_HOST, Requestable::DEFAULT_PROTOCOL

Instance Method Summary collapse

Methods included from Requestable

#base_url, #client, #host, included, #protocol

Methods included from T::Collectable

#collect_with_cursor

Constructor Details

#initializeUnfollow

Returns a new instance of Unfollow.



17
18
19
20
# File 'lib/t/cli/unfollow.rb', line 17

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

Instance Method Details

#followersObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/t/cli/unfollow.rb', line 41

def followers
  follower_ids = collect_with_cursor do |cursor|
    client.follower_ids(:cursor => cursor)
  end
  friend_ids = collect_with_cursor do |cursor|
    friends = client.friend_ids(:cursor => cursor)
  end
  follow_ids = (follower_ids - friend_ids)
  number = follow_ids.length
  return say "@#{@rcfile.default_profile[0]} is already not following any followers." if number.zero?
  return unless yes? "Are you sure you want to unfollow #{number} #{number == 1 ? 'user' : 'users'}?"
  screen_names = follow_ids.threaded_map do |follow_id|
    retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
      client.unfollow(follow_id, :include_entities => false)
    end
  end
  say "@#{@rcfile.default_profile[0]} is no longer following #{number} #{number == 1 ? 'user' : 'users'}."
  say
  say "Run `#{File.basename($0)} follow all followers` to stop."
end

#friendsObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/t/cli/unfollow.rb', line 63

def friends
  friend_ids = collect_with_cursor do |cursor|
    client.friend_ids(:cursor => cursor)
  end
  number = friend_ids.length
  return say "@#{@rcfile.default_profile[0]} is already not following anyone." if number.zero?
  return unless yes? "Are you sure you want to unfollow #{number} #{number == 1 ? 'user' : 'users'}?"
  screen_names = friend_ids.threaded_map do |friend_id|
    retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
      user = client.unfollow(friend_id, :include_entities => false)
      user.screen_name
    end
  end
  say "@#{@rcfile.default_profile[0]} is no longer following #{number} #{number == 1 ? 'user' : 'users'}."
  say
  say "Run `#{File.basename($0)} follow users #{screen_names.join(' ')}` to follow again."
end

#listed(list_name) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/t/cli/unfollow.rb', line 23

def listed(list_name)
  list_member_collection = collect_with_cursor do |cursor|
    client.list_members(list_name, :cursor => cursor, :include_entities => false, :skip_status => true)
  end
  number = list_member_collection.length
  return say "@#{@rcfile.default_profile[0]} is already not following any list members." if number.zero?
  return unless yes? "Are you sure you want to unfollow #{number} #{number == 1 ? 'user' : 'users'}?"
  list_member_collection.threaded_map do |list_member|
    retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
      client.unfollow(list_member.id, :include_entities => false)
    end
  end
  say "@#{@rcfile.default_profile[0]} is no longer following #{number} #{number == 1 ? 'user' : 'users'}."
  say
  say "Run `#{File.basename($0)} follow all listed #{list_name}` to follow again."
end

#nonfollowersObject



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/t/cli/unfollow.rb', line 83

def nonfollowers
  friend_ids = collect_with_cursor do |cursor|
    client.friend_ids(:cursor => cursor)
  end
  follower_ids = collect_with_cursor do |cursor|
    client.follower_ids(:cursor => cursor)
  end
  unfollow_ids = (friend_ids - follower_ids)
  number = unfollow_ids.length
  return say "@#{@rcfile.default_profile[0]} is already not following any non-followers." if number.zero?
  return unless yes? "Are you sure you want to unfollow #{number} #{number == 1 ? 'user' : 'users'}?"
  screen_names = unfollow_ids.threaded_map do |unfollow_id|
    retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
      user = client.unfollow(unfollow_id, :include_entities => false)
      user.screen_name
    end
  end
  say "@#{@rcfile.default_profile[0]} is no longer following #{number} #{number == 1 ? 'user' : 'users'}."
  say
  say "Run `#{File.basename($0)} follow users #{screen_names.join(' ')}` to follow again."
end

#users(screen_name, *screen_names) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/t/cli/unfollow.rb', line 106

def users(screen_name, *screen_names)
  screen_names.unshift(screen_name)
  screen_names.threaded_map do |screen_name|
    retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
      client.unfollow(screen_name, :include_entities => false)
    end
  end
  number = screen_names.length
  say "@#{@rcfile.default_profile[0]} is no longer following #{number} #{number == 1 ? 'user' : 'users'}."
  say
  say "Run `#{File.basename($0)} follow users #{screen_names.join(' ')}` to follow again."
end