summary refs log tree commit diff
path: root/lib/githubexplorer/Profile.pm
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-01-30 15:09:58 +0100
committerfranck cuny <franck@lumberjaph.net>2010-01-30 15:09:58 +0100
commit3da8a2f300757f48bb4ffa35a409eafbcf9dfa49 (patch)
tree3944a48b0d2fbcf2f27dc392dbeffcabc9edc418 /lib/githubexplorer/Profile.pm
parentcount perl bytes, some tweaking (diff)
downloadgithub-explorer-3da8a2f300757f48bb4ffa35a409eafbcf9dfa49.tar.gz
don't make a call for each repo, don't ask for lang, add fork to repo schema
Diffstat (limited to 'lib/githubexplorer/Profile.pm')
-rw-r--r--lib/githubexplorer/Profile.pm36
1 files changed, 28 insertions, 8 deletions
diff --git a/lib/githubexplorer/Profile.pm b/lib/githubexplorer/Profile.pm
index 47a0582..7966d79 100644
--- a/lib/githubexplorer/Profile.pm
+++ b/lib/githubexplorer/Profile.pm
@@ -3,32 +3,38 @@ use 5.010;
 use Moose::Role;
 use Net::GitHub::V2::Users;
 
+has banned_profiles =>
+    ( isa => 'ArrayRef', is => 'ro', default => sub { [qw/gitpan/] } );
+
 sub fetch_profile {
     my ( $self, $login, $depth ) = @_;
 
-    return if $depth > 3;
+    return if grep {$_ =~ /$login/i} @{$self->banned_profiles};
+
+    return if $depth > 2;
     my $profile = $self->_profile_exists($login);
 
     say "fetch profile for $login ($depth)...";
-    sleep(1);
     my $github = Net::GitHub::V2::Users->new(
         owner => $login,
         login => $self->api_login,
         token => $self->api_token,
     );
-    sleep(2);
+    sleep(1);
 
     if ( !$profile ) {
         $profile = $self->_create_profile( $login, $github->show, $depth );
-        if ( $self->with_repo ) {
-            foreach my $repo ( @{ $github->list } ) {
-                $self->fetch_repo( $profile, $repo->{name} );
-            }
-        }
         sleep(1);
     }
+    if ( $self->with_repo ) {
+        $self->fetch_repositories( $profile, $github->list );
+    }
+
     my $followers   = $github->followers();
+    sleep(1);
+    my $following   = $github->following();
     my $local_depth = $depth + 1;
+
     foreach my $f (@$followers) {
         my $p = $self->fetch_profile( $f, $local_depth );
         next unless $p;
@@ -40,9 +46,23 @@ sub fetch_profile {
             }
         );
     }
+
+    foreach my $f (@$following) {
+        my $p = $self->fetch_profile( $f, $local_depth );
+        next unless $p;
+        $self->schema->txn_do(
+            sub {
+                $self->schema->resultset('Follow')
+                    ->find_or_create(
+                    { id_following => $p->id, id_follower => $profile->id } );
+            },
+
+        );
+    }
     $profile;
 }
 
+
 sub _profile_exists {
     my ( $self, $login ) = @_;
     my $profile