package Git::PurePerl::Object::Tag;
use Moose;
use MooseX::StrictConstructor;
use Moose::Util::TypeConstraints;
use namespace::autoclean;
extends 'Git::PurePerl::Object';
has 'kind' =>
( is => 'ro', isa => 'ObjectKind', required => 1, default => 'tag' );
has 'object' => ( is => 'rw', isa => 'Str', required => 0 );
has 'tag' => ( is => 'rw', isa => 'Str', required => 0 );
has 'tagger' => ( is => 'rw', isa => 'Git::PurePerl::Actor', required => 0 );
has 'tagged_time' => ( is => 'rw', isa => 'DateTime', required => 0 );
has 'comment' => ( is => 'rw', isa => 'Str', required => 0 );
has 'object_kind' =>
( is => 'rw', isa => 'ObjectKind', required => 0);
my %method_map = (type => 'object_kind');
sub BUILD {
my $self = shift;
my @lines = split "\n", $self->content;
while ( my $line = shift @lines ) {
last unless $line;
my ( $key, $value ) = split ' ', $line, 2;
if ($key eq 'tagger') {
my @data = split ' ', $value;
my ($email, $epoch, $tz) = splice(@data, -3);
my $name = join(' ', @data);
my $actor =
Git::PurePerl::Actor->new( name => $name, email => $email );
$self->tagger($actor);
my $dt= DateTime->from_epoch( epoch => $epoch, time_zone => $tz );
$self->tagged_time($dt);
} else {
my $method = $method_map{$key} || $key;
$self->$method($value);
}
}
$self->comment( join "\n", @lines );
}
__PACKAGE__->meta->make_immutable;