Template of a custom feed generator service for the Bluesky network in Ruby

extracted printing posts to the console to a class

Changed files
+28 -14
app
+4 -14
Rakefile
··· 5 5 require 'sinatra/activerecord/rake' 6 6 7 7 require_relative 'app/config' 8 + require_relative 'app/post_console_printer' 8 9 require_relative 'app/utils' 9 10 10 11 def get_feed ··· 31 32 32 33 posts = FeedPost.where(feed_id: feed.feed_id).joins(:post).order('feed_posts.time DESC').limit(limit).map(&:post) 33 34 34 - Rainbow.enabled = true 35 - 36 35 # this fixes an error when piping a long output to less and then closing without reading it all 37 36 Signal.trap("SIGPIPE", "SYSTEM_DEFAULT") 38 37 38 + printer = PostConsolePrinter.new(feed) 39 + 39 40 posts.each do |s| 40 - print Rainbow(s.time).bold + ' * ' + Rainbow(s.id).bold + ' * ' 41 - puts Rainbow("https://bsky.app/profile/#{s.repo}/post/#{s.rkey}").darkgray 42 - puts 43 - puts feed.colored_text(s.text) 44 - if s.record['embed'] 45 - json = JSON.generate(s.record['embed']) 46 - colored = feed.colored_text(json) 47 - puts colored unless colored == json 48 - end 49 - puts 50 - puts "---" 51 - puts 41 + printer.display(s) 52 42 end 53 43 end 54 44
+24
app/post_console_printer.rb
··· 1 + require 'json' 2 + require 'rainbow' 3 + 4 + class PostConsolePrinter 5 + def initialize(feed) 6 + @feed = feed 7 + Rainbow.enabled = true 8 + end 9 + 10 + def display(post) 11 + print Rainbow(post.time).bold + ' * ' + Rainbow(post.id).bold + ' * ' 12 + puts Rainbow("https://bsky.app/profile/#{post.repo}/post/#{post.rkey}").darkgray 13 + puts 14 + puts @feed.colored_text(post.text) 15 + if post.record['embed'] 16 + json = JSON.generate(post.record['embed']) 17 + colored = @feed.colored_text(json) 18 + puts colored unless colored == json 19 + end 20 + puts 21 + puts "---" 22 + puts 23 + end 24 + end