class Middleman::CoreExtensions::Collections::LazyCollectorStep

def initialize(name, args, block, parent=nil)

def initialize(name, args, block, parent=nil)
  @name = name
  @args = args
  @block = block
  @parent = parent
  @result = nil
  leaves << self
end

def leaves

def leaves
  @parent.leaves
end

def method_missing(name, *args, &block)

def method_missing(name, *args, &block)
  return ::Kernel.send(name, *args, &block) if DELEGATE.include? name
  leaves.delete self
  LazyCollectorStep.new(name, args, block, self)
end

def value(ctx=nil)

def value(ctx=nil)
  data = @parent.value(ctx)
  original_block = @block
  if original_block
    b = if ctx
      ::Proc.new do |*args|
        ctx.instance_exec(*args, &original_block)
      end
    else
      original_block
    end
  end
  data.send(@name, *@args.deep_dup, &b)
end