Module: CallerLog

Defined in:
lib/caller_log.rb,
lib/caller_log/log.rb,
lib/caller_log/version.rb

Defined Under Namespace

Classes: Log

Constant Summary collapse

VERSION =
"0.1.2"

Class Method Summary collapse

Class Method Details

.calling(obj) ⇒ Object



42
43
44
# File 'lib/caller_log.rb', line 42

def calling obj
  Module === obj ? "#{obj}" : "<#{obj.class}:#{obj.object_id}>"
end

.log(*args) ⇒ Object

Raises:

  • (ArgumentError)


8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/caller_log.rb', line 8

def log *args
  raise ArgumentError,
    "wrong number of arguments (given #{args.count}, expected more than 1)" if args.count < 2
  log_file = args.pop
  objects = Array args

  log = Log.new log_file

  objects.each do |obj|

    callee = calling obj

    obj.instance_methods(false).each do |method_id|
      o_method = ref_old method_id
      obj.send :alias_method, o_method, method_id
      obj.send :define_method, method_id, &-> *para, &blk {
        record =  OpenStruct.new time: Time.now, callee: "#{callee}##{method_id}", callers: binding.of_callers[1..-1]
        log.puts record
        self.send o_method, *para, &blk
      }
    end if obj.is_a? Module

    obj.methods(false).each do |method_id|
      o_method = obj.method method_id
      obj.singleton_class.send :define_method, method_id, &-> *para, &blk {
        record =  OpenStruct.new time: Time.now, callee: "#{callee}.#{method_id}", callers: binding.of_callers[1..-1]
        log.puts record
        o_method.call *para, &blk
      }
    end

  end
end

.ref_old(method_id) ⇒ Object



46
47
48
# File 'lib/caller_log.rb', line 46

def ref_old method_id
  "#{method_id}_caller_log"
end