ghuls-lib 1.1.1 → 1.1.2

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. checksums.yaml +4 -4
  2. data/lib/ghuls/lib.rb +47 -7
  3. metadata +2 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 93492def48a9670b6caff212c59072b83b2a997d
4
- data.tar.gz: 55c789087aac45e5129afb58a3c23d86d30fa5a2
3
+ metadata.gz: 67ca5effd388bccc1045323ba0a05507c566f682
4
+ data.tar.gz: b93f7737533f3ac78d65fa01502d55cee400f7b0
5
5
  SHA512:
6
- metadata.gz: c029fe48c3b090f01281db001e8a9f06ffa81d0d64b6cb03d9290c7b236eb91b3ad82b1cde6f9704c254fe76ec56b5feb42f9c2acbb9190eed4b5e9f016c7ace
7
- data.tar.gz: 260c39163dd22118e2452ad92c5cc7df268102ccbeebce91ef0efcba7fe95d11afdaa0621c79ab8a32fad182fd890c84c8790c49b289a3d3de4c73ed24f90ff5
6
+ metadata.gz: d0057082b97bed7d49c6c6d75a67c9bd351b30430d0b332f6a38f63de3dd7b8a1750a4ebaf3ad6b48ff11fc40271247180c7299cb18da752f14f67592e374f95
7
+ data.tar.gz: 0a138e32b0fdc2eff4486742bfab2acb45684cab1deeba9007ff74bff35b840e2e0eb14277f24a0835dbbb89dd00a786d58e7aaa298fa344bd9aaab61299fef1
@@ -45,6 +45,20 @@ module GHULS
45
45
  true
46
46
  end
47
47
 
48
+ # Gets the username and checks if it exists in the process.
49
+ # @param userid [Fixnum] The user ID.
50
+ # @param github [Octokit::Client] See #user_exists?
51
+ # @return [String] The username
52
+ # @return [Boolean] False if it does not exist.
53
+ def self.get_user_and_check(userid, github)
54
+ begin
55
+ username = github.user(userid)
56
+ rescue Octokit::NotFound
57
+ return false
58
+ end
59
+ username[:login]
60
+ end
61
+
48
62
  # Returns the repos in the user's organizations that they have actually
49
63
  # contributed to.
50
64
  # @param username [String] See #user_exists?
@@ -72,9 +86,9 @@ module GHULS
72
86
  true_repos
73
87
  end
74
88
 
75
- # Gets the langauges and their bytes for the :user.
76
- # @param username [String] The username to get info for.
77
- # @param github [OctoKit::Client] The instance of Octokit::Client.
89
+ # Gets the langauges and their bytes for the user.
90
+ # @param username [String] See #user_exists?
91
+ # @param github [Octokit::Client] See #user_exists?
78
92
  # @return [Hash] The languages and their bytes, as formatted as
79
93
  # { :Ruby => 129890, :CoffeeScript => 5970 }
80
94
  def self.get_user_langs(username, github)
@@ -95,6 +109,10 @@ module GHULS
95
109
  langs
96
110
  end
97
111
 
112
+ # Gets the languages and their bytes for the user's organizations.
113
+ # @param username [String] See #user_exists?
114
+ # @param github [Octokit::Client] See #user_exists?
115
+ # @return [Hash] See #get_user_langs
98
116
  def self.get_org_langs(username, github)
99
117
  org_repos = get_org_repos(username, github)
100
118
  langs = {}
@@ -133,6 +151,10 @@ module GHULS
133
151
  end
134
152
  end
135
153
 
154
+ # Gets the percentages for each language in a hash.
155
+ # @param langs [Hash] The language hash obtained by the get_langs methods.
156
+ # @return [Hash] The language percentages formatted as
157
+ # { Ruby: 50%, CoffeeScript: 50% }
136
158
  def self.get_language_percentages(langs)
137
159
  total = 0
138
160
  langs.each { |_, b| total += b }
@@ -144,6 +166,11 @@ module GHULS
144
166
  lang_percents
145
167
  end
146
168
 
169
+ # Performs the main analysis of the user's organizations.
170
+ # @param username [String] See #user_exists?
171
+ # @param github [Octokit::Client] See #user_exists?
172
+ # @return [Hash] See #get_language_percentages
173
+ # @return [Boolean] False if user_exists? returns false.
147
174
  def self.analyze_orgs(username, github)
148
175
  if user_exists?(username, github)
149
176
  langs = get_org_langs(username, github)
@@ -154,6 +181,11 @@ module GHULS
154
181
  end
155
182
  end
156
183
 
184
+ # Performs the main analysis of the user.
185
+ # @param username [String] See #user_exists?
186
+ # @param github [Octokit::Client] See #user_exists?
187
+ # @return [Hash] See #analyze_orgs
188
+ # @return [Boolean] See #analyze_orgs
157
189
  def self.analyze_user(username, github)
158
190
  if user_exists?(username, github)
159
191
  langs = get_user_langs(username, github)
@@ -165,14 +197,22 @@ module GHULS
165
197
  end
166
198
 
167
199
  using StringUtility
200
+ # Gets a random GitHub user that actually has data to analyze.
201
+ # Must always get a user that exists and has repositories, so it will
202
+ # go through a loop infinitely until it gets one. Uses the GitHub Search
203
+ # to find the maximum number of users, which may not be the best way to do
204
+ # it. However, none of the documented GitHub APIs show that we can get the
205
+ # total number of GitHub users.
206
+ # @param github [Octokit::Client] See #user_exists?
207
+ # @return [String] A random username.
168
208
  def self.get_random_user(github)
169
209
  source = open('https://github.com/search?utf8=%E2%9C%93&q=repos%3A%3E-1' \
170
210
  '&type=Users&ref=searchresults').read
171
- has_repos = false
172
- while has_repos == false
211
+ continue = false
212
+ while continue == false
173
213
  userid = rand(source[/Showing (.*?) available users/, 1].to_i_separated)
174
- user = github.user(userid)[:login]
175
- has_repos = true unless get_user_langs(user, github).empty?
214
+ user = get_user_and_check(userid, github)
215
+ continue = true if user != false && !get_user_langs(user, github).empty?
176
216
  end
177
217
  user
178
218
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ghuls-lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eli Foster
@@ -69,3 +69,4 @@ signing_key:
69
69
  specification_version: 4
70
70
  summary: The library used for and by the GHULS applications.
71
71
  test_files: []
72
+ has_rdoc: