Recorder
Recorder is similar essentially a method probe. It records everthing that happens to it, building an internal parse tree. You can then pass a substitute object and apply the recoding to it. Or you can utilize the parse tree.
The only limitation of Recorder is with special operators, like if, &&, ||, etc. Since they are not true methods they can’t be recorded. (Too bad for Ruby.)
Synopsis
class Z def name ; 'George' ; end def age ; 12 ; end end z = Z.new r = Recorder.new q = proc { |x| (x.name == 'George') & (x.age > 10) } x = q[r] x.__call__(z)
produces
true
Methods
Public Class methods
[ show source ]
# File lib/facets/more/recorder.rb, line 55 def initialize( msg=nil ) @msg = msg end
Public Instance methods
[ show source ]
# File lib/facets/more/recorder.rb, line 63 def __call__( orig ) return orig unless @msg sym = @msg[0] args = @msg[1..-1].collect do |a| Recorder === a ? a.__call__(orig) : a end obj = args.shift obj.__send__( sym, *args ) end
[ show source ]
# File lib/facets/more/recorder.rb, line 59 def inspect "<Recorder #{@msg.inspect}>" end
[ show source ]
# File lib/facets/more/recorder.rb, line 75 def method_missing( sym, *args, &blk ) self.__class__.new( [ sym, self, *args ] ) end