Don't bother looking up type - the subclasses know what they are.
Zachary Stevens [Tue, 17 Nov 2009 01:11:05 +0000 (01:11 +0000)]
lib/Gitalist/Git/Object.pm
lib/Gitalist/Git/Object/Blob.pm
lib/Gitalist/Git/Object/Commit.pm
lib/Gitalist/Git/Object/Tag.pm
lib/Gitalist/Git/Object/Tree.pm

index 30f4e7d..bec7c03 100644 (file)
@@ -21,11 +21,15 @@ class Gitalist::Git::Object {
                   required => 1,
                   is => 'ro' );
 
+    has type => ( isa => NonEmptySimpleStr,
+                  is => 'ro',
+                  required => 1 );
+
     has $_ => ( isa => NonEmptySimpleStr,
                 required => 1,
                 is => 'ro',
                 lazy_build => 1 )
-        for qw/type modestr size/;
+        for qw/modestr size/;
 
     has _gpp_obj => ( isa => 'Git::PurePerl::Object',
                       required => 1,
@@ -44,21 +48,19 @@ class Gitalist::Git::Object {
                   default => 0,
                   is => 'ro' );
 
-    method BUILD { $self->$_() for qw/_gpp_obj type size modestr/ }
+    method BUILD { $self->$_() for qw/_gpp_obj size modestr/ }
 
 ## Private methods
 
 ## Builders
-method _build__gpp_obj {
+    method _build__gpp_obj {
         return $self->_get_gpp_object($self->sha1)
     }
 
-    foreach my $key (qw/ type size /) {
-        method "_build_$key" {
-            my $v = $self->_cat_file_with_flag(substr($key, 0, 1));
-            chomp($v);
-            return $v;
-        }
+    method "_build_size" {
+        my $v = $self->_cat_file_with_flag('s');
+        chomp($v);
+        return $v;
     }
 
     method _build_modestr {
index 07909f0..4629c0b 100644 (file)
@@ -2,5 +2,5 @@ package Gitalist::Git::Object::Blob;
 use MooseX::Declare;
 
 class Gitalist::Git::Object::Blob extends Gitalist::Git::Object {
-
+        has '+type' => ( default => 'blob' );
 }
index 7c6ebf0..9b1de8a 100644 (file)
@@ -9,6 +9,7 @@ class Gitalist::Git::Object::Commit
         use List::MoreUtils qw/any zip/;
         our $SHA1RE = qr/[0-9a-fA-F]{40}/;
 
+        has '+type' => ( default => 'commit' );
         has '+_gpp_obj' => ( handles => [ 'comment',
                                           'tree_sha1',
                                           'committer',
index f2ff652..397f3bb 100644 (file)
@@ -2,6 +2,7 @@ package Gitalist::Git::Object::Tag;
 use MooseX::Declare;
 
 class Gitalist::Git::Object::Tag extends Gitalist::Git::Object {
+    has '+type' => ( default => 'tag' );
     has '+_gpp_obj' => ( handles => [ 'object',
                                       'tag',
                                       'tagger',
index e284aa4..0d05689 100644 (file)
@@ -4,6 +4,7 @@ use MooseX::Declare;
 class Gitalist::Git::Object::Tree
     extends Gitalist::Git::Object
     with Gitalist::Git::Object::HasTree {
+        has '+type' => ( default => 'tree' );
         has '+_gpp_obj' => ( handles => [ 'directory_entries',
                                       ],
                          );