Fix commit action.
[catagits/Gitalist.git] / lib / Gitalist / Git / Object.pm
CommitLineData
a8a8f8f9 1use MooseX::Declare;
84f31a44 2use Moose::Autobox;
a8a8f8f9 3
4class Gitalist::Git::Object {
b36b7e0b 5 use MooseX::Types::Moose qw/Str Int Bool Maybe ArrayRef/;
84f31a44 6 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
a8a8f8f9 7 use File::Stat::ModeString qw/mode_to_string/;
1501cb4e 8
54368e9d 9 # project and sha1 are required initargs
50394a3e 10 has project => ( isa => 'Gitalist::Git::Project',
11 required => 1,
12 is => 'ro',
84f31a44 13 weak_ref => 1,
77edf882 14 handles => {
15 _run_cmd => 'run_cmd',
1501cb4e 16 _run_cmd_list => 'run_cmd_list',
77edf882 17 _get_gpp_object => 'get_gpp_object',
18 },
50394a3e 19 );
84f31a44 20 has sha1 => ( isa => NonEmptySimpleStr,
1501cb4e 21 required => 1,
22 is => 'ro' );
54368e9d 23
84f31a44 24 has $_ => ( isa => NonEmptySimpleStr,
1501cb4e 25 required => 1,
26 is => 'ro',
27 lazy_build => 1 )
483b98b7 28 for qw/type modestr size/;
54368e9d 29
77edf882 30 has _gpp_obj => ( isa => 'Git::PurePerl::Object',
31 required => 1,
32 is => 'ro',
33 lazy_build => 1,
f3083570 34 handles => [ 'content',
35 ],
77edf882 36 );
37
54368e9d 38 # objects can't determine their mode or filename
84f31a44 39 has file => ( isa => NonEmptySimpleStr,
54368e9d 40 required => 0,
41 is => 'ro' );
42 has mode => ( isa => Int,
1501cb4e 43 required => 1,
44 default => 0,
45 is => 'ro' );
54368e9d 46
77edf882 47 method BUILD { $self->$_() for qw/_gpp_obj type size modestr/ }
48
1501cb4e 49## Private methods
1501cb4e 50
51## Builders
52method _build__gpp_obj {
77edf882 53 return $self->_get_gpp_object($self->sha1)
54 }
a8a8f8f9 55
84f31a44 56 foreach my $key (qw/ type size /) {
57 method "_build_$key" {
10af354d 58 my $v = $self->_cat_file_with_flag(substr($key, 0, 1));
59 chomp($v);
60 return $v;
84f31a44 61 }
50394a3e 62 }
54368e9d 63
a8a8f8f9 64 method _build_modestr {
8d953eae 65 my $modestr = mode_to_string($self->mode);
a8a8f8f9 66 return $modestr;
67 }
68
84f31a44 69 method _cat_file_with_flag ($flag) {
77edf882 70 $self->_run_cmd('cat-file', '-' . $flag, $self->{sha1})
50394a3e 71 }
72
a8a8f8f9 73} # end class