userl 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []