Add ::Object::Blob.
Zachary Stevens [Mon, 16 Nov 2009 00:23:14 +0000 (00:23 +0000)]
lib/Gitalist/Git/Object.pm
lib/Gitalist/Git/Object/Blob.pm [new file with mode: 0644]
lib/Gitalist/Git/Project.pm

index 1359d51..78b4585 100644 (file)
@@ -34,22 +34,10 @@ class Gitalist::Git::Object {
                       required => 1,
                       is => 'ro',
                       lazy_build => 1,
+                      handles => [ 'content',
+                               ],
                   );
 
-    # This feels wrong, but current templates assume
-    # these attributes are present on every object.
-    foreach my $key (qw/content/) {
-        has $key => ( isa => Str,
-                      required => 1,
-                      is => 'ro',
-                      lazy_build => 1,
-                  );
-        method "_build_$key" {
-            confess("Object can't " . $key) unless $self->_gpp_obj->can($key);
-            return $self->_gpp_obj->$key;
-        }
-    }
-
     # objects can't determine their mode or filename
     has file => ( isa => NonEmptySimpleStr,
                   required => 0,
diff --git a/lib/Gitalist/Git/Object/Blob.pm b/lib/Gitalist/Git/Object/Blob.pm
new file mode 100644 (file)
index 0000000..07909f0
--- /dev/null
@@ -0,0 +1,6 @@
+package Gitalist::Git::Object::Blob;
+use MooseX::Declare;
+
+class Gitalist::Git::Object::Blob extends Gitalist::Git::Object {
+
+}
index 36615f0..57d46bb 100644 (file)
@@ -27,6 +27,7 @@ class Gitalist::Git::Project with Gitalist::Git::HasUtils {
     use List::MoreUtils qw/any zip/;
     use DateTime;
     use Gitalist::Git::Object::Commit;
+    use Gitalist::Git::Object::Blob;
     use aliased 'Gitalist::Git::Object';
 
     our $SHA1RE = qr/[0-9a-fA-F]{40}/;
@@ -168,12 +169,14 @@ Return a L<Gitalist::Git::Object> for the given sha1.
         my $type = $self->run_cmd('cat-file', '-t', $sha1);
         chomp($type);
         my $class = 'Gitalist::Git::Object';
-        if ($type eq 'commit') {
+        use Moose::Autobox;
+        if ($type eq ['commit', 'blob']->any) {
             $class .= '::' . ucfirst($type);
         };
         return $class->new(
             project => $self,
             sha1 => $sha1,
+            type => $type,
         );
     }