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