ghuls-lib 2.3.3 → 3.0.0
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.
- 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
|