1 package Git::PurePerl::Object::Tag;
3 use MooseX::StrictConstructor;
4 use Moose::Util::TypeConstraints;
5 use namespace::autoclean;
7 extends 'Git::PurePerl::Object';
10 ( is => 'ro', isa => 'ObjectKind', required => 1, default => 'tag' );
11 has 'object' => ( is => 'rw', isa => 'Str', required => 0 );
12 has 'tag' => ( is => 'rw', isa => 'Str', required => 0 );
13 has 'tagger' => ( is => 'rw', isa => 'Git::PurePerl::Actor', required => 0 );
14 has 'tagged_time' => ( is => 'rw', isa => 'DateTime', required => 0 );
15 has 'comment' => ( is => 'rw', isa => 'Str', required => 0 );
17 ( is => 'rw', isa => 'ObjectKind', required => 0);
19 my %method_map = (type => 'object_kind');
23 my @lines = split "\n", $self->content;
24 while ( my $line = shift @lines ) {
26 my ( $key, $value ) = split ' ', $line, 2;
28 if ($key eq 'tagger') {
29 my @data = split ' ', $value;
30 my ($email, $epoch, $tz) = splice(@data, -3);
31 my $name = join(' ', @data);
33 Git::PurePerl::Actor->new( name => $name, email => $email );
34 $self->tagger($actor);
35 my $dt= DateTime->from_epoch( epoch => $epoch, time_zone => $tz );
36 $self->tagged_time($dt);
38 my $method = $method_map{$key} || $key;
39 $self->$method($value);
42 $self->comment( join "\n", @lines );
45 __PACKAGE__->meta->make_immutable;