Class: Augury::Fortune
- Inherits:
-
Object
- Object
- Augury::Fortune
- Defined in:
- lib/augury/fortune.rb
Instance Method Summary collapse
- #collect_with_max_id(collection = [], max_id = nil, &block) ⇒ Object
- #format_fortune ⇒ Object
-
#initialize(username, path, config) ⇒ Fortune
constructor
A new instance of Fortune.
- #retrieve_tweets ⇒ Object
- #twitter_setup ⇒ Object
- #write_fortune ⇒ Object
Constructor Details
#initialize(username, path, config) ⇒ Fortune
Returns a new instance of Fortune.
9 10 11 12 13 14 |
# File 'lib/augury/fortune.rb', line 9 def initialize(username, path, config) @username = username @path = path @config = config @tweets = [] end |
Instance Method Details
#collect_with_max_id(collection = [], max_id = nil, &block) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/augury/fortune.rb', line 16 def collect_with_max_id(collection = [], max_id = nil, &block) response = yield(max_id) collection += response if response.empty? collection elsif !@config[:count].zero? && collection.length >= @config[:count] # Get everything or trim the results to the count @config[:count].zero? ? collection : collection[0..@config[:count] - 1] else collect_with_max_id(collection, response.last.id - 1, &block) end end |
#format_fortune ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/augury/fortune.rb', line 49 def format_fortune filtered = @tweets.flat_map(&:full_text).reject do |tweet| tweet.match(/https?:/) unless @config[:links] end to_transform = transforms formatted = filtered.flat_map do |tweet| text = CGI.unescapeHTML(tweet) to_transform.each do |transform| text.gsub!(transform[0], transform[1]) end WordWrap.ww text, @config.fetch(:width, 72) end = @config[:attribution] ? "\n-- #{@twitter.user(@username).name}\n" : '' text = formatted.join("#{}%\n") text + if end |
#retrieve_tweets ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/augury/fortune.rb', line 29 def retrieve_tweets # Make sure the case of the name is correct to avoid errors in the Twitter API screen_name = @twitter.user(@username).screen_name @tweets = collect_with_max_id do |max_id| = { count: 200, tweet_mode: 'extended', include_rts: @config[:retweets], exclude_replies: !@config[:replies], } [:max_id] = max_id unless max_id.nil? @twitter.user_timeline(screen_name, ) end rescue Twitter::Error::TooManyRequests => e reset_length = e.rate_limit.reset_in + 1 puts "Twitter rate limit exceeded. Waiting #{reset_length} minute(s)" sleep reset_length end |
#twitter_setup ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/augury/fortune.rb', line 80 def twitter_setup raise Augury::TwitterConfigError unless @config[:twitter] @twitter = Twitter::REST::Client.new do |cfg| cfg.consumer_key = @config[:twitter]['consumer_key'] cfg.consumer_secret = @config[:twitter]['consumer_secret'] cfg.access_token = @config[:twitter]['access_token'] cfg.access_token_secret = @config[:twitter]['access_token_secret'] end end |
#write_fortune ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/augury/fortune.rb', line 66 def write_fortune # Write out the file begin mode = @config[:append] ? 'a' : 'w' file = File.open(@path, mode) file.write("%\n") if @config[:append] file.write(format_fortune) ensure file&.close end # Create the dat file too `strfile '#{@path}' '#{@path}.dat'` end |