Class: Recorder

Class | Recorder
In: | lib/more/facets/recorder.rb
Parent: | Object

# 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.)

      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

__call__ inspect method_missing new

### Public Class methods

new( msg=nil )

[Source]

    # File lib/more/facets/recorder.rb, line 83
      def initialize( msg=nil )
        @msg = msg
      end

### Public Instance methods

__call__( orig )

[Source]

    # File lib/more/facets/recorder.rb, line 91
      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

inspect()

[Source]

    # File lib/more/facets/recorder.rb, line 87
      def inspect
        "<Recorder #{@msg.inspect}>"
      end

method_missing( sym, *args, &blk )

[Source]

    # File lib/more/facets/recorder.rb, line 103
      def method_missing( sym, *args, &blk )
        object_class.new( [ sym, self, *args ] )
      end

[Validate]