Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / Git / PurePerl / Object / Tag.pm
1 package Git::PurePerl::Object::Tag;
2 use Moose;
3 use MooseX::StrictConstructor;
4 use Moose::Util::TypeConstraints;
5 use namespace::autoclean;
6
7 extends 'Git::PurePerl::Object';
8
9 has 'kind' =>
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 );
16 has 'object_kind' =>
17     ( is => 'rw', isa => 'ObjectKind', required => 0);
18
19 my %method_map = (type => 'object_kind');
20
21 sub BUILD {
22     my $self = shift;
23     my @lines = split "\n", $self->content;
24     while ( my $line = shift @lines ) {
25         last unless $line;
26         my ( $key, $value ) = split ' ', $line, 2;
27         
28         if ($key eq 'tagger') {
29                 my @data = split ' ', $value;
30                 my ($email, $epoch, $tz) = splice(@data, -3);
31                 my $name = join(' ', @data);
32                 my $actor = 
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);
37             } else {
38                         my $method = $method_map{$key} || $key;
39                 $self->$method($value);
40             }
41     }
42     $self->comment( join "\n", @lines );
43 }
44
45 __PACKAGE__->meta->make_immutable;
46