Class: T::CLI::Follow

Inherits:
Thor
  • Object
show all
Includes:
T::Collectable, Requestable
Defined in:
lib/t/cli/follow.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

#initializeFollow

Returns a new instance of Follow.



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

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

Instance Method Details

#followersObject



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

def followers
  follower_ids = collect_with_cursor do |cursor|
    client.follower_ids(:cursor => cursor)
  end
  friend_ids = collect_with_cursor do |cursor|
    client.friend_ids(:cursor => cursor)
  end
  follow_ids = (follower_ids - friend_ids)
  number = follow_ids.length
  return say "@#{@rcfile.default_profile[0]} is already following all followers." if number.zero?
  return unless yes? "Are you sure you want to follow #{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.follow(follow_id, :include_entities => false)
    end
  end
  say "@#{@rcfile.default_profile[0]} is now following #{number} more #{number == 1 ? 'user' : 'users'}."
  say
  say "Run `#{File.basename($0)} unfollow all followers` to stop."
end

#listed(list_name) ⇒ Object



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

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

#users(screen_name, *screen_names) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/t/cli/follow.rb', line 63

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.follow(screen_name, :include_entities => false)
    end
  end
  number = screen_names.length
  say "@#{@rcfile.default_profile[0]} is now following #{number} more #{number == 1 ? 'user' : 'users'}."
  say
  say "Run `#{File.basename($0)} unfollow users #{screen_names.join(' ')}` to stop."
end