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