lib/pretty_feed/modulizer.rb in pretty_feed-0.2.0 vs lib/pretty_feed/modulizer.rb in pretty_feed-1.0.0

- old
+ new

@@ -1,19 +1,51 @@ # frozen_string_literal: true +# Std Libs +require "benchmark" + module PrettyFeed # Provides the pf (print_feed) method module Modulizer def to_mod(truthy:, falsey:) Module.new do - define_method(:pftf) do |prefix = nil, value = "", proc = nil| + define_method(:pftf) do |msg = nil, value = "", proc = nil, **options, &block| + rescue_logged = Array(options[:rescue_logged]) cvalue = if proc.nil? - value - else - proc.respond_to?(:call) ? proc.call(value) : proc - end + value + else + proc.respond_to?(:call) ? proc.call(value) : proc + end color = cvalue ? truthy : falsey - puts PrettyFeed::Compat["#{prefix}#{value}", color].send(color) + if block + external_block = + if rescue_logged.any? + -> () { + begin + block.call + rescue *rescue_logged => error + puts PrettyFeed::Compat["[ERR][#{error.class}][#{error.message}] #{msg}#{value}", color].send(color) + puts PrettyFeed::Compat["[ERR][Backtrace]\n#{error.backtrace.join("\n")}", color].send(color) if options[:backtrace_logged] + raise error if options[:reraise] + end + } + else + block + end + puts PrettyFeed::Compat["[BEG] #{msg}#{value}", color].send(color) + if options[:benchmark] + time = Benchmark.realtime do + external_block.call + end + seconds = "%.4fs" % time + puts PrettyFeed::Compat["[FIN][#{seconds}] #{msg}#{value}", color].send(color) + else + external_block.call + puts PrettyFeed::Compat["[FIN] #{msg}#{value}", color].send(color) + end + else + puts PrettyFeed::Compat["#{msg}#{value}", color].send(color) + end end end end module_function :to_mod