hubstats 0.3.17 → 0.4.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.
- checksums.yaml +5 -13
- data/.gitignore +0 -1
- data/CHANGELOG.markdown +10 -0
- data/MIT-LICENSE +3 -1
- data/README.md +2 -2
- data/app/assets/javascripts/hubstats/application.js +80 -24
- data/app/assets/javascripts/hubstats/pull_requests.js +35 -3
- data/app/assets/javascripts/hubstats/select2.js +8 -1
- data/app/assets/javascripts/hubstats/users.js +17 -5
- data/app/assets/stylesheets/hubstats/application.css +39 -1
- data/app/assets/stylesheets/hubstats/bootstrap.css +0 -6
- data/app/assets/stylesheets/hubstats/deploys.css +2 -0
- data/app/assets/stylesheets/hubstats/label.css +2 -0
- data/app/assets/stylesheets/hubstats/octicons.css.erb +2 -0
- data/app/assets/stylesheets/hubstats/pull_requests.css +2 -0
- data/app/controllers/hubstats/application_controller.rb +12 -4
- data/app/controllers/hubstats/base_controller.rb +8 -0
- data/app/controllers/hubstats/deploys_controller.rb +31 -8
- data/app/controllers/hubstats/events_controller.rb +11 -0
- data/app/controllers/hubstats/pull_requests_controller.rb +9 -1
- data/app/controllers/hubstats/repos_controller.rb +17 -3
- data/app/controllers/hubstats/users_controller.rb +15 -0
- data/app/models/hubstats/comment.rb +13 -5
- data/app/models/hubstats/deploy.rb +29 -6
- data/app/models/hubstats/label.rb +16 -4
- data/app/models/hubstats/pull_request.rb +44 -2
- data/app/models/hubstats/repo.rb +48 -4
- data/app/models/hubstats/user.rb +130 -32
- data/app/views/hubstats/deploys/index.html.erb +1 -3
- data/app/views/hubstats/deploys/show.html.erb +7 -2
- data/app/views/hubstats/partials/_comment-condensed.html.erb +3 -0
- data/app/views/hubstats/partials/_comment.html.erb +3 -0
- data/app/views/hubstats/partials/_deploy-condensed.html.erb +2 -2
- data/app/views/hubstats/partials/_deploy.html.erb +1 -1
- data/app/views/hubstats/partials/_footer.html.erb +22 -0
- data/app/views/hubstats/partials/_header.html.erb +18 -10
- data/app/views/hubstats/partials/_pull-condensed.html.erb +2 -0
- data/app/views/hubstats/partials/_pull.html.erb +2 -0
- data/app/views/hubstats/partials/_quick_addition_stats.html.erb +2 -0
- data/app/views/hubstats/partials/_quick_stats.html.erb +1 -0
- data/app/views/hubstats/partials/_repo.html.erb +2 -3
- data/app/views/hubstats/partials/_user-condensed.html.erb +4 -0
- data/app/views/hubstats/partials/_user.html.erb +4 -2
- data/app/views/hubstats/pull_requests/index.html.erb +6 -1
- data/app/views/hubstats/pull_requests/show.html.erb +5 -0
- data/app/views/hubstats/repos/dashboard.html.erb +6 -4
- data/app/views/hubstats/repos/show.html.erb +6 -1
- data/app/views/hubstats/tables/_comments-condensed.html.erb +2 -1
- data/app/views/hubstats/tables/_comments.html.erb +2 -1
- data/app/views/hubstats/tables/_deploys-condensed.html.erb +1 -0
- data/app/views/hubstats/tables/_deploys.html.erb +1 -0
- data/app/views/hubstats/tables/_grouped_deploys.html.erb +1 -0
- data/app/views/hubstats/tables/_grouped_pulls.html.erb +1 -0
- data/app/views/hubstats/tables/_pulls-condensed.html.erb +1 -0
- data/app/views/hubstats/tables/_pulls.html.erb +1 -0
- data/app/views/hubstats/tables/_repos-condensed.html.erb +1 -0
- data/app/views/hubstats/tables/_repos.html.erb +1 -0
- data/app/views/hubstats/tables/_users-condensed.html.erb +1 -0
- data/app/views/hubstats/tables/_users.html.erb +1 -1
- data/app/views/hubstats/users/index.html.erb +3 -2
- data/app/views/hubstats/users/show.html.erb +7 -1
- data/app/views/layouts/hubstats/application.html.erb +4 -4
- data/config/routes.rb +2 -1
- data/db/seeds.rb +41 -0
- data/hubstats.gemspec +1 -0
- data/lib/generators/hubstats/install_generator.rb +2 -1
- data/lib/hub_helper.rb +18 -0
- data/lib/hubstats.rb +0 -30
- data/lib/hubstats/events_handler.rb +25 -7
- data/lib/hubstats/github_api.rb +43 -15
- data/lib/hubstats/version.rb +1 -1
- data/lib/tasks/hubstats_tasks.rake +1 -0
- data/lib/tasks/populate_task.rake +2 -1
- data/spec/controllers/hubstats/deploys_controller_spec.rb +0 -3
- data/spec/controllers/hubstats/pull_requests_controller_spec.rb +3 -4
- data/spec/controllers/hubstats/repos_controller_spec.rb +4 -5
- data/spec/factories/comment.rb +2 -1
- data/spec/factories/deploys.rb +1 -0
- data/spec/factories/pull_requests.rb +1 -0
- data/spec/factories/repo.rb +1 -0
- data/spec/factories/users.rb +2 -1
- data/spec/lib/hubstats/github_api_spec.rb +5 -5
- metadata +41 -26
- data/date_range +0 -0
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
module Hubstats
|
|
2
2
|
class ApplicationController < ApplicationController
|
|
3
|
-
|
|
4
3
|
before_filter :set_time
|
|
5
4
|
|
|
5
|
+
# Private - Reads the cookie, and then either sets @start_date and @end_date to be the cookie's values
|
|
6
|
+
# or sets them to be today + 1 and two weeks ago.
|
|
7
|
+
#
|
|
8
|
+
# Returns - nothing
|
|
6
9
|
private
|
|
7
10
|
def set_time
|
|
8
|
-
cookies[:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
cookie = cookies[:hubstats_dates]
|
|
12
|
+
if cookie == nil || cookie.include?("null")
|
|
13
|
+
@start_date = Date.today - 14
|
|
14
|
+
@end_date = Date.today + 1
|
|
15
|
+
else
|
|
16
|
+
@start_date = cookies[:hubstats_dates].split("~~").first.to_date
|
|
17
|
+
@end_date = cookies[:hubstats_dates].split("~~").last.to_date + 1
|
|
18
|
+
end
|
|
11
19
|
end
|
|
12
20
|
end
|
|
13
21
|
end
|
|
@@ -2,6 +2,14 @@ require_dependency "hubstats/application_controller"
|
|
|
2
2
|
|
|
3
3
|
module Hubstats
|
|
4
4
|
class BaseController < Hubstats::ApplicationController
|
|
5
|
+
|
|
6
|
+
# Public - If the group is being asked to be grouped by user or repo, will make an array and group the data
|
|
7
|
+
# by either username or repo name.
|
|
8
|
+
#
|
|
9
|
+
# group_request - string of what the data should be grouped by
|
|
10
|
+
# group - the group of data to be grouped
|
|
11
|
+
#
|
|
12
|
+
# Returns - nothing
|
|
5
13
|
def grouping (group_request, group)
|
|
6
14
|
if group_request == "user"
|
|
7
15
|
@groups = group.to_a.group_by(&:user_name)
|
|
@@ -3,8 +3,11 @@ require_dependency "hubstats/application_controller"
|
|
|
3
3
|
module Hubstats
|
|
4
4
|
class DeploysController < Hubstats::BaseController
|
|
5
5
|
|
|
6
|
+
# Public - Will list the deploys that correspond with selected repos, users, orders, and groupings. Only shows
|
|
7
|
+
# deploys within the @start_date and @end_date.
|
|
8
|
+
#
|
|
9
|
+
# Returns - the deploy data
|
|
6
10
|
def index
|
|
7
|
-
# sets to include user and repo, and sorts data
|
|
8
11
|
@deploys = Hubstats::Deploy.includes(:repo, :pull_requests, :user)
|
|
9
12
|
.belonging_to_users(params[:users]).belonging_to_repos(params[:repos])
|
|
10
13
|
.group_by(params[:group])
|
|
@@ -14,7 +17,10 @@ module Hubstats
|
|
|
14
17
|
grouping(params[:group], @deploys)
|
|
15
18
|
end
|
|
16
19
|
|
|
17
|
-
#
|
|
20
|
+
# Public - Shows the single deploy and all of the stats and pull requests about that deploy. Stats and PRs only
|
|
21
|
+
# include info that happened between @start_date and @end_date.
|
|
22
|
+
#
|
|
23
|
+
# Returns - the stats and data of the deploy
|
|
18
24
|
def show
|
|
19
25
|
@deploy = Hubstats::Deploy.includes(:repo, :pull_requests).find(params[:id])
|
|
20
26
|
repo = @deploy.repo
|
|
@@ -29,7 +35,10 @@ module Hubstats
|
|
|
29
35
|
}
|
|
30
36
|
end
|
|
31
37
|
|
|
32
|
-
#
|
|
38
|
+
# Public - Creates a new deploy with the git_revision. Passed in the repo name and a string of PR ids
|
|
39
|
+
# that are then used to find the repo_id, PR id array. The user_id is found through one of the pull requests.
|
|
40
|
+
#
|
|
41
|
+
# Returns - nothing, but makes a new deploy
|
|
33
42
|
def create
|
|
34
43
|
if params[:git_revision].nil? || params[:repo_name].nil? || params[:pull_request_ids].nil?
|
|
35
44
|
render text: "Missing a necessary parameter: git revision, pull request ids, or repository name.", :status => 400 and return
|
|
@@ -45,11 +54,11 @@ module Hubstats
|
|
|
45
54
|
@deploy.repo_id = @repo.first.id.to_i
|
|
46
55
|
end
|
|
47
56
|
|
|
48
|
-
|
|
49
|
-
if !valid_pr_ids
|
|
57
|
+
pull_request_id_array = params[:pull_request_ids].split(",").map {|i| i.strip.to_i}
|
|
58
|
+
if !valid_pr_ids(pull_request_id_array)
|
|
50
59
|
render text: "No pull request ids given.", :status => 400 and return
|
|
51
60
|
else
|
|
52
|
-
@deploy.pull_requests = Hubstats::PullRequest.where(repo_id: @deploy.repo_id).where(number:
|
|
61
|
+
@deploy.pull_requests = Hubstats::PullRequest.where(repo_id: @deploy.repo_id).where(number: pull_request_id_array)
|
|
53
62
|
end
|
|
54
63
|
|
|
55
64
|
if !valid_pulls
|
|
@@ -64,14 +73,28 @@ module Hubstats
|
|
|
64
73
|
end
|
|
65
74
|
end
|
|
66
75
|
|
|
76
|
+
# Public - Checks if the repo that's passed in is empty.
|
|
77
|
+
#
|
|
78
|
+
# repo - the repository
|
|
79
|
+
#
|
|
80
|
+
# Returns - true if the repo is valid
|
|
67
81
|
def valid_repo(repo)
|
|
68
82
|
return !repo.empty?
|
|
69
83
|
end
|
|
70
84
|
|
|
71
|
-
|
|
72
|
-
|
|
85
|
+
# Public - Checks if the array is empty or if the ids in the array are invalid.
|
|
86
|
+
#
|
|
87
|
+
# pull_id_array - the array of pull request ids
|
|
88
|
+
#
|
|
89
|
+
# Returns - returns true if the array neither is empty nor comes out to [0]
|
|
90
|
+
def valid_pr_ids(pull_id_array)
|
|
91
|
+
return !pull_id_array.empty? && pull_id_array != [0]
|
|
73
92
|
end
|
|
74
93
|
|
|
94
|
+
# Public - Checks if the first pull assigned to the new deploy is nil, if the merged_by part is nil. If nothing is
|
|
95
|
+
# nil, it will set the user_id of the deploy to be the merged_by of the pull.
|
|
96
|
+
#
|
|
97
|
+
# Returns - true and changes the user_id of deploy, else returns false
|
|
75
98
|
def valid_pulls
|
|
76
99
|
pull = @deploy.pull_requests.first
|
|
77
100
|
return false if pull.nil? || pull.merged_by.nil?
|
|
@@ -3,6 +3,12 @@ require_dependency "hubstats/application_controller"
|
|
|
3
3
|
module Hubstats
|
|
4
4
|
class EventsController < ApplicationController
|
|
5
5
|
|
|
6
|
+
# Public - Verifies that the request we're receiving is a new event, and then will handle it and route
|
|
7
|
+
# it to the correct place.
|
|
8
|
+
#
|
|
9
|
+
# request - the request of the new event
|
|
10
|
+
#
|
|
11
|
+
# Returns - nothing, but makes a new event
|
|
6
12
|
def handler
|
|
7
13
|
verify_signature(request)
|
|
8
14
|
|
|
@@ -14,6 +20,11 @@ module Hubstats
|
|
|
14
20
|
render :nothing => true
|
|
15
21
|
end
|
|
16
22
|
|
|
23
|
+
# Pulbic - Will check that the request passed is a valid signature.
|
|
24
|
+
#
|
|
25
|
+
# request - the signature to be checked
|
|
26
|
+
#
|
|
27
|
+
# Returns - an error if the signatures don't match
|
|
17
28
|
private
|
|
18
29
|
def verify_signature(request)
|
|
19
30
|
request.body.rewind
|
|
@@ -3,6 +3,11 @@ require_dependency "hubstats/application_controller"
|
|
|
3
3
|
module Hubstats
|
|
4
4
|
class PullRequestsController < Hubstats::BaseController
|
|
5
5
|
|
|
6
|
+
# Public - Will correctly add the labels to the side of the page based on which PRs are showing, and will
|
|
7
|
+
# come up with the list of PRs to show, based on users, repos, grouping, labels, and order. Only shows
|
|
8
|
+
# PRs within @start_date and @end_date.
|
|
9
|
+
#
|
|
10
|
+
# Returns - the pull request data
|
|
6
11
|
def index
|
|
7
12
|
URI.decode(params[:label]) if params[:label]
|
|
8
13
|
|
|
@@ -18,13 +23,16 @@ module Hubstats
|
|
|
18
23
|
grouping(params[:group], @pull_requests)
|
|
19
24
|
end
|
|
20
25
|
|
|
26
|
+
# Public - Will show the particular pull request selected, including all of the basic stats, deploy (only if
|
|
27
|
+
# PR is closed), and comments associated with that PR within the @start_date and @end_date.
|
|
28
|
+
#
|
|
29
|
+
# Returns - the specific details of the pull request
|
|
21
30
|
def show
|
|
22
31
|
@repo = Hubstats::Repo.where(name: params[:repo]).first
|
|
23
32
|
@pull_request = Hubstats::PullRequest.belonging_to_repo(@repo.id).where(id: params[:id]).first
|
|
24
33
|
@comments = Hubstats::Comment.belonging_to_pull_request(params[:id]).created_in_date_range(@start_date, @end_date).limit(20)
|
|
25
34
|
comment_count = Hubstats::Comment.belonging_to_pull_request(params[:id]).created_in_date_range(@start_date, @end_date).count(:all)
|
|
26
35
|
@deploys = Hubstats::Deploy.where(id: @pull_request.deploy_id).order("deployed_at DESC")
|
|
27
|
-
|
|
28
36
|
@stats_basics = {
|
|
29
37
|
comment_count: comment_count,
|
|
30
38
|
net_additions: @pull_request.additions.to_i - @pull_request.deletions.to_i,
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
require_dependency "hubstats/application_controller"
|
|
2
2
|
|
|
3
3
|
module Hubstats
|
|
4
|
-
class ReposController <
|
|
4
|
+
class ReposController < Hubstats::BaseController
|
|
5
5
|
|
|
6
|
+
# Public - Lists all of the repos, either in alphabetical order, by query params, or with activity in between
|
|
7
|
+
# @start_date and @end_date.
|
|
8
|
+
#
|
|
9
|
+
# Returns - the repository data
|
|
6
10
|
def index
|
|
7
11
|
if params[:query] ## For select 2
|
|
8
12
|
@repos = Hubstats::Repo.where("name LIKE ?", "%#{params[:query]}%").order("name ASC")
|
|
@@ -17,6 +21,10 @@ module Hubstats
|
|
|
17
21
|
end
|
|
18
22
|
end
|
|
19
23
|
|
|
24
|
+
# Public - Shows the selected repository and all of the basic stats associated with that repository, including
|
|
25
|
+
# all deploys and merged PRs in that repo within @start_date and @end_date.
|
|
26
|
+
#
|
|
27
|
+
# Returns - the specific repository data
|
|
20
28
|
def show
|
|
21
29
|
@repo = Hubstats::Repo.where(name: params[:repo]).first
|
|
22
30
|
@pull_requests = Hubstats::PullRequest.belonging_to_repo(@repo.id).merged_in_date_range(@start_date, @end_date).order("updated_at DESC").limit(20)
|
|
@@ -24,7 +32,7 @@ module Hubstats
|
|
|
24
32
|
@deploys = Hubstats::Deploy.belonging_to_repo(@repo.id).deployed_in_date_range(@start_date, @end_date).order("deployed_at DESC").limit(20)
|
|
25
33
|
@deploy_count = Hubstats::Deploy.belonging_to_repo(@repo.id).deployed_in_date_range(@start_date, @end_date).count(:all)
|
|
26
34
|
@comment_count = Hubstats::Comment.belonging_to_repo(@repo.id).created_in_date_range(@start_date, @end_date).count(:all)
|
|
27
|
-
@user_count = Hubstats::User.
|
|
35
|
+
@user_count = Hubstats::User.with_pulls_or_comments_or_deploys(@start_date, @end_date, @repo.id).only_active.length
|
|
28
36
|
@net_additions = Hubstats::PullRequest.merged_in_date_range(@start_date, @end_date).belonging_to_repo(@repo.id).sum(:additions).to_i -
|
|
29
37
|
Hubstats::PullRequest.merged_in_date_range(@start_date, @end_date).belonging_to_repo(@repo.id).sum(:deletions).to_i
|
|
30
38
|
@additions = Hubstats::PullRequest.merged_in_date_range(@start_date, @end_date).belonging_to_repo(@repo.id).average(:additions)
|
|
@@ -33,6 +41,10 @@ module Hubstats
|
|
|
33
41
|
stats
|
|
34
42
|
end
|
|
35
43
|
|
|
44
|
+
# Public - Shows all of the repositories with individual stats for each repo. Also shows the stats for all of
|
|
45
|
+
# the repositories within @start_date and @end_date.
|
|
46
|
+
#
|
|
47
|
+
# Returns - the stats for the entirety of Hubstats and all repos
|
|
36
48
|
def dashboard
|
|
37
49
|
if params[:query] ## For select 2
|
|
38
50
|
@repos = Hubstats::Repo.where("name LIKE ?", "%#{params[:query]}%").order("name ASC")
|
|
@@ -45,7 +57,7 @@ module Hubstats
|
|
|
45
57
|
.paginate(:page => params[:page], :per_page => 15)
|
|
46
58
|
end
|
|
47
59
|
|
|
48
|
-
@user_count = Hubstats::User.
|
|
60
|
+
@user_count = Hubstats::User.with_pulls_or_comments_or_deploys(@start_date, @end_date).only_active.length
|
|
49
61
|
@deploy_count = Hubstats::Deploy.deployed_in_date_range(@start_date, @end_date).count(:all)
|
|
50
62
|
@pull_count = Hubstats::PullRequest.merged_in_date_range(@start_date, @end_date).count(:all)
|
|
51
63
|
@comment_count = Hubstats::Comment.created_in_date_range(@start_date, @end_date).count(:all)
|
|
@@ -62,6 +74,8 @@ module Hubstats
|
|
|
62
74
|
end
|
|
63
75
|
end
|
|
64
76
|
|
|
77
|
+
# stats
|
|
78
|
+
# Will assign all of the stats for both the show page and the dashboard page.
|
|
65
79
|
def stats
|
|
66
80
|
@additions ||= 0
|
|
67
81
|
@deletions ||= 0
|
|
@@ -3,11 +3,20 @@ require_dependency "hubstats/application_controller"
|
|
|
3
3
|
module Hubstats
|
|
4
4
|
class UsersController < ApplicationController
|
|
5
5
|
|
|
6
|
+
# Public - Shows all of the users in either alphabetical order, by filter params, or that have done things in
|
|
7
|
+
# github between the selected @start_date and @end_date.
|
|
8
|
+
#
|
|
9
|
+
# Returns - the user data
|
|
6
10
|
def index
|
|
7
11
|
if params[:query] ## For select 2
|
|
8
12
|
@users = Hubstats::User.where("login LIKE ?", "%#{params[:query]}%").order("login ASC")
|
|
9
13
|
elsif params[:id]
|
|
10
14
|
@users = Hubstats::User.where(id: params[:id].split(",")).order("login ASC")
|
|
15
|
+
elsif params[:repos]
|
|
16
|
+
@users = Hubstats::User.only_active.with_contributions(@start_date, @end_date, params[:repos])
|
|
17
|
+
.with_id(params[:users])
|
|
18
|
+
.custom_order(params[:order])
|
|
19
|
+
.paginate(:page => params[:page], :per_page => 15)
|
|
11
20
|
else
|
|
12
21
|
@users = Hubstats::User.only_active.with_all_metrics(@start_date, @end_date)
|
|
13
22
|
.with_id(params[:users])
|
|
@@ -21,6 +30,10 @@ module Hubstats
|
|
|
21
30
|
end
|
|
22
31
|
end
|
|
23
32
|
|
|
33
|
+
# Public - Will show the specific user along with the basic stats about that user, including all deploys
|
|
34
|
+
# and merged PRs they've done within the @start_date and @end_date.
|
|
35
|
+
#
|
|
36
|
+
# Returns - the data of the specific user
|
|
24
37
|
def show
|
|
25
38
|
@user = Hubstats::User.where(login: params[:id]).first
|
|
26
39
|
@pull_requests = Hubstats::PullRequest.belonging_to_user(@user.id).merged_in_date_range(@start_date, @end_date).order("updated_at DESC").limit(20)
|
|
@@ -36,6 +49,8 @@ module Hubstats
|
|
|
36
49
|
stats
|
|
37
50
|
end
|
|
38
51
|
|
|
52
|
+
# stats
|
|
53
|
+
# Shows the basic stats for both the user show page.
|
|
39
54
|
def stats
|
|
40
55
|
@additions ||= 0
|
|
41
56
|
@deletions ||= 0
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
module Hubstats
|
|
2
2
|
class Comment < ActiveRecord::Base
|
|
3
|
+
|
|
4
|
+
# Various checks that can be used to filter and find info about comments.
|
|
5
|
+
scope :created_in_date_range, lambda {|start_date, end_date| where("hubstats_comments.created_at BETWEEN ? AND ?", start_date, end_date)}
|
|
6
|
+
scope :belonging_to_pull_request, lambda {|pull_request_id| where(pull_request_id: pull_request_id)}
|
|
7
|
+
scope :belonging_to_user, lambda {|user_id| where(user_id: user_id)}
|
|
8
|
+
scope :belonging_to_repo, lambda {|repo_id| where(repo_id: repo_id)}
|
|
9
|
+
|
|
10
|
+
# Public - Gets the number of PRs that a user commented on that were not their own PR.
|
|
11
|
+
#
|
|
12
|
+
# Returns - the number of PRs that a specific user has reviewed
|
|
3
13
|
scope :pull_reviews_count, lambda {
|
|
4
14
|
select("hubstats_comments.user_id")
|
|
5
15
|
.select("COUNT(DISTINCT hubstats_pull_requests.id) as total")
|
|
@@ -8,11 +18,6 @@ module Hubstats
|
|
|
8
18
|
.group("hubstats_comments.user_id")
|
|
9
19
|
}
|
|
10
20
|
|
|
11
|
-
scope :created_in_date_range, lambda {|start_date, end_date| where("hubstats_comments.created_at BETWEEN ? AND ?", start_date, end_date)}
|
|
12
|
-
scope :belonging_to_pull_request, lambda {|pull_request_id| where(pull_request_id: pull_request_id)}
|
|
13
|
-
scope :belonging_to_user, lambda {|user_id| where(user_id: user_id)}
|
|
14
|
-
scope :belonging_to_repo, lambda {|repo_id| where(repo_id: repo_id)}
|
|
15
|
-
|
|
16
21
|
attr_accessible :id, :html_url, :url, :pull_request_url, :diff_hunk, :path,
|
|
17
22
|
:position, :original_position, :line, :commit_id, :original_commit_id,
|
|
18
23
|
:body, :created_at, :updated_at, :user_id, :pull_request_id, :repo_id,
|
|
@@ -22,6 +27,9 @@ module Hubstats
|
|
|
22
27
|
belongs_to :pull_request
|
|
23
28
|
belongs_to :repo
|
|
24
29
|
|
|
30
|
+
# Public - Makes a new comment based on a GitHub webhook occurrence. Assigns the user and the PR.
|
|
31
|
+
#
|
|
32
|
+
# github_comment - the information from Github about the comment
|
|
25
33
|
def self.create_or_update(github_comment)
|
|
26
34
|
github_comment = github_comment.to_h.with_indifferent_access if github_comment.respond_to? :to_h
|
|
27
35
|
|
|
@@ -4,10 +4,14 @@ module Hubstats
|
|
|
4
4
|
before_validation :check_time, on: :create
|
|
5
5
|
validates :git_revision, :deployed_at, :repo_id, presence: true
|
|
6
6
|
|
|
7
|
+
# Public - Checks if there is a deployed_at for a new deploy; if there isn't, then assign it the current time.
|
|
8
|
+
#
|
|
9
|
+
# Returns - the current time or the actual deployed_at time
|
|
7
10
|
def check_time
|
|
8
11
|
self.deployed_at = Time.now.getutc if deployed_at.nil?
|
|
9
12
|
end
|
|
10
13
|
|
|
14
|
+
# Various checks that can be used to filter, sort, and find info about deploys.
|
|
11
15
|
scope :deployed_in_date_range, lambda {|start_date, end_date| where("hubstats_deploys.deployed_at BETWEEN ? AND ?", start_date, end_date)}
|
|
12
16
|
scope :group, lambda {|group| group_by(:repo_id) if group }
|
|
13
17
|
scope :belonging_to_repo, lambda {|repo_id| where(repo_id: repo_id)}
|
|
@@ -23,13 +27,23 @@ module Hubstats
|
|
|
23
27
|
belongs_to :repo
|
|
24
28
|
has_many :pull_requests
|
|
25
29
|
|
|
26
|
-
#
|
|
30
|
+
# Public - Orders the deploys within the start_date and end_date with by a given order.
|
|
31
|
+
#
|
|
32
|
+
# start_date - the start of the date range
|
|
33
|
+
# end_date - the end of the data range
|
|
34
|
+
# order - the designated order to sort the data
|
|
35
|
+
#
|
|
36
|
+
# Returns - the deploy data ordered
|
|
27
37
|
def self.order_with_date_range(start_date, end_date, order)
|
|
28
38
|
order = ["ASC", "DESC"].detect{|order_type| order_type.to_s == order.to_s.upcase } || "DESC"
|
|
29
39
|
deployed_in_date_range(start_date, end_date).order("hubstats_deploys.deployed_at #{order}")
|
|
30
40
|
end
|
|
31
41
|
|
|
32
|
-
#
|
|
42
|
+
# Public - Groups the deploys based on the string passed in: 'user' or 'repo'.
|
|
43
|
+
#
|
|
44
|
+
# group - string that is the designated grouping
|
|
45
|
+
#
|
|
46
|
+
# Returns - the data grouped
|
|
33
47
|
def self.group_by(group)
|
|
34
48
|
if group == "user"
|
|
35
49
|
with_user_name.order("user_name ASC")
|
|
@@ -40,7 +54,12 @@ module Hubstats
|
|
|
40
54
|
end
|
|
41
55
|
end
|
|
42
56
|
|
|
43
|
-
#
|
|
57
|
+
# Public - Gathers all PRs for a deploy, and then either finds all of the additions or all of the
|
|
58
|
+
# deletions, depending on the symbol passed in.
|
|
59
|
+
#
|
|
60
|
+
# add - symbol that reflects the type of data we want to add up
|
|
61
|
+
#
|
|
62
|
+
# Returns - the total amount that has been added; either deletions or additions
|
|
44
63
|
def total_changes(add)
|
|
45
64
|
pull_requests = self.pull_requests
|
|
46
65
|
total = 0
|
|
@@ -54,7 +73,10 @@ module Hubstats
|
|
|
54
73
|
return total
|
|
55
74
|
end
|
|
56
75
|
|
|
57
|
-
#
|
|
76
|
+
# Public - Gathers all PRs for a deploy, and then finds all of the additions and all of the deletions,
|
|
77
|
+
# then subtracts them to find the number of net additions.
|
|
78
|
+
#
|
|
79
|
+
# Returns - the total number of deletions subtracted from the total number of additions
|
|
58
80
|
def find_net_additions
|
|
59
81
|
pull_requests = self.pull_requests
|
|
60
82
|
total_additions = 0
|
|
@@ -66,7 +88,9 @@ module Hubstats
|
|
|
66
88
|
return total_additions - total_deletions
|
|
67
89
|
end
|
|
68
90
|
|
|
69
|
-
#
|
|
91
|
+
# Public - Gathers all of the PRs and then counts all of the comments that are assigned to each PR.
|
|
92
|
+
#
|
|
93
|
+
# Returns - the total amount of comments that all PRs to a deploy has
|
|
70
94
|
def find_comment_count
|
|
71
95
|
pull_requests = self.pull_requests
|
|
72
96
|
total_comments = 0
|
|
@@ -75,6 +99,5 @@ module Hubstats
|
|
|
75
99
|
end
|
|
76
100
|
return total_comments
|
|
77
101
|
end
|
|
78
|
-
|
|
79
102
|
end
|
|
80
103
|
end
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
module Hubstats
|
|
2
2
|
class Label < ActiveRecord::Base
|
|
3
3
|
|
|
4
|
+
# Various checks that can be used to filter and find info about labels.
|
|
5
|
+
scope :with_ids, lambda {|pull_ids| (where("hubstats_labels_pull_requests.pull_request_id" => pull_ids))}
|
|
6
|
+
scope :with_state, lambda {|state| (where(state: state) unless state == 'all') if state}
|
|
7
|
+
|
|
8
|
+
# Public - Counts all of the labels that are assigned to one of the PRs that is passed in. This is then
|
|
9
|
+
# merged with the list of PRs. It also shows a count of the number of PRs with each specific label.
|
|
10
|
+
#
|
|
11
|
+
# pull_requests - the PRs that are shown on the given index page
|
|
12
|
+
#
|
|
13
|
+
# Returns - the labels data
|
|
4
14
|
def self.count_by_pull_requests(pull_requests)
|
|
5
15
|
select("hubstats_labels.*")
|
|
6
16
|
.select("COUNT(hubstats_labels_pull_requests.pull_request_id) AS pull_request_count")
|
|
@@ -10,14 +20,16 @@ module Hubstats
|
|
|
10
20
|
.order("pull_request_count DESC")
|
|
11
21
|
end
|
|
12
22
|
|
|
13
|
-
scope :with_ids, lambda {|pull_ids| (where("hubstats_labels_pull_requests.pull_request_id" => pull_ids))}
|
|
14
|
-
|
|
15
|
-
scope :with_state, lambda {|state| (where(state: state) unless state == 'all') if state}
|
|
16
|
-
|
|
17
23
|
attr_accessible :url, :name, :color
|
|
18
24
|
|
|
19
25
|
has_and_belongs_to_many :pull_requests, :join_table => 'hubstats_labels_pull_requests'
|
|
20
26
|
|
|
27
|
+
# Public - Checks if the label is currently existing, and if it isn't, then makes a new label with
|
|
28
|
+
# the specifications that are passed in.
|
|
29
|
+
#
|
|
30
|
+
# label - the info that's passed in about the new label
|
|
31
|
+
#
|
|
32
|
+
# Returns - the label
|
|
21
33
|
def self.first_or_create(label)
|
|
22
34
|
if exists = Hubstats::Label.where(name: label[:name]).first
|
|
23
35
|
return exists
|