| Module | Verbosify |
| In: |
lib/verbose_object.rb
|
| Author: | Nicolas Pouillard <ertai@lrde.epita.fr>. |
| Copyright: | Copyright (c) 2005 Nicolas Pouillard. All rights reserved. |
| License: | GNU General Public License (GPL). |
| Revision: | $Id: /w/fey/ruby_ex/trunk/lib/verbose_object.rb 21865 2006-02-18T17:13:28.680350Z pouillar $ |
| verbose_object_options | [R] | |
| verbose_object_reference | [RW] |
# File lib/verbose_object.rb, line 11 def initialize ( anObject, opts=nil ) @verbose_object_reference = anObject self.verbose_object_options = opts end
# File lib/verbose_object.rb, line 43 def method_missing ( m, *a, &b ) super($1.to_sym) if m.to_s =~ /^__blank_slate_(.+)/ verbose_object_method_missing(m, *a, &b) end
# File lib/verbose_object.rb, line 48 def verbose_object_method_missing ( m, *a, &b ) begin @verbose_object_options[:logger].log(self, m, *a) rescue NoMethodError => ex STDERR.puts "No valid logger (#{m}) (#{ex})" end res = verbose_object_send(m, *a, &b) return res if @verbose_object_options[:no_rec] call = MethodCall.new(m, *a, &b) opts = @verbose_object_options.merge(:call => call, :last => self) res.verbosify(opts) end
# File lib/verbose_object.rb, line 16 def verbose_object_options= ( opts ) @verbose_object_reference ||= nil @verbose_object_options = opts || {} unless @verbose_object_options.is_a? Hash raise ArgumentError, "Need a hash of options not a #@verbose_object_options" end if @verbose_object_options[:logger].nil? logger = @verbose_object_options[:logger] = Object.new def logger.log ( obj, *a ) STDERR.puts "LOG: #{obj.__id__}: #{a.inspect}" end end end
# File lib/verbose_object.rb, line 35 def verbose_object_send ( m, *a, &b ) if @verbose_object_reference.nil? __send__("__blank_slate_#{m}", *a, &b) else @verbose_object_reference.__send__(m, *a, &b) end end
# File lib/verbose_object.rb, line 61 def verbose_object_trace ( action=nil ) call = @verbose_object_options[:call] last = @verbose_object_options[:last] return verbose_object_empty_trace(action) if call.nil? if last.__blank_slate_eql? self last = verbose_object_empty_trace(action) else last = last.verbose_object_trace(action) end call.to_ruby(last) end