def create_aggregate( name, arity, step=nil, finalize=nil,
text_rep=Constants::TextRep::ANY, &block )
factory = Class.new do
def self.step( &block )
define_method(:step, &block)
end
def self.finalize( &block )
define_method(:finalize, &block)
end
end
if block_given?
factory.instance_eval(&block)
else
factory.class_eval do
define_method(:step, step)
define_method(:finalize, finalize)
end
end
proxy = factory.new
proxy.extend(Module.new {
attr_accessor :ctx
def step( *args )
super(@ctx, *args)
end
def finalize
super(@ctx)
end
})
proxy.ctx = FunctionProxy.new
define_aggregator(name, proxy)
end