t 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -6,6 +6,7 @@
6
6
  [![Build Status](https://secure.travis-ci.org/sferik/t.png?branch=master)][travis]
7
7
  [![Dependency Status](https://gemnasium.com/sferik/t.png?travis)][gemnasium]
8
8
  [![Pledgie](http://www.pledgie.com/campaigns/17330.png)][pledgie]
9
+ [![Flattr](http://api.flattr.com/button/flattr-badge-large.png)][flattr]
9
10
 
10
11
  #### A command-line power tool for Twitter.
11
12
 
@@ -15,6 +16,7 @@ offers vastly more commands and capabilities than are available via SMS.
15
16
  [travis]: http://travis-ci.org/sferik/t
16
17
  [gemnasium]: https://gemnasium.com/sferik/t
17
18
  [pledgie]: http://www.pledgie.com/campaigns/17330
19
+ [flattr]: http://flattr.com/thing/815001/sferikt-on-GitHub
18
20
  [sms]: https://support.twitter.com/articles/14020-twitter-sms-command
19
21
 
20
22
  ## Installation
@@ -145,7 +147,7 @@ example, send a user a direct message only if he already follows you:
145
147
  t leaders | xargs t unfollow
146
148
 
147
149
  #### Unfollow 10 people who haven't tweeted in the longest time
148
- t followings -l --sort=tweeted | head -10 | awk '{print $1}' | xargs t unfollow
150
+ t followings -l --sort=tweets | head -10 | awk '{print $1}' | xargs t unfollow
149
151
 
150
152
  #### Twitter roulette: randomly follow someone who follows you (who you don't already follow)
151
153
  t groupies | shuf | head -1 | xargs t follow
@@ -197,7 +199,7 @@ example, send a user a direct message only if he already follows you:
197
199
 
198
200
  [search]: https://dev.twitter.com/docs/using-search
199
201
 
200
- # Using T for Backup
202
+ ## Using T for Backup
201
203
 
202
204
  [@jphpsf][jphpsf] wrote a [blog post][blog] explaining how to use `t` to backup
203
205
  your Twitter account.
data/lib/t/cli.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ require 'forwardable'
2
3
  require 'oauth'
3
4
  require 'thor'
4
5
  require 'twitter'
@@ -15,23 +16,22 @@ require 't/utils'
15
16
 
16
17
  module T
17
18
  class CLI < Thor
19
+ extend Forwardable
18
20
  include T::Collectable
19
21
  include T::Printable
20
22
  include T::Requestable
21
23
  include T::Utils
22
24
 
23
- DEFAULT_HOST = 'api.twitter.com'
24
- DEFAULT_PROTOCOL = 'https'
25
25
  DEFAULT_NUM_RESULTS = 20
26
26
  DIRECT_MESSAGE_HEADINGS = ["ID", "Posted at", "Screen name", "Text"]
27
27
  TREND_HEADINGS = ["WOEID", "Parent ID", "Type", "Name", "Country"]
28
28
 
29
29
  check_unknown_options!
30
30
 
31
- option "host", :aliases => "-H", :type => :string, :default => DEFAULT_HOST, :desc => "Twitter API server"
32
- option "no-color", :aliases => "-N", :type => :boolean, :desc => "Disable colorization in output"
33
- option "no-ssl", :aliases => "-U", :type => :boolean, :default => false, :desc => "Disable SSL"
34
- option "profile", :aliases => "-P", :type => :string, :default => File.join(File.expand_path("~"), T::RCFile::FILE_NAME), :desc => "Path to RC file", :banner => "FILE"
31
+ class_option "host", :aliases => "-H", :type => :string, :default => T::Requestable::DEFAULT_HOST, :desc => "Twitter API server"
32
+ class_option "no-color", :aliases => "-N", :type => :boolean, :desc => "Disable colorization in output"
33
+ class_option "no-ssl", :aliases => "-U", :type => :boolean, :default => false, :desc => "Disable SSL"
34
+ class_option "profile", :aliases => "-P", :type => :string, :default => File.join(File.expand_path("~"), T::RCFile::FILE_NAME), :desc => "Path to RC file", :banner => "FILE"
35
35
 
36
36
  def initialize(*)
37
37
  @rcfile = T::RCFile.instance
@@ -113,7 +113,7 @@ module T
113
113
  end
114
114
 
115
115
  desc "block USER [USER...]", "Block users."
116
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
116
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
117
117
  def block(user, *users)
118
118
  users, number = fetch_users(users.unshift(user), options) do |users|
119
119
  client.block(users)
@@ -191,7 +191,7 @@ module T
191
191
 
192
192
  desc "groupies [USER]", "Returns the list of people who follow you but you don't follow back."
193
193
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
194
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
194
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
195
195
  method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
196
196
  method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
197
197
  method_option "sort", :aliases => "-s", :type => :string, :enum => %w(favorites followers friends listed screen_name since tweets tweeted), :default => "screen_name", :desc => "Specify the order of the results.", :banner => "ORDER"
@@ -225,7 +225,7 @@ module T
225
225
  map %w(disciples) => :groupies
226
226
 
227
227
  desc "dm USER MESSAGE", "Sends that person a Direct Message."
228
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
228
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
229
229
  def dm(user, message)
230
230
  require 't/core_ext/string'
231
231
  user = if options['id']
@@ -239,7 +239,7 @@ module T
239
239
  map %w(d m) => :dm
240
240
 
241
241
  desc "does_contain [USER/]LIST USER", "Find out whether a list contains a user."
242
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
242
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
243
243
  def does_contain(list, user=nil)
244
244
  owner, list = extract_owner(list, options)
245
245
  if user.nil?
@@ -262,7 +262,7 @@ module T
262
262
  map %w(dc doescontain) => :does_contain
263
263
 
264
264
  desc "does_follow USER [USER]", "Find out whether one user follows another."
265
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
265
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
266
266
  def does_follow(user1, user2=nil)
267
267
  require 't/core_ext/string'
268
268
  user1 = if options['id']
@@ -288,7 +288,7 @@ module T
288
288
  end
289
289
  map %w(df doesfollow) => :does_follow
290
290
 
291
- desc "favorite STATUS_ID [STATUS_ID...]", "Marks Tweets as favorites."
291
+ desc "favorite TWEET_ID [TWEET_ID...]", "Marks Tweets as favorites."
292
292
  def favorite(status_id, *status_ids)
293
293
  status_ids.unshift(status_id)
294
294
  status_ids.map!(&:to_i)
@@ -305,7 +305,7 @@ module T
305
305
 
306
306
  desc "favorites [USER]", "Returns the #{DEFAULT_NUM_RESULTS} most recent Tweets you favorited."
307
307
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
308
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
308
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
309
309
  method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
310
310
  method_option "number", :aliases => "-n", :type => :numeric, :default => DEFAULT_NUM_RESULTS, :desc => "Limit the number of results."
311
311
  method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
@@ -327,7 +327,7 @@ module T
327
327
  map %w(faves favourites) => :favorites
328
328
 
329
329
  desc "follow USER [USER...]", "Allows you to start following users."
330
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
330
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
331
331
  def follow(user, *users)
332
332
  users, number = fetch_users(users.unshift(user), options) do |users|
333
333
  client.follow(users)
@@ -339,7 +339,7 @@ module T
339
339
 
340
340
  desc "followings [USER]", "Returns a list of the people you follow on Twitter."
341
341
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
342
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
342
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
343
343
  method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
344
344
  method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
345
345
  method_option "sort", :aliases => "-s", :type => :string, :enum => %w(favorites followers friends listed screen_name since tweets tweeted), :default => "screen_name", :desc => "Specify the order of the results.", :banner => "ORDER"
@@ -365,7 +365,7 @@ module T
365
365
 
366
366
  desc "followers [USER]", "Returns a list of the people who follow you on Twitter."
367
367
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
368
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
368
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
369
369
  method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
370
370
  method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
371
371
  method_option "sort", :aliases => "-s", :type => :string, :enum => %w(favorites followers friends listed screen_name since tweets tweeted), :default => "screen_name", :desc => "Specify the order of the results.", :banner => "ORDER"
@@ -391,7 +391,7 @@ module T
391
391
 
392
392
  desc "friends [USER]", "Returns the list of people who you follow and follow you back."
393
393
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
394
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
394
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
395
395
  method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
396
396
  method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
397
397
  method_option "sort", :aliases => "-s", :type => :string, :enum => %w(favorites followers friends listed screen_name since tweets tweeted), :default => "screen_name", :desc => "Specify the order of the results.", :banner => "ORDER"
@@ -425,7 +425,7 @@ module T
425
425
 
426
426
  desc "leaders [USER]", "Returns the list of people who you follow but don't follow you back."
427
427
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
428
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
428
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
429
429
  method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
430
430
  method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
431
431
  method_option "sort", :aliases => "-s", :type => :string, :enum => %w(favorites followers friends listed screen_name since tweets tweeted), :default => "screen_name", :desc => "Specify the order of the results.", :banner => "ORDER"
@@ -459,7 +459,7 @@ module T
459
459
 
460
460
  desc "lists [USER]", "Returns the lists created by a user."
461
461
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
462
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
462
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
463
463
  method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
464
464
  method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
465
465
  method_option "sort", :aliases => "-s", :type => :string, :enum => %w(members mode posted slug subscribers), :default => "slug", :desc => "Specify the order of the results.", :banner => "ORDER"
@@ -480,9 +480,7 @@ module T
480
480
  end
481
481
 
482
482
  desc "matrix", "Unfortunately, no one can be told what the Matrix is. You have to see it for yourself."
483
- def matrix
484
- T::Stream.new.matrix
485
- end
483
+ def_delegator :"T::Stream.new", :matrix
486
484
 
487
485
  desc "mentions", "Returns the #{DEFAULT_NUM_RESULTS} most recent Tweets mentioning you."
488
486
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
@@ -500,7 +498,7 @@ module T
500
498
 
501
499
  desc "open USER", "Opens that user's profile in a web browser."
502
500
  method_option "display-url", :aliases => "-d", :type => :boolean, :default => false, :desc => "Display the requested URL instead of attempting to open it."
503
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
501
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
504
502
  method_option "status", :aliases => "-s", :type => :boolean, :default => false, :desc => "Specify input as a Twitter status ID instead of a screen name."
505
503
  def open(user)
506
504
  require 'launchy'
@@ -516,8 +514,8 @@ module T
516
514
  end
517
515
  end
518
516
 
519
- desc "reply STATUS_ID MESSAGE", "Post your Tweet as a reply directed at another person."
520
- method_option "all", :aliases => "-a", :type => "boolean", :default => false, :desc => "Reply to all users mentioned in the Tweet."
517
+ desc "reply TWEET_ID MESSAGE", "Post your Tweet as a reply directed at another person."
518
+ method_option "all", :aliases => "-a", :type => :boolean, :default => false, :desc => "Reply to all users mentioned in the Tweet."
521
519
  method_option "location", :aliases => "-l", :type => :boolean, :default => false
522
520
  def reply(status_id, message)
523
521
  status = client.status(status_id.to_i, :include_my_retweet => false)
@@ -537,7 +535,7 @@ module T
537
535
  end
538
536
 
539
537
  desc "report_spam USER [USER...]", "Report users for spam."
540
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
538
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
541
539
  def report_spam(user, *users)
542
540
  users, number = fetch_users(users.unshift(user), options) do |users|
543
541
  client.report_spam(users)
@@ -546,7 +544,7 @@ module T
546
544
  end
547
545
  map %w(report reportspam spam) => :report_spam
548
546
 
549
- desc "retweet STATUS_ID [STATUS_ID...]", "Sends Tweets to your followers."
547
+ desc "retweet TWEET_ID [TWEET_ID...]", "Sends Tweets to your followers."
550
548
  def retweet(status_id, *status_ids)
551
549
  status_ids.unshift(status_id)
552
550
  status_ids.map!(&:to_i)
@@ -563,7 +561,7 @@ module T
563
561
 
564
562
  desc "retweets [USER]", "Returns the #{DEFAULT_NUM_RESULTS} most recent Retweets by a user."
565
563
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
566
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
564
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
567
565
  method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
568
566
  method_option "number", :aliases => "-n", :type => :numeric, :default => DEFAULT_NUM_RESULTS, :desc => "Limit the number of results."
569
567
  method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
@@ -594,7 +592,7 @@ module T
594
592
  say "#{' ' * options['indent'].to_i}----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|"
595
593
  end
596
594
 
597
- desc "status STATUS_ID", "Retrieves detailed information about a Tweet."
595
+ desc "status TWEET_ID", "Retrieves detailed information about a Tweet."
598
596
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
599
597
  def status(status_id)
600
598
  status = client.status(status_id.to_i, :include_my_retweet => false)
@@ -640,12 +638,21 @@ module T
640
638
 
641
639
  desc "timeline [USER]", "Returns the #{DEFAULT_NUM_RESULTS} most recent Tweets posted by a user."
642
640
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
643
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
641
+ method_option "exclude", :aliases => "-e", :type => :string, :enum => %w(replies retweets), :desc => "Exclude certain types of Tweets from the results.", :banner => "TYPE"
642
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
644
643
  method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
645
644
  method_option "number", :aliases => "-n", :type => :numeric, :default => DEFAULT_NUM_RESULTS, :desc => "Limit the number of results."
646
645
  method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
647
646
  def timeline(user=nil)
648
647
  count = options['number'] || DEFAULT_NUM_RESULTS
648
+ exclude_opts = case options['exclude']
649
+ when 'replies'
650
+ {:exclude_replies => true}
651
+ when 'retweets'
652
+ {:include_rts => false}
653
+ else
654
+ {}
655
+ end
649
656
  if user
650
657
  require 't/core_ext/string'
651
658
  user = if options['id']
@@ -654,11 +661,11 @@ module T
654
661
  user.strip_ats
655
662
  end
656
663
  tweets = collect_with_count(count) do |opts|
657
- client.user_timeline(user, opts)
664
+ client.user_timeline(user, opts.merge(exclude_opts))
658
665
  end
659
666
  else
660
667
  tweets = collect_with_count(count) do |opts|
661
- client.home_timeline(opts)
668
+ client.home_timeline(opts.merge(exclude_opts))
662
669
  end
663
670
  end
664
671
  print_tweets(tweets)
@@ -666,7 +673,7 @@ module T
666
673
  map %w(tl) => :timeline
667
674
 
668
675
  desc "trends [WOEID]", "Returns the top 10 trending topics."
669
- method_option "exclude-hashtags", :aliases => "-x", :type => "boolean", :default => false, :desc => "Remove all hashtags from the trends list."
676
+ method_option "exclude-hashtags", :aliases => "-x", :type => :boolean, :default => false, :desc => "Remove all hashtags from the trends list."
670
677
  def trends(woe_id=1)
671
678
  opts = {}
672
679
  opts.merge!(:exclude => "hashtags") if options['exclude-hashtags']
@@ -715,7 +722,7 @@ module T
715
722
  map %w(locations trendlocations) => :trend_locations
716
723
 
717
724
  desc "unfollow USER [USER...]", "Allows you to stop following users."
718
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
725
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
719
726
  def unfollow(user, *users)
720
727
  users, number = fetch_users(users.unshift(user), options) do |users|
721
728
  client.unfollow(users)
@@ -744,7 +751,7 @@ module T
744
751
 
745
752
  desc "users USER [USER...]", "Returns a list of users you specify."
746
753
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
747
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
754
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
748
755
  method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
749
756
  method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
750
757
  method_option "sort", :aliases => "-s", :type => :string, :enum => %w(favorites followers friends listed screen_name since tweets tweeted), :default => "screen_name", :desc => "Specify the order of the results.", :banner => "ORDER"
@@ -771,7 +778,7 @@ module T
771
778
 
772
779
  desc "whois USER", "Retrieves profile information for the user."
773
780
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
774
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
781
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
775
782
  def whois(user)
776
783
  require 't/core_ext/string'
777
784
  user = if options['id']
data/lib/t/collectable.rb CHANGED
@@ -6,10 +6,6 @@ module T
6
6
 
7
7
  MAX_NUM_RESULTS = 200
8
8
 
9
- def collect_with_count(count, &block)
10
- collect_with_number(count, :count, &block)
11
- end
12
-
13
9
  def collect_with_cursor(collection=[], cursor=-1, &block)
14
10
  object = retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
15
11
  yield(cursor)
@@ -27,12 +23,12 @@ module T
27
23
  tweets.empty? ? collection.flatten : collect_with_max_id(collection, tweets.last.id - 1, &block)
28
24
  end
29
25
 
30
- def collect_with_number(number, key, &block)
26
+ def collect_with_count(number, &block)
31
27
  opts = {}
32
- opts[key] = MAX_NUM_RESULTS
28
+ opts[:count] = MAX_NUM_RESULTS
33
29
  collect_with_max_id do |max_id|
34
30
  opts[:max_id] = max_id unless max_id.nil?
35
- opts[key] = number unless number >= MAX_NUM_RESULTS
31
+ opts[:count] = number unless number >= MAX_NUM_RESULTS
36
32
  if number > 0
37
33
  tweets = yield opts
38
34
  number -= tweets.length
@@ -41,14 +37,6 @@ module T
41
37
  end.flatten.compact
42
38
  end
43
39
 
44
- def collect_with_per_page(per_page, &block)
45
- collect_with_number(per_page, :per_page, &block)
46
- end
47
-
48
- def collect_with_rpp(rpp, &block)
49
- collect_with_number(rpp, :rpp, &block)
50
- end
51
-
52
40
  def collect_with_page(collection=[], page=1, &block)
53
41
  tweets = retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
54
42
  yield page
data/lib/t/delete.rb CHANGED
@@ -11,13 +11,18 @@ module T
11
11
 
12
12
  check_unknown_options!
13
13
 
14
+ class_option "host", :aliases => "-H", :type => :string, :default => T::Requestable::DEFAULT_HOST, :desc => "Twitter API server"
15
+ class_option "no-color", :aliases => "-N", :type => :boolean, :desc => "Disable colorization in output"
16
+ class_option "no-ssl", :aliases => "-U", :type => :boolean, :default => false, :desc => "Disable SSL"
17
+ class_option "profile", :aliases => "-P", :type => :string, :default => File.join(File.expand_path("~"), T::RCFile::FILE_NAME), :desc => "Path to RC file", :banner => "FILE"
18
+
14
19
  def initialize(*)
15
20
  @rcfile = T::RCFile.instance
16
21
  super
17
22
  end
18
23
 
19
24
  desc "block USER [USER...]", "Unblock users."
20
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
25
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
21
26
  method_option "force", :aliases => "-f", :type => :boolean, :default => false
22
27
  def block(user, *users)
23
28
  users, number = fetch_users(users.unshift(user), options) do |users|
@@ -51,7 +56,7 @@ module T
51
56
  end
52
57
  map %w(d m) => :dm
53
58
 
54
- desc "favorite STATUS_ID [STATUS_ID...]", "Delete favorites."
59
+ desc "favorite TWEET_ID [TWEET_ID...]", "Delete favorites."
55
60
  method_option "force", :aliases => "-f", :type => :boolean, :default => false
56
61
  def favorite(status_id, *status_ids)
57
62
  status_ids.unshift(status_id)
@@ -75,7 +80,7 @@ module T
75
80
 
76
81
  desc "list LIST", "Delete a list."
77
82
  method_option "force", :aliases => "-f", :type => :boolean, :default => false
78
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify list via ID instead of slug."
83
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify list via ID instead of slug."
79
84
  def list(list)
80
85
  if options['id']
81
86
  require 't/core_ext/string'
@@ -89,7 +94,7 @@ module T
89
94
  say "@#{@rcfile.active_profile[0]} deleted the list \"#{list.name}\"."
90
95
  end
91
96
 
92
- desc "status STATUS_ID [STATUS_ID...]", "Delete Tweets."
97
+ desc "status TWEET_ID [TWEET_ID...]", "Delete Tweets."
93
98
  method_option "force", :aliases => "-f", :type => :boolean, :default => false
94
99
  def status(status_id, *status_ids)
95
100
  status_ids.unshift(status_id)
data/lib/t/list.rb CHANGED
@@ -19,13 +19,18 @@ module T
19
19
 
20
20
  check_unknown_options!
21
21
 
22
+ class_option "host", :aliases => "-H", :type => :string, :default => T::Requestable::DEFAULT_HOST, :desc => "Twitter API server"
23
+ class_option "no-color", :aliases => "-N", :type => :boolean, :desc => "Disable colorization in output"
24
+ class_option "no-ssl", :aliases => "-U", :type => :boolean, :default => false, :desc => "Disable SSL"
25
+ class_option "profile", :aliases => "-P", :type => :string, :default => File.join(File.expand_path("~"), T::RCFile::FILE_NAME), :desc => "Path to RC file", :banner => "FILE"
26
+
22
27
  def initialize(*)
23
28
  @rcfile = T::RCFile.instance
24
29
  super
25
30
  end
26
31
 
27
32
  desc "add LIST USER [USER...]", "Add members to a list."
28
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
33
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
29
34
  def add(list, user, *users)
30
35
  users, number = fetch_users(users.unshift(user), options) do |users|
31
36
  client.list_add_members(list, users)
@@ -78,7 +83,7 @@ module T
78
83
 
79
84
  desc "members [USER/]LIST", "Returns the members of a Twitter list."
80
85
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
81
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
86
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
82
87
  method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
83
88
  method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
84
89
  method_option "sort", :aliases => "-s", :type => :string, :enum => %w(favorites followers friends listed screen_name since tweets tweeted), :default => "screen_name", :desc => "Specify the order of the results.", :banner => "ORDER"
@@ -92,7 +97,7 @@ module T
92
97
  end
93
98
 
94
99
  desc "remove LIST USER [USER...]", "Remove members from a list."
95
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
100
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify input as Twitter user IDs instead of screen names."
96
101
  def remove(list, user, *users)
97
102
  users, number = fetch_users(users.unshift(user), options) do |users|
98
103
  client.list_remove_members(list, users)
@@ -109,14 +114,14 @@ module T
109
114
 
110
115
  desc "timeline [USER/]LIST", "Show tweet timeline for members of the specified list."
111
116
  method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
112
- method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
117
+ method_option "id", :aliases => "-i", :type => :boolean, :default => false, :desc => "Specify user via ID instead of screen name."
113
118
  method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
114
119
  method_option "number", :aliases => "-n", :type => :numeric, :default => DEFAULT_NUM_RESULTS, :desc => "Limit the number of results."
115
120
  method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
116
121
  def timeline(list)
117
122
  owner, list = extract_owner(list, options)
118
- per_page = options['number'] || DEFAULT_NUM_RESULTS
119
- tweets = collect_with_per_page(per_page) do |opts|
123
+ count = options['number'] || DEFAULT_NUM_RESULTS
124
+ tweets = collect_with_count(count) do |opts|
120
125
  client.list_timeline(owner, list, opts)
121
126
  end
122
127
  print_tweets(tweets)