From ae10cdcd031d0abd744bcf6cb8c457736a0ab62a Mon Sep 17 00:00:00 2001 From: pvincent Date: Mon, 10 Jun 2024 13:33:35 +0400 Subject: [PATCH] terminus --- lib/formatters/ansi_dimensions.rb | 4 ++-- lib/formatters/ansi_filter.rb | 9 +++++++-- lib/formatters/ansi_formatter.rb | 16 ++++++++++++---- lib/{formatters => old}/basic_formatter.rb | 0 lib/{formatters => old}/symbols.txt | 0 lib/{formatters => old}/wrapper.rb | 0 6 files changed, 21 insertions(+), 8 deletions(-) rename lib/{formatters => old}/basic_formatter.rb (100%) rename lib/{formatters => old}/symbols.txt (100%) rename lib/{formatters => old}/wrapper.rb (100%) diff --git a/lib/formatters/ansi_dimensions.rb b/lib/formatters/ansi_dimensions.rb index e478ace..30d100a 100644 --- a/lib/formatters/ansi_dimensions.rb +++ b/lib/formatters/ansi_dimensions.rb @@ -1,6 +1,6 @@ # extra dimensions to customize ansi_loggingg module AnsiDimensions - def self.new(rails: '╣x╠', before: 0, after: 0) - OpenStruct.new(rails:, before:, after:) + def self.new(rails: '╣x╠', before: 0, after: 0, terminus: false) + OpenStruct.new(rails:, before:, after:, terminus:) # rubocop:disable Style/OpenStructUse end end diff --git a/lib/formatters/ansi_filter.rb b/lib/formatters/ansi_filter.rb index 38d3439..fdafa82 100644 --- a/lib/formatters/ansi_filter.rb +++ b/lib/formatters/ansi_filter.rb @@ -6,6 +6,7 @@ module AnsiFilter $memory = nil CHAR_FATAL = '⯶'.freeze + TERMINUS_STRING = '╙─╜'.freeze def self.reject(log) # log.name == 'ScoresController' || false @@ -22,7 +23,7 @@ module AnsiFilter log.dimensions = AnsiDimensions.new(rails:) $memory = nil elsif log.message.starts_with?('Completed 2') - log.dimensions = AnsiDimensions.new(rails: '╙─╜', after: 2) + log.dimensions = AnsiDimensions.new(rails: TERMINUS_STRING, after: 2) elsif log.message.starts_with?('Completed 3') $memory = '║' log.dimensions = AnsiDimensions.new(rails: "╙#{$memory}╜") @@ -32,7 +33,11 @@ module AnsiFilter log.dimensions = AnsiDimensions.new(rails: "╙#{draw_fatal}╜") end elsif log.exception - log.dimensions = AnsiDimensions.new(rails: "╓#{draw_fatal(log.level.to_s.chr.upcase)}╖", after: 2) + log.dimensions = AnsiDimensions.new( + rails: "╓#{draw_fatal(log.level.to_s.chr.upcase)}╖", + after: 2, + terminus: true + ) end end log diff --git a/lib/formatters/ansi_formatter.rb b/lib/formatters/ansi_formatter.rb index 0870685..1169b6c 100644 --- a/lib/formatters/ansi_formatter.rb +++ b/lib/formatters/ansi_formatter.rb @@ -38,6 +38,7 @@ class AnsiFormatter < SemanticLogger::Formatters::Color def origin = colorize(centerize(log.name), TEXT_CYAN) def build_prefix(char) = "#{origin} ╣#{colorize(char)}╠ " + def build_terminus = "#{origin} #{AnsiFilter::TERMINUS_STRING} " def centerize(text) = text.truncate(CENTER_SIZE).center(CENTER_SIZE) def colorize(text, tint = color) = "#{tint}#{text}#{CLEAR}" def stackisize(items) = items.length.positive? ? "\n#{items.join("\n")}" : '' @@ -84,10 +85,17 @@ class AnsiFormatter < SemanticLogger::Formatters::Color prefix = log.dimensions ? build_dimensions(log.dimensions) : build_prefix(level_char) continuation = build_prefix('┆') - log.dimensions&.before&.times { items.unshift('') } - log.dimensions&.after&.times { items << '' } - items.map do |item| + result = items.map do |item| AnsiWrapper.wrap(item, length, prefix, continuation) - end.compact.join("\n") + end + + if log.dimensions&.terminus + terminus = AnsiWrapper.wrap(' ', length, build_terminus) + result << terminus + end + + log.dimensions&.before&.times { result.unshift('') } + log.dimensions&.after&.times { result << '' } + result.compact.join("\n") end end diff --git a/lib/formatters/basic_formatter.rb b/lib/old/basic_formatter.rb similarity index 100% rename from lib/formatters/basic_formatter.rb rename to lib/old/basic_formatter.rb diff --git a/lib/formatters/symbols.txt b/lib/old/symbols.txt similarity index 100% rename from lib/formatters/symbols.txt rename to lib/old/symbols.txt diff --git a/lib/formatters/wrapper.rb b/lib/old/wrapper.rb similarity index 100% rename from lib/formatters/wrapper.rb rename to lib/old/wrapper.rb