Sha256: 3987c405da3bfec2dd186fa86bf07d223c3ddbe4fd31695084332786833d2b80

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

require 'date'
require 'logger'

require 'vedeu'

module Vedeu
  module Instrumentation
    # :nocov:
    class Log
      def self.logger
        @logger ||= Logger.new(filename).tap do |log|
          log.formatter = proc do |_, time, _, message|
            time.utc.iso8601 + ": " + message + "\n"
          end
        end
      end

      def self.error(exception)
        backtrace = exception.backtrace.join("\n")
        message   = exception.message + "\n" + backtrace

        logger.debug(message)
      end

      private

      def self.filename
        Vedeu.root_path + '/logs/vedeu.log'
      end
    end

    class Trace
      def self.call(options = {})
        new(options).trace
      end

      def initialize(options = {})
        @options = options
      end

      def trace
        set_trace_func proc { |event, file, line, id, binding, classname|
          if event == watched && classname.to_s.match(klass)
            Vedeu.log(sprintf(" %s %-35s #%s", event, classname, id))
            # binding.eval('local_variables').each do |var|
            #   print("#{var.to_s} = #{binding.local_variable_get(var).inspect}\n")
            # end
          end
        }
      end

      private

      def pretty!(&block)
        ["\e[38;5;#{rand(22..231)}m", yield, "\e[38;2;39m"].join
      end

      def watched
        options[:event]
      end

      def klass
        options[:klass]
      end

      def options
        defaults.merge!(@options)
      end

      def defaults
        {
          event: 'call',
          klass: /^Vedeu::(?!.*Instrumentation|Interface|Line|Stream|Style|Colour|Geometry|Terminal|Esc|Translator).*/
        }
      end

      # everything except Interface, Geometry and Terminal
      # klass: /^Vedeu::(?!.*Interface|Geometry|Terminal).*/
    end
    # :nocov:
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vedeu-0.1.3 lib/vedeu/instrumentation.rb