Commit | Line | Data |
3fea05b9 |
1 | package Git::PurePerl::NewObject; |
2 | use Moose; |
3 | use MooseX::StrictConstructor; |
4 | use Moose::Util::TypeConstraints; |
5 | use namespace::autoclean; |
6 | |
7 | enum 'ObjectKind' => qw(commit tree blob tag); |
8 | |
9 | has 'kind' => ( is => 'ro', isa => 'ObjectKind', required => 1 ); |
10 | has 'size' => ( is => 'ro', isa => 'Int', required => 0, lazy_build => 1 ); |
11 | has 'content' => ( is => 'rw', isa => 'Str', required => 0, lazy_build => 1 ); |
12 | has 'sha1' => ( is => 'ro', isa => 'Str', required => 0, lazy_build => 1 ); |
13 | |
14 | sub _build_sha1 { |
15 | my $self = shift; |
16 | my $sha1 = Digest::SHA1->new; |
17 | $sha1->add( $self->raw ); |
18 | my $sha1_hex = $sha1->hexdigest; |
19 | return $sha1_hex; |
20 | } |
21 | |
22 | sub _build_size { |
23 | my $self = shift; |
24 | return length $self->content; |
25 | } |
26 | |
27 | sub raw { |
28 | my $self = shift; |
29 | return $self->kind . ' ' . $self->size . "\0" . $self->content; |
30 | } |
31 | |
32 | __PACKAGE__->meta->make_immutable; |
33 | |