summaryrefslogtreecommitdiff
path: root/lib/githubexplorer/Repositorie.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/githubexplorer/Repositorie.pm')
-rw-r--r--lib/githubexplorer/Repositorie.pm52
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/githubexplorer/Repositorie.pm b/lib/githubexplorer/Repositorie.pm
new file mode 100644
index 0000000..907a3b8
--- /dev/null
+++ b/lib/githubexplorer/Repositorie.pm
@@ -0,0 +1,52 @@
+package githubexplorer::Repositorie;
+use 5.010;
+use Moose::Role;
+use Net::GitHub::V2::Repositories;
+
+sub fetch_repo {
+ my ( $self, $profile, $repo_name ) = @_;
+
+ return if $self->_repo_exists($profile, $repo_name);
+
+ say "check ".$profile->login."'s $repo_name";
+ sleep(1);
+ my $github = Net::GitHub::V2::Repositories->new(
+ owner => $profile->login,
+ repo => $repo_name,
+ login => $self->api_login,
+ token => $self->api_token,
+ );
+ my $langs = [ keys %{ $github->languages() } ];
+ sleep(1);
+ return unless grep {/perl/i} @$langs;
+ my $repo_desc = $github->show();
+ $repo_desc->{languages} = $langs;
+ $self->_create_repo( $profile, $repo_desc );
+ sleep(1);
+}
+
+sub _repo_exists {
+ my ( $self, $profile, $repo_name ) = @_;
+ return
+ if $self->schema->resultset('Repositories')
+ ->find( { name => $repo_name, id_profile => $profile->id } );
+}
+
+sub _create_repo {
+ my ( $self, $profile, $repo_desc ) = @_;
+
+ my $repo_rs = $self->schema->resultset('Repositories')
+ ->find( { id_profile => $profile->id, name => $repo_desc->{name} } );
+ if ( !$repo_rs ) {
+ my $repo_insert = {
+ id_profile => $profile->id,
+ map { $_ => $repo_desc->{$_} }
+ (qw/description name homepage url watchers forks/)
+ };
+ $repo_rs
+ = $self->schema->resultset('Repositories')->create($repo_insert);
+ }
+ $repo_rs;
+}
+
+1;