/usr/local/CPAN/Document-Maker/Document/Maker/Target/File.pm


package Document::Maker::Target::File;

use strict;
use warnings;

use Moose;
use Document::Maker::Dependency;

with map { "Document::Maker::Role::$_" } qw/Component Target TargetMaker Dependency/;

has script => qw/is ro/;
has name => qw/is ro required 1/;
has file => qw/is ro lazy 1/, default => sub {
    return Path::Class::File->new(shift->name);
};
has dependency => qw/is ro lazy 1/, default => sub {
    return Document::Maker::Dependency->new(maker => shift->maker);
};

sub can_make {
    my $self = shift;
    my $name = shift;
    return $self if $name eq $self->name;
    return undef;
}

sub should_make {
    my $self = shift;
    return $self->fresh ? 0 : 1;
}

sub freshness {
    my $self = shift;
    return 0 unless -e $self->file;
    return $self->file->stat->mtime;
}

sub fresh {
    my $self = shift;
    return 0 unless -e $self->file;
    return 0 unless $self->dependency->fresh;
    return $self->freshness >= $self->dependency->freshness ? 1 : 0;
}

sub make {
    my $self = shift;
    $self->dependency->make($self);
    $self->execute if $self->script;
}

sub execute {
    my $self = shift;
    die "Can't execute without a script" unless $self->script;
    $self->script->($self, $self->file);
}

#sub make {
#    my $self = shift;
#    die "Can't make without a script" unless $self->script;
#    $self->dependency->make($self);
#    $self->script->($self, $self->file);
#}

1;