Commit | Line | Data |
3fea05b9 |
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 | |