Fix Object->size.
[catagits/Gitalist.git] / lib / Gitalist / Git / Object.pm
1 use MooseX::Declare;
2
3 class Gitalist::Git::Object {
4     use MooseX::Types::Moose qw/Str Int/;
5     use File::Stat::ModeString qw/mode_to_string/;
6     has project => ( isa => 'Gitalist::Git::Project',
7                      required => 1,
8                      is => 'ro',
9                      handles => [ 'run_cmd' ],
10                  );
11     has $_ => ( isa => Str,
12                   required => 1,
13                   is => 'ro' )
14         for qw/sha1 file/;
15     has $_ => ( isa => Str,
16                   required => 1,
17                   is => 'ro',
18                   lazy_build => 1 )
19         for qw/type modestr size/;
20     has $_ => ( isa => Int,
21                   required => 1,
22                   is => 'ro' )
23         for qw/mode/;
24
25     method _build_type {
26         my $output = $self->run_cmd(qw/cat-file -t/, $self->{sha1});
27         chomp($output);
28         return $output;
29     }
30     
31     method _build_modestr {
32         my $modestr = mode_to_string($self->{mode});
33         return $modestr;
34     }
35
36     method _build_size {
37         my $output = $self->run_cmd(qw/cat-file -s/, $self->{sha1});
38         chomp($output);
39         return $output;
40     }
41
42 =head2 contents
43
44 Return the contents of a given file.
45
46 =cut
47
48     method contents {
49         if ( $self->type ne 'blob' ) {
50             die "object $self->sha1 is not a file\n"
51         }
52
53         my $output = $self->run_cmd(qw/cat-file -p/, $self->sha1);
54         return unless $output;
55
56         return $output;
57     }
58
59 } # end class