# Example of how ApsectR can be used: method call logging (tracing)
require 'aspectr'
include AspectR
class Logger < Aspect
def tick; "#{Time.now.strftime('%Y-%m-%d %X')}"; end
def log_enter(method, object, exitstatus, *args)
$stderr.puts "#{tick} #{self.class}##{method}: args = #{args.inspect}"
end
def log_exit(method, object, exitstatus, *args)
$stderr.print "#{tick} #{self.class}##{method}: exited "
if exitstatus.kind_of?(Array)
$stderr.puts "normally returning #{exitstatus[0].inspect}"
elsif exitstatus == true
$stderr.puts "with exception '#{$!}'"
else
$stderr.puts "normally"
end
end
end
if $0 == __FILE__
class SomeClass
def some_method
sleep 1
puts "Hello!"
[:t, "sd"]
end
def some_other_method(*args)
raise NotImplementedError
end
end
Logger.new.wrap(SomeClass, :log_enter, :log_exit, /some/)
SomeClass.new.some_method
begin
SomeClass.new.some_other_method(1, true)
rescue Exception
end
end
syntax highlighted by Code2HTML, v. 0.9.1