lib/augury/fortune.rb in augury-1.0.3 vs lib/augury/fortune.rb in augury-1.1.0
- old
+ new
@@ -1,9 +1,9 @@
# frozen_string_literal: true
require 'cgi'
-require 'facets/string/word_wrap'
+require 'word_wrap'
require 'twitter'
module Augury
class Fortune
def initialize(username, path, config)
@@ -28,10 +28,11 @@
def retrieve_tweets
@tweets = collect_with_max_id do |max_id|
options = {
count: 200,
+ tweet_mode: 'extended',
include_rts: @config[:retweets],
exclude_replies: !@config[:replies],
}
options[:max_id] = max_id unless max_id.nil?
@twitter.user_timeline(@username, options)
@@ -44,11 +45,18 @@
def format_fortune
filtered = @tweets.flat_map(&:full_text).reject do |tweet|
tweet.match(/https?:/) unless @config[:links]
end
- formatted = filtered.flat_map { |tweet| CGI.unescapeHTML(tweet).word_wrap(@config[:width]) }
+ 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
author = @config[:attribution] ? "\n-- #{@twitter.user(@username).name}\n" : ''
formatted.join("#{author}%\n")
end
def write_fortune
@@ -71,9 +79,32 @@
@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
+
+ private
+
+ def transforms
+ all_transforms = []
+ all_transforms << [/https?:\/\/[^\s]+/, ''] if @config[:remove_links]
+ return all_transforms unless @config[:apply_transforms]
+
+ all_transforms.push(*@config.dig('transforms', @username) || [])
+ all_transforms.push(*@config.fetch('global-transforms', []))
+
+ raise Augury::TransformError unless validate_transforms(all_transforms)
+
+ all_transforms
+ end
+
+ def validate_transforms(all_transforms)
+ all_transforms.all? do |transform|
+ transform.count == 2 &&
+ [String, Regexp].include?(transform[0].class) &&
+ transform[1].is_a?(String)
end
end
end
end