#!/usr/bin/perl
#use Mooix::Thing;

sub getfield {
	my $this=shift;
	my $field=shift;
	my $file=$this->id."/".$field;
	
	if (-d $file && ! -l $file) {
		my $obj = $this->$field;
		return unless ref $obj; # ignore non-obj subdirs
		return $obj->serialise;
	}
	
	my @value;
	if (-x $file && ! -l $file) {
		open(IN, $file);
		chomp(@value=<IN>);
		close IN;
	}
	else {
		@value=eval{$this->$field}; # catch permission denied
	}

	my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
	    $atime,$mtime,$ctime,$blksize,$blocks) = stat($file);

    	return (
		object => $this,
		field => $field eq ".mass" ? "mass" : $field,
		(map { ( value => $_ ) } @value),
		mode => sprintf("%o", $mode & 07777),
		mtime => $mtime,
		atime => $atime,
	);
}

run sub ($) {
	my $this=shift;

	my @ret;
	
	push @ret, getfield($this, "parent"); # this comes first
	
	foreach my $field ($this->fields(inherit => 0)) {
		push @ret, getfield($this, $field) unless $field eq 'parent';
	}

	return @ret;
}
