Make get_repository expect already instanced repo
Jose Luis Martinez [Wed, 9 Mar 2011 16:46:05 +0000 (17:46 +0100)]
Refactor subclasses to have the _get_repo_from_name as the mandatory
method.

lib/Gitalist/Git/CollectionOfRepositories.pm
lib/Gitalist/Git/CollectionOfRepositories/FromDirectory.pm
lib/Gitalist/Git/CollectionOfRepositories/FromDirectoryRecursive.pm
lib/Gitalist/Git/CollectionOfRepositories/FromListOfDirectories.pm

index 62ed906..8e3c309 100644 (file)
@@ -19,11 +19,12 @@ role Gitalist::Git::CollectionOfRepositories {
     );
 
     method get_repository (NonEmptySimpleStr $name) {
-        my $path = $self->_get_path_for_repository_name($name);
+        my $repo = $self->_get_repo_from_name($name);
         die "Couldn't get_repository '$name' - not a valid git repository."
-            unless $self->_is_git_repo($path);
-        return Repository->new( $path );
+            unless $self->_is_git_repo($repo->path);
+        return $repo;
     }
+
     # Determine whether a given directory is a git repo.
     # http://www.kernel.org/pub/software/scm/git/docs/gitrepository-layout.html
     method _is_git_repo ($dir) {
@@ -37,7 +38,7 @@ role Gitalist::Git::CollectionOfRepositories {
     }
     requires qw/
         _build_repositories
-        _get_path_for_repository_name
+        _get_repo_from_name
     /;
 
     around _build_repositories {
index 57fdc8c..86ac402 100644 (file)
@@ -25,6 +25,10 @@ class Gitalist::Git::CollectionOfRepositories::FromDirectory
         return $path;
     }
 
+    method _get_repo_from_name (NonEmptySimpleStr $name) {
+        return Gitalist::Git::Repository->new($self->_get_path_for_repository_name($name));
+    }
+
     ## Builders
     method _build_repositories {
         my $dh = $self->repo_dir->open || die "Could not open repo_dir";
index fc17eed..08ba2d7 100644 (file)
@@ -27,15 +27,15 @@ class Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive
       } grep $_->is_dir, $dir->children;
     }
 
-    method _get_path_for_repository_name (NonEmptySimpleStr $name) {
+    method _get_repo_from_name (NonEmptySimpleStr $name) {
       my $repo = first { $_->name eq $name } $self->repositories->flatten
         or return;
-      return $repo->path;
+      return $repo;
     }
 
     method _get_repo_name (NonEmptySimpleStr $name) {
         # strip off the repo_dir part from a path
-               return Path::Class::Dir->new($name)->relative($self->repo_dir)->stringify;
+        return Path::Class::Dir->new($name)->relative($self->repo_dir)->stringify;
     }
 
     ## Builders
index a1a54c6..0a80615 100644 (file)
@@ -27,6 +27,10 @@ class Gitalist::Git::CollectionOfRepositories::FromListOfDirectories with Gitali
         +{ map { basename($_) => dir($_) } $self->repos->flatten };
     }
 
+    method _get_repo_from_name (NonEmptySimpleStr $name) {
+        return Gitalist::Git::Repository->new($self->_get_path_for_repository_name($name));
+    }
+
     ## Builders
     method _build_repositories {
         [ map { $self->get_repository(basename($_)) } $self->repos->flatten ];