ghclient 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d1b76cf476655e6510246e964d3c10cec663bf57
4
+ data.tar.gz: 6bb7a129b9585ced997839594acdec00808a9eb3
5
+ SHA512:
6
+ metadata.gz: 1f173a938ed3b29f50c50b9a1d627ac36f0a361bbba7ba9991d5801997f9a94daec3fa1fa961909cc332d176585c927e33bc5f113ffc0d80dc368f452c8428d6
7
+ data.tar.gz: ab9fe54879f1806cb89c4d9ef8be011b4abe855083b832d0f15765976d6906e0368089643684b74c1e824ba58c905f8b7c8459aa168e252265fb63720ff75b2a
data/bin/ghclient ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/ghclient'
4
+ require_relative '../lib/ghclient/cli'
5
+
6
+ user = ARGV[0]
7
+
8
+ cli = GHClient::Cli.new
9
+ cli.print_for_user(user)
@@ -0,0 +1,27 @@
1
+ require_relative './connection'
2
+ require_relative './user'
3
+ require_relative './repository'
4
+ require_relative './cli'
5
+
6
+ module GHClient
7
+ class Api
8
+
9
+ attr_accessor :connection
10
+
11
+ def initialize connection = GHClient::Connection.new()
12
+ @connection = connection
13
+ end
14
+
15
+ def get_user user_name
16
+ @connection.get GHClient::User.path(user_name)
17
+ end
18
+
19
+ def get_repositories user_name
20
+ @connection.get GHClient::User.repositories_path(user_name)
21
+ end
22
+
23
+ def get_languages_for_repository(repository)
24
+ @connection.get GHClient::Repository.languages_path(repository)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,44 @@
1
+ module GHClient
2
+ class Cli
3
+ attr_accessor :device
4
+
5
+ def initialize api: GHClient::Api.new, device: STDOUT
6
+ @device = device
7
+ @api = api
8
+ end
9
+
10
+ def print_for_user user
11
+ acum = Hash.new { |h, k| h[k] = 0}
12
+
13
+ @api.get_repositories(user).each do |repo|
14
+ languages = @api.get_languages_for_repository(repo["full_name"])
15
+ languages.each{|l,c| acum[l] += c}
16
+ print_repo_info(repo, languages)
17
+ end
18
+
19
+ first_language = acum.to_a.sort{|x,y| y[1] <=> x[1]}[0]
20
+ puts "First language for #{user}: #{first_language[0]}"
21
+ end
22
+
23
+ def print_repo_info repo, languages
24
+ total = languages.inject(0){|acum, l| acum + l[1]}
25
+ puts "#{repo["full_name"]} - Total LOC: #{total}"
26
+
27
+ languages.each do |language, count|
28
+ print_progress(total, language, count)
29
+ end
30
+ puts ""
31
+ end
32
+
33
+ def print_progress total, text, size
34
+ proportion = (size.to_f / total.to_f).round(2)
35
+ characters = "="*(proportion * 20)
36
+ empty_characters = " "*(20 - (proportion * 20).floor)
37
+ puts "[" + characters + empty_characters + "] (#{(proportion * 100).round(2)}% / #{size} LOC) #{text}"
38
+ end
39
+
40
+ def puts message
41
+ @device.puts message
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,36 @@
1
+ require 'singleton'
2
+ require 'net/https'
3
+ require 'json'
4
+
5
+ module GHClient
6
+ class NoAccessToken < StandardError; end
7
+
8
+ class Connection
9
+
10
+ BASE_URL = 'https://api.github.com'
11
+ ACCESS_TOKEN = '6afbf23e799a6d16d7a2cc69645307ea4a3a6c74'
12
+
13
+ attr_reader :last_response
14
+
15
+ def initialize options = {}
16
+ @options = options
17
+ options[:access_token] ||= ACCESS_TOKEN
18
+ check_options!(@options)
19
+ end
20
+
21
+ def check_options!(options)
22
+ options[:access_token] || (raise NoAccessToken)
23
+ end
24
+
25
+ def get path
26
+ uri = URI(BASE_URL + path + "?access_token=#{@options[:access_token]}")
27
+ response = Net::HTTP.get_response(uri)
28
+ check_and_parse_response!(response)
29
+ end
30
+
31
+ def check_and_parse_response!(response)
32
+ @last_response = response
33
+ JSON.parse(response.body)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,7 @@
1
+ module GHClient
2
+ class Repository
3
+ def self.languages_path repo
4
+ "/repos/#{repo}/languages"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ module GHClient
2
+ class User
3
+ def self.path user_name
4
+ "/users/#{user_name}"
5
+ end
6
+
7
+ def self.repositories_path user_name
8
+ "/users/#{user_name}/repos"
9
+ end
10
+ end
11
+ end
data/lib/ghclient.rb ADDED
@@ -0,0 +1 @@
1
+ require './lib/ghclient/api'
@@ -0,0 +1,108 @@
1
+ repo_info: |+
2
+ my_user/my_repo - Total LOC: 698
3
+ [== ] (14.0% / 100 LOC) Java
4
+ [================= ] (86.0% / 598 LOC) Ruby
5
+
6
+ print_progress: |+
7
+ [=========== ] (55.0% / 311 LOC) Prolog
8
+ print_for_user: |+
9
+ hermesdt/AFA2 - Total LOC: 247699
10
+ [====================] (100.0% / 247699 LOC) Java
11
+
12
+ hermesdt/afa_web - Total LOC: 126728
13
+ [============= ] (68.0% / 85656 LOC) Ruby
14
+ [====== ] (32.0% / 41072 LOC) JavaScript
15
+
16
+ hermesdt/Android-DirectoryChooser - Total LOC: 41563
17
+ [=============== ] (79.0% / 32979 LOC) Java
18
+ [== ] (12.0% / 5080 LOC) Shell
19
+ [= ] (8.0% / 3504 LOC) Groovy
20
+
21
+ hermesdt/best-boxing-timer - Total LOC: 193955
22
+ [=================== ] (96.0% / 185579 LOC) Java
23
+ [ ] (4.0% / 7484 LOC) Shell
24
+ [ ] (0.0% / 892 LOC) Groovy
25
+
26
+ hermesdt/blogjs - Total LOC: 25311
27
+ [====================] (100.0% / 25201 LOC) JavaScript
28
+ [ ] (0.0% / 110 LOC) CSS
29
+
30
+ hermesdt/devise - Total LOC: 0
31
+
32
+ hermesdt/documentary - Total LOC: 7130
33
+ [====================] (100.0% / 7130 LOC) JavaScript
34
+
35
+ hermesdt/ghclient - Total LOC: 9003
36
+ [====================] (100.0% / 9003 LOC) Ruby
37
+
38
+ hermesdt/google_code_jam - Total LOC: 6222
39
+ [====================] (100.0% / 6222 LOC) Ruby
40
+
41
+ hermesdt/hangout-test - Total LOC: 0
42
+
43
+ hermesdt/hermesdt.github.io - Total LOC: 627157
44
+ [============ ] (63.0% / 397658 LOC) CSS
45
+ [======= ] (36.0% / 226757 LOC) HTML
46
+ [ ] (0.0% / 1920 LOC) Ruby
47
+ [ ] (0.0% / 822 LOC) JavaScript
48
+
49
+ hermesdt/ivoox-fetcher - Total LOC: 1897
50
+ [====================] (100.0% / 1897 LOC) Ruby
51
+
52
+ hermesdt/madridtransport - Total LOC: 6231
53
+ [============ ] (62.0% / 3849 LOC) JavaScript
54
+ [====== ] (32.0% / 1979 LOC) Ruby
55
+ [= ] (5.0% / 293 LOC) HTML
56
+ [ ] (2.0% / 110 LOC) CSS
57
+
58
+ hermesdt/omniauth-wsfed - Total LOC: 32857
59
+ [====================] (100.0% / 32857 LOC) Ruby
60
+
61
+ hermesdt/participacion - Total LOC: 578990
62
+ [=========== ] (56.0% / 321688 LOC) Ruby
63
+ [===== ] (25.0% / 145594 LOC) HTML
64
+ [=== ] (17.0% / 100382 LOC) CSS
65
+ [ ] (1.0% / 6367 LOC) JavaScript
66
+ [ ] (1.0% / 3074 LOC) CoffeeScript
67
+ [ ] (0.0% / 1885 LOC) Shell
68
+
69
+ hermesdt/pyjoke - Total LOC: 1032
70
+ [====================] (100.0% / 1032 LOC) Python
71
+
72
+ hermesdt/remotipart - Total LOC: 9848
73
+ [====================] (100.0% / 9848 LOC) Ruby
74
+
75
+ hermesdt/Ruby-Tuenti-Album-Downloader - Total LOC: 0
76
+
77
+ hermesdt/RubyFilmFinder - Total LOC: 108334
78
+ [================== ] (94.0% / 101715 LOC) JavaScript
79
+ [= ] (6.0% / 6619 LOC) Ruby
80
+
81
+ hermesdt/SafeBlock - Total LOC: 4048
82
+ [====================] (100.0% / 4048 LOC) Ruby
83
+
84
+ hermesdt/tictactoe - Total LOC: 0
85
+
86
+ hermesdt/tolk - Total LOC: 49422
87
+ [====================] (100.0% / 49190 LOC) Ruby
88
+ [ ] (0.0% / 232 LOC) JavaScript
89
+
90
+ hermesdt/TomatoEvans.github.io - Total LOC: 2381
91
+ [=========== ] (57.0% / 1357 LOC) CSS
92
+ [======== ] (43.0% / 1024 LOC) HTML
93
+
94
+ hermesdt/tresxtresIA - Total LOC: 7820
95
+ [====================] (100.0% / 7820 LOC) Ruby
96
+
97
+ hermesdt/vim_config - Total LOC: 556575
98
+ [================= ] (85.0% / 473982 LOC) VimL
99
+ [== ] (10.0% / 53218 LOC) Ruby
100
+ [ ] (4.0% / 23888 LOC) C
101
+ [ ] (1.0% / 5487 LOC) Makefile
102
+
103
+ hermesdt/webyaml - Total LOC: 20380
104
+ [=================== ] (95.0% / 19459 LOC) Ruby
105
+ [ ] (2.0% / 463 LOC) JavaScript
106
+ [ ] (2.0% / 458 LOC) CoffeeScript
107
+
108
+ First language for hermesdt: Ruby