summaryrefslogtreecommitdiff
path: root/lib/GitHub/Collector/Command/lang.pm
blob: 8ab6c20cdb1bf79eca709b036eef834f4f995717 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package GitHub::Collector::Command::lang;

use Moose;
use boolean;

extends qw(MooseX::App::Cmd::Command);

with qw(
  GitHub::Collector::Role::Logger
  GitHub::Collector::Role::Context
  GitHub::Collector::Role::MongoDB
);

sub execute {
    my $self = shift;

    $self->log("start to tag user using langs");

    my $profiles = $self->db_profiles->find({ language => undef } );

    while (my $profile = $profiles->next){
        $self->_tag_profile_by_lang($profile);
    }
    
    $self->log("done tagging users");
}

sub _tag_profile_by_lang {
    my ( $self, $profile ) = @_;

    my $languages = {};

    $self->_repos( $languages, $profile->{login} );
    $self->_contribs( $languages, $profile->{login} );

    my $lang = (
        sort { $languages->{$b} <=> $languages->{$a} }
          keys %$languages
    )[0];

    $lang = "none "if ( !$lang );

    $self->log( "pour " . $profile->{login} . " on a " . $lang );
    $self->db_profiles->update(
        { login  => $profile->{login}, },
        { '$set' => { language => $lang } }
    );
}

sub _repos {
    my ( $self, $languages, $login ) = @_;

    my $repositories = $self->db_repositories->find( { owner => $login } );

    while ( my $repo = $repositories->next ) {
        $languages->{ $repo->{lang} }++ if $repo->{lang};
    }
}

sub _contribs {
    my ( $self, $languages, $login ) = @_;

    my $contribs = $self->db_contributors->find( { contributor => $login } );

    while ( my $contrib = $contribs->next ) {
        my $repo = $self->db_repositories->find_one(
            { uniq_name => $contrib->{project} } );
        $languages->{ $repo->{lang} }++ if $repo->{lang};
    }
}

1;