Class: T::Stream

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

Constant Summary collapse

TWEET_HEADINGS_FORMATTING =
[
  "%-18s",  # Add padding to maximum length of a Tweet ID
  "%-12s",  # Add padding to length of a timestamp formatted with ls_formatted_time
  "%-20s",  # Add padding to maximum length of a Twitter screen name
  "%s",     # Last element does not need special formatting
].freeze

Constants included from Printable

Printable::LIST_HEADINGS, Printable::MONTH_IN_SECONDS, Printable::TWEET_HEADINGS, Printable::USER_HEADINGS

Instance Method Summary collapse

Constructor Details

#initializeStream

Returns a new instance of Stream.



22
23
24
25
# File 'lib/t/stream.rb', line 22

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

Instance Method Details

#allObject



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
# File 'lib/t/stream.rb', line 31

def all
  streaming_client.before_request do
    if options["csv"]
      require "csv"
      say TWEET_HEADINGS.to_csv
    elsif options["long"] && STDOUT.tty?
      headings = Array.new(TWEET_HEADINGS.size) do |index|
        TWEET_HEADINGS_FORMATTING[index] % TWEET_HEADINGS[index]
      end
      print_table([headings])
    end
  end
  streaming_client.sample do |tweet|
    next unless tweet.is_a?(Twitter::Tweet)

    if options["csv"]
      print_csv_tweet(tweet)
    elsif options["long"]
      array = build_long_tweet(tweet).each_with_index.collect do |element, index|
        TWEET_HEADINGS_FORMATTING[index] % element
      end
      print_table([array], truncate: STDOUT.tty?)
    else
      print_message(tweet.user.screen_name, tweet.text)
    end
  end
end

#list(user_list) ⇒ Object



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
# File 'lib/t/stream.rb', line 65

def list(user_list)
  owner, list_name = extract_owner(user_list, options)
  require "t/list"
  streaming_client.before_request do
    list = T::List.new
    list.options = list.options.merge(options)
    list.options = list.options.merge(reverse: true)
    list.options = list.options.merge(format: TWEET_HEADINGS_FORMATTING)
    list.timeline(user_list)
  end
  user_ids = client.list_members(owner, list_name).collect(&:id)
  streaming_client.filter(follow: user_ids.join(",")) do |tweet|
    next unless tweet.is_a?(Twitter::Tweet)

    if options["csv"]
      print_csv_tweet(tweet)
    elsif options["long"]
      array = build_long_tweet(tweet).each_with_index.collect do |element, index|
        TWEET_HEADINGS_FORMATTING[index] % element
      end
      print_table([array], truncate: STDOUT.tty?)
    else
      print_message(tweet.user.screen_name, tweet.text)
    end
  end
end

#matrixObject



94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/t/stream.rb', line 94

def matrix
  require "t/cli"
  streaming_client.before_request do
    cli = T::CLI.new
    cli.matrix
  end
  streaming_client.sample(language: "ja") do |tweet|
    next unless tweet.is_a?(Twitter::Tweet)

    say(tweet.text.gsub(/[^\u3000\u3040-\u309f]/, "").reverse, %i[bold green on_black], false)
  end
end

#search(keyword, *keywords) ⇒ Object



111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/t/stream.rb', line 111

def search(keyword, *keywords)
  keywords.unshift(keyword)
  require "t/search"
  streaming_client.before_request do
    search = T::Search.new
    search.options = search.options.merge(options)
    search.options = search.options.merge(reverse: true)
    search.options = search.options.merge(format: TWEET_HEADINGS_FORMATTING)
    search.all(keywords.join(" OR "))
  end
  streaming_client.filter(track: keywords.join(",")) do |tweet|
    next unless tweet.is_a?(Twitter::Tweet)

    if options["csv"]
      print_csv_tweet(tweet)
    elsif options["long"]
      array = build_long_tweet(tweet).each_with_index.collect do |element, index|
        TWEET_HEADINGS_FORMATTING[index] % element
      end
      print_table([array], truncate: STDOUT.tty?)
    else
      print_message(tweet.user.screen_name, tweet.text)
    end
  end
end

#timelineObject



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/t/stream.rb', line 141

def timeline
  require "t/cli"
  streaming_client.before_request do
    cli = T::CLI.new
    cli.options = cli.options.merge(options)
    cli.options = cli.options.merge(reverse: true)
    cli.options = cli.options.merge(format: TWEET_HEADINGS_FORMATTING)
    cli.timeline
  end
  streaming_client.user do |tweet|
    next unless tweet.is_a?(Twitter::Tweet)

    if options["csv"]
      print_csv_tweet(tweet)
    elsif options["long"]
      array = build_long_tweet(tweet).each_with_index.collect do |element, index|
        TWEET_HEADINGS_FORMATTING[index] % element
      end
      print_table([array], truncate: STDOUT.tty?)
    else
      print_message(tweet.user.screen_name, tweet.text)
    end
  end
end

#users(user_id, *user_ids) ⇒ Object



170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# File 'lib/t/stream.rb', line 170

def users(user_id, *user_ids)
  user_ids.unshift(user_id)
  user_ids.collect!(&:to_i)
  streaming_client.before_request do
    if options["csv"]
      require "csv"
      say TWEET_HEADINGS.to_csv
    elsif options["long"] && STDOUT.tty?
      headings = Array.new(TWEET_HEADINGS.size) do |index|
        TWEET_HEADINGS_FORMATTING[index] % TWEET_HEADINGS[index]
      end
      print_table([headings])
    end
  end
  streaming_client.filter(follow: user_ids.join(",")) do |tweet|
    next unless tweet.is_a?(Twitter::Tweet)

    if options["csv"]
      print_csv_tweet(tweet)
    elsif options["long"]
      array = build_long_tweet(tweet).each_with_index.collect do |element, index|
        TWEET_HEADINGS_FORMATTING[index] % element
      end
      print_table([array], truncate: STDOUT.tty?)
    else
      print_message(tweet.user.screen_name, tweet.text)
    end
  end
end