#
# This file is part of App-CPAN2Pkg
#
# This software is copyright (c) 2009 by Jerome Quelin.
#
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
#
use 5.010;
use strict;
use warnings;

package App::CPAN2Pkg::Repository;
# ABSTRACT: repository details for a given module
$App::CPAN2Pkg::Repository::VERSION = '3.003';
use Moose;
use MooseX::Has::Sugar;
use MooseX::SemiAffordanceAccessor;

use App::CPAN2Pkg::Types;


# -- public attributes


has status  => ( rw, isa=>"Status", default=>"not started" );
has _prereqs => (
    ro,
    traits  => ['Hash'],
    isa     => 'HashRef[Str]',
    default => sub { {} },
    handles => {
        _add_prereq => 'set',
        prereqs     => 'keys',
        rm_prereq   => 'delete',
        can_build   => 'is_empty',
        miss_prereq => 'exists',
    },
);


# -- public methods


# methods above provided for free by moose traits.


sub add_prereq {
    my ($self, $modname) = @_;
    $self->_add_prereq( $modname, $modname );
}


no Moose;
__PACKAGE__->meta->make_immutable;
1;

__END__

=pod

=head1 NAME

App::CPAN2Pkg::Repository - repository details for a given module

=head1 VERSION

version 3.003

=head1 DESCRIPTION

C<cpan2pkg> deals with two kinds of systems: the local system, and
upstream distribution repository. A module has some characteristics on
both systems (such as availability, etc). Those characteristics are
gathered in this module.

=head1 ATTRIBUTES

=head2 status

The status of the module: available, building, etc.

=head2 prereqs

    my @prereqs = $repo->prereqs;

The prerequesites needed before attempting to build the module.

=head1 METHODS

=head2 can_build

    my $bool = $repo->can_build;

Return true if there are no more missing prereqs.

=head2 miss_prereq

    my $bool = $repo->miss_prereq( $modname );

Return true if C<$modname> is missing on the system.

=head2 rm_prereq

    $repo->rm_prereq( $modname );

Remove C<$modname> as a missing prereq on the repository.

=head2 add_prereq

    $repo->add_prereq( $modname );

Mark a prereq as missing on the repository.

=head1 AUTHOR

Jerome Quelin <jquelin@gmail.com>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2009 by Jerome Quelin.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut
