ghuls-lib 2.3.3 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ghuls/lib.rb +50 -57
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3083ad25f7f8a118bb82f1f26f83ac1bb494a501
|
4
|
+
data.tar.gz: 25d9923736008cdfe00aa882a8181f008a5b2a3e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3cd5fb0c187408234bf475b6bc9ae3986ccad57499ecf09747ef453ff99f38114e8eaadf5b72c0882ca960a31af42e5193b5cad9d3de63913b0f301d6847fdd
|
7
|
+
data.tar.gz: b80d92d0c4d4d60b3e8e63d5ac07efac812fd8edc9f62fc01299f40bcbe1b988567ce99555105dd89011bd792adcd34c25843a27609d9cea6c204493e4bcf7af
|
data/lib/ghuls/lib.rb
CHANGED
@@ -4,15 +4,21 @@ require 'open-uri'
|
|
4
4
|
require 'faraday-http-cache'
|
5
5
|
|
6
6
|
module GHULS
|
7
|
-
|
8
|
-
|
7
|
+
class Lib
|
8
|
+
# @return [Octokit::Client] The octokit instance.
|
9
|
+
attr_reader :octokit
|
10
|
+
|
11
|
+
# @return [Hash<String, Hash<String, String>] The colors for each GitHub valid lang.
|
12
|
+
# The keys are the language name strings, and the values are hashes. The value hash contains a 'color' and 'url'.
|
13
|
+
# The value hash color might be nil. Code expecting nil.
|
14
|
+
attr_reader :colors
|
9
15
|
|
10
16
|
# Gets the Octokit and colors for the program.
|
11
17
|
# @param opts [Hash] The options to use. The ones that are used by this
|
12
18
|
# method are: :token, :pass, and :user.
|
13
19
|
# @return [Hash] A hash containing objects formatted as
|
14
20
|
# { git: Octokit::Client, colors: JSON }
|
15
|
-
def
|
21
|
+
def initialize(opts = {})
|
16
22
|
token = opts[:token]
|
17
23
|
pass = opts[:pass]
|
18
24
|
user = opts[:user]
|
@@ -24,21 +30,17 @@ module GHULS
|
|
24
30
|
builder.adapter :net_http_persistent
|
25
31
|
end
|
26
32
|
gh.middleware = stack
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
rescue Octokit::Unauthorized
|
31
|
-
return false
|
32
|
-
end
|
33
|
+
encode = gh.contents('ozh/github-colors', path: 'colors.json')[:content]
|
34
|
+
@octokit = gh
|
35
|
+
@colors = JSON.parse(Base64.decode64(encode))
|
33
36
|
end
|
34
37
|
|
35
38
|
# Gets the user and checks if it exists in the process.
|
36
39
|
# @param user [Any] The user ID or name.
|
37
|
-
# @param github [Octokit::Client] The instance of Octokit::Client.
|
38
40
|
# @return [Hash] Their username and avatar URL.
|
39
41
|
# @return [Boolean] False if it does not exist.
|
40
|
-
def get_user_and_check(user
|
41
|
-
user_full =
|
42
|
+
def get_user_and_check(user)
|
43
|
+
user_full = @octokit.user(user)
|
42
44
|
{
|
43
45
|
username: user_full[:login],
|
44
46
|
avatar: user_full[:avatar_url]
|
@@ -50,20 +52,19 @@ module GHULS
|
|
50
52
|
# Returns the repos in the user's organizations that they have actually
|
51
53
|
# contributed to, organized by forks, privates, publics, and mirrors.
|
52
54
|
# @param username [String] See #get_user_and_check
|
53
|
-
# @param github [Octokit::Client] See #get_user_and_check
|
54
55
|
# @return [Array] All the repository full names that the user has
|
55
56
|
# contributed to.
|
56
|
-
def get_org_repos(username
|
57
|
-
orgs =
|
57
|
+
def get_org_repos(username)
|
58
|
+
orgs = @octokit.organizations(username)
|
58
59
|
repos = []
|
59
60
|
orgs.each do |o|
|
60
|
-
this_org_repos =
|
61
|
+
this_org_repos = @octokit.repositories(o[:login])
|
61
62
|
next unless this_org_repos.any?
|
62
63
|
repos.concat(this_org_repos)
|
63
64
|
end
|
64
65
|
true_repos = []
|
65
66
|
repos.each do |r|
|
66
|
-
contributors =
|
67
|
+
contributors = @octokit.contributors(r[:full_name])
|
67
68
|
next if contributors.empty?
|
68
69
|
contributors.each do |c|
|
69
70
|
if c[:login] =~ /^#{username}$/i
|
@@ -79,43 +80,39 @@ module GHULS
|
|
79
80
|
# Gets the user's repositories organized by whether they are forks,
|
80
81
|
# private, public, or mirrors.
|
81
82
|
# @param username [String] See #get_user_and_check
|
82
|
-
# @param github [Octokit::Client] See #get_user_and_check
|
83
83
|
# @return [Hash] All the repositories under the user's account.
|
84
|
-
def get_user_repos(username
|
85
|
-
get_organized_repos(
|
84
|
+
def get_user_repos(username)
|
85
|
+
get_organized_repos(@octokit.repositories(username))
|
86
86
|
end
|
87
87
|
|
88
88
|
# Gets the number of forkers, stargazers, and watchers.
|
89
89
|
# @param repository [String] The full repository name.
|
90
|
-
# @param github [Octkit::Client] See #get_user_and_check
|
91
90
|
# @return [Hash] The forks, stars, and watcher count.
|
92
|
-
def get_forks_stars_watchers(repository
|
91
|
+
def get_forks_stars_watchers(repository)
|
93
92
|
{
|
94
|
-
forks:
|
95
|
-
stars:
|
96
|
-
watchers:
|
93
|
+
forks: @octokit.forks(repository).length,
|
94
|
+
stars: @octokit.stargazers(repository).length,
|
95
|
+
watchers: @octokit.subscribers(repository).length
|
97
96
|
}
|
98
97
|
end
|
99
98
|
|
100
99
|
# Gets the number of followers and users followed by the user.
|
101
100
|
# @param username [String] See #get_user_and_check
|
102
|
-
# @param github [Octokit::Client] See #get_user_and_check
|
103
101
|
# @return [Hash] The number of following and followed users.
|
104
|
-
def get_followers_following(username
|
102
|
+
def get_followers_following(username)
|
105
103
|
{
|
106
|
-
following:
|
107
|
-
followers:
|
104
|
+
following: @octokit.following(username).length,
|
105
|
+
followers: @octokit.followers(username).length
|
108
106
|
}
|
109
107
|
end
|
110
108
|
|
111
109
|
# Gets the number of closed/open issues and
|
112
110
|
# closed (without merge)/open/merged pull requests for a repository
|
113
111
|
# @param repository [String] See #get_forks_stars_watchers
|
114
|
-
# @param github [Octokit::Client] See #get_user_and_check
|
115
112
|
# @return [Hash] The number of issues and pulls.
|
116
|
-
def get_issues_pulls(repository
|
117
|
-
issues =
|
118
|
-
pulls =
|
113
|
+
def get_issues_pulls(repository)
|
114
|
+
issues = @octokit.list_issues(repository, state: 'all')
|
115
|
+
pulls = @octokit.pull_requests(repository, state: 'all')
|
119
116
|
issues_open = 0
|
120
117
|
issues_closed = 0
|
121
118
|
pulls_open = 0
|
@@ -148,15 +145,14 @@ module GHULS
|
|
148
145
|
|
149
146
|
# Gets the langauges and their bytes for the user.
|
150
147
|
# @param username [String] See #get_user_and_check
|
151
|
-
# @param github [Octokit::Client] See #get_user_and_check
|
152
148
|
# @return [Hash] The languages and their bytes, as formatted as
|
153
149
|
# { :Ruby => 129890, :CoffeeScript => 5970 }
|
154
|
-
def get_user_langs(username
|
155
|
-
repos = get_user_repos(username
|
150
|
+
def get_user_langs(username)
|
151
|
+
repos = get_user_repos(username)
|
156
152
|
langs = {}
|
157
153
|
repos[:public].each do |r|
|
158
154
|
next if repos[:forks].include? r
|
159
|
-
repo_langs =
|
155
|
+
repo_langs = @octokit.languages(r)
|
160
156
|
repo_langs.each do |l, b|
|
161
157
|
if langs[l].nil?
|
162
158
|
langs[l] = b
|
@@ -170,14 +166,13 @@ module GHULS
|
|
170
166
|
|
171
167
|
# Gets the languages and their bytes for the user's organizations.
|
172
168
|
# @param username [String] See #get_user_and_check
|
173
|
-
# @param github [Octokit::Client] See #get_user_and_check
|
174
169
|
# @return [Hash] See #get_user_langs
|
175
|
-
def get_org_langs(username
|
176
|
-
org_repos = get_org_repos(username
|
170
|
+
def get_org_langs(username)
|
171
|
+
org_repos = get_org_repos(username)
|
177
172
|
langs = {}
|
178
173
|
org_repos[:public].each do |r|
|
179
174
|
next if org_repos[:forks].include? r
|
180
|
-
repo_langs =
|
175
|
+
repo_langs = @octokit.languages(r)
|
181
176
|
repo_langs.each do |l, b|
|
182
177
|
if langs[l].nil?
|
183
178
|
langs[l] = b
|
@@ -189,21 +184,12 @@ module GHULS
|
|
189
184
|
langs
|
190
185
|
end
|
191
186
|
|
192
|
-
# Gets the percentage for the given numbers.
|
193
|
-
# @param part [Fixnum] The partial value.
|
194
|
-
# @param whole [Fixnum] The whole value.
|
195
|
-
# @return [Fixnum] The percentage that part is of whole.
|
196
|
-
def calculate_percent(part, whole)
|
197
|
-
(part / whole) * 100
|
198
|
-
end
|
199
|
-
|
200
187
|
# Gets the defined color for the language.
|
201
188
|
# @param lang [String] The language name.
|
202
|
-
# @param colors [Hash] The hash of colors and languages.
|
203
189
|
# @return [String] The 6 digit hexidecimal color.
|
204
190
|
# @return [Nil] If there is no defined color for the language.
|
205
|
-
def get_color_for_language(lang
|
206
|
-
color_lang = colors[lang]
|
191
|
+
def get_color_for_language(lang)
|
192
|
+
color_lang = @colors[lang]
|
207
193
|
color = color_lang['color']
|
208
194
|
if color_lang.nil? || color.nil?
|
209
195
|
return StringUtility.random_color_six
|
@@ -235,9 +221,8 @@ module GHULS
|
|
235
221
|
# to find the maximum number of users, which may not be the best way to do
|
236
222
|
# it. However, none of the documented GitHub APIs show that we can get the
|
237
223
|
# total number of GitHub users.
|
238
|
-
# @param github [Octokit::Client] See #get_user_and_check
|
239
224
|
# @return [Hash] See #get_user_and_check.
|
240
|
-
def get_random_user
|
225
|
+
def get_random_user
|
241
226
|
source = open('https://github.com/search?utf8=%E2%9C%93&q=repos%3A%3E0' \
|
242
227
|
'&type=Users&ref=searchresults').read
|
243
228
|
continue = false
|
@@ -245,13 +230,21 @@ module GHULS
|
|
245
230
|
# Really, GitHub? ’ and not '?
|
246
231
|
max = source[/We['’]ve found (.*?) users/] || source[/Showing (.*?) available users/]
|
247
232
|
userid = rand(max.to_i_separated)
|
248
|
-
user = get_user_and_check(userid
|
249
|
-
continue = true if user != false && !get_user_langs(user
|
233
|
+
user = get_user_and_check(userid)
|
234
|
+
continue = true if user != false && !get_user_langs(user).empty?
|
250
235
|
end
|
251
236
|
# noinspection RubyScope
|
252
237
|
user
|
253
238
|
end
|
254
239
|
|
240
|
+
# Gets the percentage for the given numbers.
|
241
|
+
# @param part [Any] The partial value. Must implement #to_f, or be a Float.
|
242
|
+
# @param whole [Any] The whole value. Must implement #to_f, or be a Float.
|
243
|
+
# @return [Float] The percentage that part is of whole.
|
244
|
+
def self.calculate_percent(part, whole)
|
245
|
+
(part.to_f / whole.to_f) * 100
|
246
|
+
end
|
247
|
+
|
255
248
|
private
|
256
249
|
|
257
250
|
# Gets the organized repository hash for the main repository hash given
|
@@ -285,4 +278,4 @@ module GHULS
|
|
285
278
|
}
|
286
279
|
end
|
287
280
|
end
|
288
|
-
end
|
281
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ghuls-lib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eli Foster
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|