module Pry::SendTweet::TweetRenderer
Public Instance Methods
render_tweets(tweet_fetcher, title: nil, timeout: _pry_.config.twitter.refresh_interval)
click to toggle source
# File lib/pry/send_tweet/renderers/tweet_renderer.rb, line 5 def render_tweets(tweet_fetcher, title: nil, timeout: _pry_.config.twitter.refresh_interval) pager = Pry::Pager::SystemPager.new(_pry_.output).tap(&:fork) interval = __choose_render_interval(timeout) timeout(interval) do began_at, refresh_at = __find_timeout_range(interval) rendered_title = __choose_title(title, began_at, refresh_at) tweets = __fetch_tweets(tweet_fetcher) tweets.empty? ? pager.write("No tweets to show.") : pager.write(__render_tweets(rendered_title, tweets)) end rescue Pry::Pager::StopPaging, Interrupt pager.fast_exit! system 'reset' rescue Timeout::Error pager.fast_exit! system 'reset' retry ensure pager.close end
Private Instance Methods
__choose_render_interval(timeout)
click to toggle source
@api private
# File lib/pry/send_tweet/renderers/tweet_renderer.rb, line 93 def __choose_render_interval(timeout) return nil if timeout == false timeout || (60*5) end
__choose_title(title, began_at, refresh_at)
click to toggle source
@api private
# File lib/pry/send_tweet/renderers/tweet_renderer.rb, line 78 def __choose_title(title, began_at, refresh_at) title = bold green(title || "Twitter") timestamps = [bold("Last Refresh: "), began_at.strftime(time_format), "\n"] timestamps.concat [ bold("Next Refresh: "), refresh_at.strftime(time_format), "\n" ] if refresh_at title = "#{title}\n\n" title += timestamps.join title << "\n\n" title end
__fetch_tweets(tweet_fetcher)
click to toggle source
@api private
# File lib/pry/send_tweet/renderers/tweet_renderer.rb, line 68 def __fetch_tweets(tweet_fetcher) if tweet_fetcher.respond_to?(:call) tweet_fetcher.call else # Already fetched tweet_fetcher end end
__find_timeout_range(seconds)
click to toggle source
@api private
# File lib/pry/send_tweet/renderers/tweet_renderer.rb, line 99 def __find_timeout_range(seconds) seconds ? [Time.now.getlocal, (Time.now + seconds).getlocal] : [Time.now.getlocal, nil] end
__read_tweet_body(tweet)
click to toggle source
@api private
# File lib/pry/send_tweet/renderers/tweet_renderer.rb, line 55 def __read_tweet_body(tweet) uris = tweet.uris text = tweet.attrs[:full_text] ? tweet.attrs[:full_text] : tweet.full_text # 'text' might be a frozen string text = text.dup uris.each do |uri| text.gsub!(uri.attrs[:url], uri.attrs[:expanded_url]) end CGI.unescapeHTML(text).strip end
__render_tweet(tweet)
click to toggle source
@api private
# File lib/pry/send_tweet/renderers/tweet_renderer.rb, line 35 def __render_tweet(tweet) contents = __read_tweet_body(tweet) body = "#{tweet.url}\n--\n#{contents}\n" height = body.lines.count > box_height ? body.lines.count : box_height TTY::Box.frame(height: height, width: box_width, title: {top_left: __render_tweet_title(tweet)}) {body}.to_s end
__render_tweet_title(tweet)
click to toggle source
@api private
# File lib/pry/send_tweet/renderers/tweet_renderer.rb, line 45 def __render_tweet_title(tweet) user, created_at = tweet.user, tweet.created_at.getlocal title = [ red("@#{user.screen_name}"), "Around " + time_ago_in_words(created_at) + " before Last Refresh" ].join green(" | ") " #{title} " end
__render_tweets(title, tweets)
click to toggle source
@api private
# File lib/pry/send_tweet/renderers/tweet_renderer.rb, line 28 def __render_tweets(title, tweets) title + tweets.map {|tweet| __render_tweet(tweet) }.join("\n") end