module Rdoba::Log

Constants

Initfunc

Public Class Methods

define_methods(obj, list) click to toggle source
# File lib/rdoba/log.rb, line 322
def self.define_methods obj, list
   list.each do| f |
      evas = "def #{f} *args;__rdoba_log__.#{f} *args;end"
      if obj.class != Object
         obj.class_eval( evas ) ; end
      obj.instance_eval( evas ) ; end ; end
enabled?() click to toggle source
# File lib/rdoba/log.rb, line 188
def self.enabled?
   @@enabled ; end
log(io_m, prefix, params) click to toggle source
# File lib/rdoba/log.rb, line 401
def self.log io_m, prefix, params
  text = prefix
  text << params.map do |prm|
      case prm
      when Hash
        r = []
        prm.each do |key, value| r << "#{key}: #{value.inspect}" end
        r.join(", ")
      when Array
        prm.join(', ')
      when String
        prm
      else
        prm.inspect
      end
    end.join(', ')
  # NOTE: the shell over text id requires to proper output
  # in multiprocess environment
  io_m.call "#{text}\n"; end
log_class_setup(obj) click to toggle source
# File lib/rdoba/log.rb, line 298
def self.log_class_setup obj
   obj.class_eval "class RdobaLog;end"
   obj.class_eval "def __rdoba_log__;@__rdoba_log__||=RdobaLog.new;end"
   obj.class_eval "class << self; def self.__rdoba_log__;
                   @__rdoba_log__||=RdobaLog.new;end;end"
   obj.class_eval "def self.__rdoba_log__;
                   @__rdoba_log__||=#{obj}::RdobaLog.new;end"
   obj::RdobaLog.class_eval &Initfunc ; end
log_functions_get(obj) click to toggle source
# File lib/rdoba/log.rb, line 341
def self.log_functions_get obj
   obj.class_variable_get :@@rdoba_log_functions
rescue
   [] ; end
log_functions_set(obj, functions) click to toggle source
# File lib/rdoba/log.rb, line 338
def self.log_functions_set obj, functions
   obj.class_variable_set :@@rdoba_log_functions, functions ; end
log_init_io_m(options = {}) click to toggle source
# File lib/rdoba/log.rb, line 292
def self.log_init_io_m options = {}
   options = Rdoba::Log.class_variable_get :@@options
   io = options[ :io ] || $stdout
   # TODO puts costomize
   io_m = io.method :puts ; end
log_init_prefix(obj, is_self = false) click to toggle source
# File lib/rdoba/log.rb, line 273
def self.log_init_prefix obj, is_self = false
   options = Rdoba::Log.class_variable_get :@@options
   pfx = ';if Rdoba::Log.enabled?;(Rdoba::Log::log @@rdoba_log_io_method,"'
   if prefix = ( options[ :prefix ].is_a?( Array ) && options[ :prefix ] ||
         [ options[ :prefix ] ] )
      if prefix.include?( :timestamp )
         pfx << '[#{Time.now.strftime( "%H:%M:%S.%N" )}]'; end
      if prefix.include?( :pid )
         pfx << '{#{Process.pid}}'; end
      if prefix.include?( :function )
         pfx << '(#{m,f,l=get_stack_function_data_at_level(2);m}:#{f}.#{l})'
      elsif prefix.include?( :function_name )
         if prefix.include?( :function_line )
            pfx << '(#{_,f,l=get_stack_function_data_at_level(2);f}.#{l})'
         else
            pfx << '(#{get_stack_function_data_at_level(2)[1]})'
            end ; end ; end
   pfx ; end
log_instance_setup(obj) click to toggle source
# File lib/rdoba/log.rb, line 307
def self.log_instance_setup obj
   obj.instance_eval "class ::RdobaLog;end"
   obj.instance_eval "def __rdoba_log__;$__rdoba_log__||=::RdobaLog.new;end"
   obj.instance_eval "class << self; def self.__rdoba_log__;
                      $__rdoba_log__||=::RdobaLog.new;end;end"
   obj.instance_eval "def self.__rdoba_log__;
                      $__rdoba_log__||=::RdobaLog.new;end"
   ::RdobaLog.class_eval &Initfunc ; end
log_prefix_get(obj) click to toggle source
# File lib/rdoba/log.rb, line 346
def self.log_prefix_get obj
   obj.class_variable_get :@@rdoba_log_prefix
rescue
   ';if true;(File.join "' ; end
make_code(functions, pfx) click to toggle source
# File lib/rdoba/log.rb, line 365
def self.make_code functions, pfx
  code = ''
  psfx = ' ",params);end;end;'
  if functions.include?( :enter )
    code << 'def + *params' + pfx + '<<<' + psfx
  else
    code << 'def + *params;end;'; end
  if functions.include?( :leave )
    code << 'def - ev' + pfx + '>>> ",[[ev.inspect]]);end;ev;end;'
  else
    code << 'def - ev;ev;end;'; end
  if functions.include?( :basic )
    code << "def > *params#{pfx}>#{psfx}"
  else
    code << 'def > *params;end;'; end
  if functions.include?( :extended )
    code << 'def >> *params' + pfx + '>>' + psfx
  else
    code << 'def >> *params;end;'; end
  if functions.include?( :warn )
    code << "def % *params#{pfx}%%%#{psfx}"
  else
    code << 'def % *params;end;'; end
  if functions.include?( :info )
    code << "def * *params#{pfx}***#{psfx}"
  else
    code << 'def * *params;end;'; end
  if functions.include?( :compat )
    code << "$dbgl_#{self.class}=0;"
    (1..0xF).each do |x|
      (1..0xF).each do |y|
        idx = sprintf "%x%x", x, y
        code << "def dbp#{idx}(text); dbp(0x#{idx},text); end;"
        code << "def dbg#{idx}(text); dbg(0x#{idx},text); end;"; end; end; end
  code; end
try_define_compat(functions, target) click to toggle source
# File lib/rdoba/log.rb, line 329
def self.try_define_compat functions, target
   if functions.include?( :compat )
      list = [ :dbgl= ]
      (1..0xF).each do |x|
         (1..0xF).each do |y|
            idx = sprintf( "%x%x", x, y )
            list << "dbp#{idx}".to_sym << "dbg#{idx}".to_sym ; end; end
      Rdoba::Log.define_methods( target, list ) ; end ; end
update_functions(functions, obj, method) click to toggle source
# File lib/rdoba/log.rb, line 351
def self.update_functions functions, obj, method
   if functions.is_a?( Array ) && functions.include?( :* )
      functions = [ :basic, :enter, :leave, :warn, :info, :extended,
                    :compat ] ; end # TODO compat
   cf = self.log_functions_get obj
   functions = cf.send( method, functions.is_a?( Array ) && functions ||
               functions.is_a?( NilClass) && [] ||
               [ functions.to_s.to_sym ] )
   self.log_functions_set obj, functions

   pfx = self.log_prefix_get obj
   code = Rdoba::Log::make_code functions, pfx
   obj.class_eval code ; end