Module: NamedLet

Defined in:
lib/named_let.rb,
lib/named_let/version.rb

Constant Summary collapse

VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

.extend_for_reporting(obj, the_name) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/named_let.rb', line 41

def extend_for_reporting(obj, the_name)
  return obj if obj.nil?

  # if given -d/--debug option, append calling original ones.(ruby-debug required)
  call_super = begin ;$DEBUG or Debugger.started? rescue LoadError; nil; end

  inject_code = lambda{|o, code| begin; o.instance_eval code; rescue TypeError; end  }
  escape      = lambda{|str| str.gsub(/\"/, '\\"')}

  genereate_wrapper_code = lambda{|o, method|
    original_result = escape.call(o.send(method)) if call_super
    "def #{method}; \"#{the_name}\" #{call_super ? " + \" (#{original_result})\"" : ''} ;end"
  }

  to_s_code    = genereate_wrapper_code.call(obj, :to_s)
  inspect_code = genereate_wrapper_code.call(obj, :inspect)

  inject_code.call(obj, to_s_code)
  inject_code.call(obj, inspect_code)
  obj
end