Sha256: c6a52bbd9c5f295efe3bafcf729f001fb7a13874e2ea4214ead63a89377f12d6

Contents?: true

Size: 1.77 KB

Versions: 2

Compression:

Stored size: 1.77 KB

Contents

# 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 |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
          color = cvalue ? truthy : falsey
          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
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pretty_feed-1.0.1 lib/pretty_feed/modulizer.rb
pretty_feed-1.0.0 lib/pretty_feed/modulizer.rb