userl 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/userl +4 -0
  2. data/lib/userl.rb +69 -0
  3. metadata +47 -0
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'userl'
4
+ puts Userl.start(ARGV[0])
@@ -0,0 +1,69 @@
1
+ require 'json'
2
+ require 'open-uri'
3
+ require 'terminal-table'
4
+
5
+ # The main userl driver
6
+ class Userl
7
+
8
+ # Get the most used languages of a GitHub user
9
+ #
10
+ # Example:
11
+ # >> Userl.start("marcosero")
12
+ # => repos and languages infos
13
+ #
14
+ # Arguments:
15
+ # language: (String)
16
+ def self.start(user)
17
+ all_languages = Hash.new
18
+ starred_repos = 0
19
+ forked_repos = 0
20
+
21
+ done = false
22
+ t = Thread.new {
23
+ print "Analyzing #{user}'s repos"
24
+ while (!done) do
25
+ print '.'
26
+ sleep 0.5
27
+ end
28
+ }
29
+ t.run
30
+
31
+ # Get all repos
32
+ # GET /repos/:owner/repos
33
+ repos_string = URI.parse("https://api.github.com/users/#{user}/repos").read
34
+ repos = JSON.parse(repos_string)
35
+
36
+ repos_rows = []
37
+
38
+ repos.each do |repository|
39
+ starred_repos += repository["watchers"]
40
+ forked_repos += repository["forks"]
41
+ repos_rows << [repository["name"], repository["watchers"], repository["forks"], repository["language"]]
42
+
43
+ # Detect Languages
44
+ # GET /repos/:owner/:repo/languages
45
+ languages_string = URI.parse("https://api.github.com/repos/#{user}/#{repository['name']}/languages").read
46
+ repo_languages = JSON.parse(languages_string)
47
+ all_languages = all_languages.merge(repo_languages){|key, oldval, newval| newval + oldval}
48
+ end
49
+
50
+ # prepare repos table
51
+ repos_table = Terminal::Table.new :title => "#{user}'s repositories", :headings => ['Name', 'Stars', 'Forks', 'language'], :rows => repos_rows, :style => {:width => 70} do |t|
52
+ t << :separator
53
+ t.add_row ['', starred_repos, forked_repos]
54
+ end
55
+
56
+ # prepare languages table
57
+ languages_rows = []
58
+ all_languages.each do |key, value|
59
+ languages_rows << [key, value]
60
+ end
61
+ languages_rows = languages_rows.sort_by {|k,v| -v}
62
+ languages_table = Terminal::Table.new :title => "#{user}'s languages", :headings => ['Language', 'Bytes'], :rows => languages_rows, :style => {:width => 70}
63
+
64
+ done = true
65
+ puts ''
66
+ puts repos_table
67
+ puts languages_table
68
+ end
69
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: userl
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Marco Sero
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-01 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: A CLI to get the most used languages of a GitHub user
15
+ email: marco@marcosero.com
16
+ executables:
17
+ - userl
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/userl.rb
22
+ - bin/userl
23
+ homepage: https://github.com/MarcoSero/userl
24
+ licenses: []
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 1.8.24
44
+ signing_key:
45
+ specification_version: 3
46
+ summary: A CLI to get the most used languages of a GitHub user
47
+ test_files: []