hubstats 0.4.4 → 0.5.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 +5 -13
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.markdown +5 -0
- data/README.md +64 -22
- data/app/assets/javascripts/hubstats/pull_requests.js +5 -0
- data/app/assets/javascripts/hubstats/select2.js +46 -3
- data/app/assets/javascripts/hubstats/users.js +8 -0
- data/app/assets/stylesheets/hubstats/application.css +5 -1
- data/app/controllers/hubstats/pull_requests_controller.rb +2 -3
- data/app/controllers/hubstats/repos_controller.rb +7 -12
- data/app/controllers/hubstats/teams_controller.rb +62 -0
- data/app/controllers/hubstats/users_controller.rb +9 -8
- data/app/models/hubstats/comment.rb +1 -0
- data/app/models/hubstats/pull_request.rb +40 -8
- data/app/models/hubstats/repo.rb +1 -1
- data/app/models/hubstats/team.rb +159 -0
- data/app/models/hubstats/user.rb +10 -1
- data/app/views/hubstats/deploys/show.html.erb +1 -4
- data/app/views/hubstats/partials/_comment-condensed.html.erb +1 -0
- data/app/views/hubstats/partials/_comment.html.erb +1 -0
- data/app/views/hubstats/partials/_footer.html.erb +3 -0
- data/app/views/hubstats/partials/_header.html.erb +5 -3
- data/app/views/hubstats/partials/_team.html.erb +40 -0
- data/app/views/hubstats/partials/_user-condensed.html.erb +6 -5
- data/app/views/hubstats/partials/_user.html.erb +2 -1
- data/app/views/hubstats/pull_requests/index.html.erb +4 -0
- data/app/views/hubstats/repos/dashboard.html.erb +0 -1
- data/app/views/hubstats/repos/show.html.erb +1 -1
- data/app/views/hubstats/tables/_comments-condensed.html.erb +1 -1
- data/app/views/hubstats/tables/_comments.html.erb +1 -1
- data/app/views/hubstats/tables/_deploys.html.erb +1 -1
- data/app/views/hubstats/tables/_grouped_deploys.html.erb +1 -1
- data/app/views/hubstats/tables/_grouped_pulls.html.erb +1 -1
- data/app/views/hubstats/tables/_pulls-condensed.html.erb +1 -1
- data/app/views/hubstats/tables/_pulls.html.erb +1 -1
- data/app/views/hubstats/tables/_repos-condensed.html.erb +1 -1
- data/app/views/hubstats/tables/_repos.html.erb +2 -2
- data/app/views/hubstats/tables/_teams.html.erb +28 -0
- data/app/views/hubstats/tables/_users-condensed.html.erb +1 -1
- data/app/views/hubstats/tables/_users.html.erb +2 -2
- data/app/views/hubstats/teams/index.html.erb +10 -0
- data/app/views/hubstats/teams/show.html.erb +28 -0
- data/app/views/hubstats/users/show.html.erb +2 -2
- data/config/routes.rb +4 -3
- data/db/migrate/20150706204910_create_hubstats_teams.rb +8 -0
- data/db/migrate/20150706205049_create_hubstats_teams_users.rb +8 -0
- data/db/migrate/20150713185013_add_team_id_to_prs.rb +5 -0
- data/hubstats.gemspec +2 -1
- data/lib/generators/hubstats/octokit.example.yml +3 -1
- data/lib/hubstats/events_handler.rb +20 -0
- data/lib/hubstats/github_api.rb +71 -15
- data/lib/hubstats/version.rb +1 -1
- data/lib/tasks/hubstats_tasks.rake +19 -0
- data/lib/tasks/populate_task.rake +35 -2
- data/spec/controllers/hubstats/repos_controller_spec.rb +1 -0
- data/spec/controllers/hubstats/teams_controller_spec.rb +39 -0
- data/spec/controllers/hubstats/users_controller_spec.rb +2 -0
- data/spec/factories/pull_requests.rb +1 -1
- data/spec/factories/teams.rb +24 -0
- data/spec/factories/users.rb +0 -1
- data/spec/lib/hubstats/events_handler_spec.rb +37 -7
- data/spec/lib/hubstats/github_api_spec.rb +55 -2
- data/spec/lib/hubstats_spec.rb +7 -1
- data/spec/models/hubstats/pull_request_spec.rb +34 -0
- data/spec/models/hubstats/team_spec.rb +23 -0
- data/spec/models/hubstats/user_spec.rb +26 -0
- data/test/dummy/config/initializers/octokit_patch.rb +3 -0
- data/test/dummy/db/schema.rb +51 -40
- metadata +62 -29
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
NjVlNzNhYjQwNzZlNmJmMjM5Nzk0MTQzOGNkZjQwNTE4NjBiNmE4ZQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ac76f0c7427aa69b1fe569a7736e653be077c6ff
|
4
|
+
data.tar.gz: 2ab26da5f449aa74f2c9f8e1d4980a2280e7ebcb
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
MGQyYmRmODU5MjY2YTRkZGJhMjRhMDg4NjYwMjlmYmY4ODBmMTQ0ZjNiYTEx
|
11
|
-
MjYwNDJhNGRlMWFkOTczZDBmNTNjN2NmZjFiN2QyNjQxOWU0OTU=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
Mzk0NGU2YjZjZmEwMGUzYWQ5NjY4OGY3YWNmNThkNjA5ZmUzZWU3ZDU5MjQ0
|
14
|
-
Y2E3NmVmNDNiYTM3MGIwN2E2NWMzYzNmODg5ZWEwZGU4OGZjMTFhM2ZjZWNm
|
15
|
-
ZDJiYzk5MDk2OGUwYWM2ZjE5ZGRhMWU4ZjIzODY2MzNhZDA2OWI=
|
6
|
+
metadata.gz: d4b610a75cc65a56502fc1203947697d98ffcdff52104e3bd72cfb4d56a3b8f53c66506e5bed2c6ec827e76f5d6127076ce344c51339d0d0ed1d759fee64345a
|
7
|
+
data.tar.gz: 648a398af505e04760496ebab015e7da39d3b68b5831a840c1fbb8f42ed8cda798a3bef01d3603eccbc69c8a47dbd4185f9fdf6504a96f44ebaab40083850715
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
hubstats
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.2.2
|
data/CHANGELOG.markdown
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
#### v0.5.0
|
2
|
+
* Adding teams and team commands, team sorting, and team metrics to Hubstats
|
3
|
+
|
4
|
+
> Emma Sax, Andy Fleener: Brian Bergstrom: https://github.com/sportngin/hubstats/pull/74
|
5
|
+
|
1
6
|
#### v0.4.4
|
2
7
|
#### v0.4.3
|
3
8
|
* Fixes a bug introduced in v0.4.1 that removed the config method from Hubstats
|
data/README.md
CHANGED
@@ -3,58 +3,98 @@
|
|
3
3
|
Hubstats is a rails plugin which allows you to search and monitor pull requests made across a collection of repositories. It also gives extra statistics about users and pull requests not found on GitHub.
|
4
4
|
|
5
5
|
## Setup
|
6
|
-
|
7
|
-
The following setup is designed to only be used when integrating this plugin into a rails application or for when adding new migrations.
|
6
|
+
The following setup is designed to only be used when integrating this plugin into a rails application.
|
8
7
|
|
9
8
|
Run `rails generate hubstats:install`.
|
9
|
+
|
10
|
+
Configure `octokit.yml` with your GitHub information (see below).
|
10
11
|
|
11
12
|
Run `rake hubstats:install:migrations`.
|
12
13
|
|
13
|
-
Run `rake hubstats:setup` to run the necessary migrations and start pulling data from
|
14
|
+
Run `rake hubstats:setup` to run the necessary migrations and start pulling data from GitHub.
|
14
15
|
|
15
16
|
Add 'mount Hubstats::Engine => "/hubstats"' to your apps routes file.
|
16
17
|
|
17
18
|
## Configuration
|
18
|
-
|
19
19
|
### Authentication
|
20
|
+
Hubstats needs GitHub credentials to access your repositories, these can be setup in one of two ways:
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
#### Configuring the `octokit.yml`
|
24
|
-
|
25
|
-
Add your GitHub API token or ClientID and Secret to `octokit.yml`.
|
22
|
+
#### GitHub API Tokens
|
23
|
+
Add your GitHub API token (called `access_token`) or ClientID and Secret to `octokit.yml`.
|
26
24
|
|
27
25
|
#### Environment Variables
|
28
|
-
|
29
26
|
Hubstats can also use OAUTH access tokens stored in ENV["GITHUB_API_TOKEN"] or for Application Authentication in ENV["CLIENT_ID"] and ENV["CLIENT_SECRET"], if for some reason you don't want to store them in `octokit.yml`.
|
30
27
|
|
31
|
-
###
|
28
|
+
### Configuring Data to be Received from GitHub
|
29
|
+
#### Organizations to Follow
|
30
|
+
Hubstats tracks certain repositories and teams that are part of an organization. Therefore, you must whitelist the specific GitHub organization to track in `octokit.yml`. The list of organizations should look something like this:
|
32
31
|
|
33
|
-
|
32
|
+
```
|
33
|
+
org_list:
|
34
|
+
- sportngin
|
35
|
+
```
|
36
|
+
|
37
|
+
#### Repositories to Follow
|
38
|
+
If you only want Hubstats to watch certain repositories, you can set it to watch a list of specific repositories in `octokit.yml`. Otherwise, the default will be for Hubstats to watch an entire organization's list of repositories. The list of repositories should look like either:
|
39
|
+
|
40
|
+
```
|
41
|
+
repo_list:
|
42
|
+
- sportngin/repo_one
|
43
|
+
- sportngin/repo_two
|
44
|
+
- sportngin/repo_three
|
45
|
+
```
|
46
|
+
|
47
|
+
#### Teams to Follow
|
48
|
+
If you want Hubstats to watch certain teams to give back GitHub team metrics, then you must whitelist a list of teams in the `octokit.yml`. If no list of teams is added, then there will be no team metrics. The list of teams should look something like:
|
49
|
+
|
50
|
+
```
|
51
|
+
team_list:
|
52
|
+
- Team One
|
53
|
+
- Team Two
|
54
|
+
- Team Three
|
55
|
+
```
|
56
|
+
|
57
|
+
Also, the GitHub API token in `octokit.yml` must be a member of all of the teams listed in order to receive webhooks and populate team data.
|
58
|
+
|
59
|
+
#### Users to Ignore
|
60
|
+
If there are specific users that should not show up on any lists or in any metrics, then they can be placed on the `ignore_users_list` part of the `octokit.yml`. This list is referenced when making the list of users in teams. The list of users to ignore should look like:
|
61
|
+
|
62
|
+
```
|
63
|
+
ignore_users_list:
|
64
|
+
- user_login_one
|
65
|
+
- user_login_two
|
66
|
+
- user_login_three
|
67
|
+
```
|
34
68
|
|
35
|
-
|
69
|
+
### Webhooks
|
70
|
+
Hubstats uses GitHub webhooks to keep its data updated. It requires you to set a secret as well as an endpoint to push to.
|
36
71
|
|
72
|
+
To generate a secret run:
|
37
73
|
```
|
38
74
|
ruby -rsecurerandom -e 'puts SecureRandom.hex(20)'
|
39
75
|
```
|
40
|
-
|
41
76
|
Set the endpoint to be:
|
42
77
|
|
43
78
|
www.yourdomain.com/hubstats/handler
|
44
79
|
|
45
|
-
### Repositories
|
46
|
-
|
47
|
-
Hubstats needs to know what repos for it to watch. You can set it to watch either an entire organization or a list of specific repos in octokit.yml.
|
48
|
-
|
49
80
|
## Testing
|
50
|
-
|
51
|
-
|
81
|
+
All of the automated tests are written in RSpec. To run these tests, run the following commands, assuming that there are two already existent local databases titled `hubstats_development` and `hubstats_test`:
|
82
|
+
```
|
83
|
+
cd test/dummy/
|
84
|
+
rake db:test:prepare
|
85
|
+
bundle exec rspec
|
86
|
+
```
|
87
|
+
To test what Hubstats would actually look like on a web browser, we need to install the plugin into a Rails application to run. This is because Hubstats is a plugin, not an application. The `test` directory is also a dummy rails application for manually testing the UI by serving Hubstats locally. When developing and using the `test/dummy` locally, then the test will automatically sync with any updated code, so it doesn't need to be re-served when changes are made with the normal Rails application. When in the development process, one just needs to run:
|
88
|
+
```
|
89
|
+
cd test/dummy/
|
90
|
+
bundle exec rails s
|
91
|
+
```
|
92
|
+
to serve the plugin. http://guides.rubyonrails.org/plugins.html will give more information on the implementation of a Rails plugin.
|
52
93
|
|
53
94
|
## TL:DR
|
54
|
-
|
55
95
|
Run `rails generate hubstats:install`.
|
56
96
|
|
57
|
-
Configure `octokit.yml` with your
|
97
|
+
Configure `octokit.yml` with your GitHub information (see above).
|
58
98
|
|
59
99
|
Run `rake hubstats:install:migrations`.
|
60
100
|
|
@@ -62,4 +102,6 @@ All of the automated tests are written in RSpec. Since hubstats is a plugin, not
|
|
62
102
|
|
63
103
|
Add 'mount Hubstats::Engine => "/hubstats"' to your routes file.
|
64
104
|
|
105
|
+
<hr>
|
106
|
+
|
65
107
|
This project rocks and uses MIT-LICENSE.
|
@@ -35,6 +35,11 @@ $(document).ready(function() {
|
|
35
35
|
var ids = $("#users").val();
|
36
36
|
updateQueryStringParameter(queryParameters,"users",ids);
|
37
37
|
});
|
38
|
+
|
39
|
+
$("#teams").change(function() {
|
40
|
+
var ids = $("#teams").val();
|
41
|
+
updateQueryStringParameter(queryParameters,"teams",ids);
|
42
|
+
});
|
38
43
|
});
|
39
44
|
|
40
45
|
/**
|
@@ -5,6 +5,7 @@
|
|
5
5
|
$(document).ready(function() {
|
6
6
|
usersIDs = queryParameters["users"] ? queryParameters["users"].replace("%2C", ",") : "";
|
7
7
|
reposIDs = queryParameters["repos"] ? queryParameters["repos"].replace("%2C", ",") : "";
|
8
|
+
teamsIDs = queryParameters["teams"] ? queryParameters["teams"].replace("%2C", ",") : "";
|
8
9
|
|
9
10
|
$("#repos").select2({
|
10
11
|
placeholder: "Repositories",
|
@@ -45,8 +46,48 @@ $(document).ready(function() {
|
|
45
46
|
});
|
46
47
|
}
|
47
48
|
}
|
48
|
-
}).select2('val', []);
|
49
|
+
}).select2('val', []);
|
49
50
|
|
51
|
+
$("#teams").select2({
|
52
|
+
placeholder: "Teams",
|
53
|
+
multiple: true,
|
54
|
+
ajax: {
|
55
|
+
url: getPath("team"),
|
56
|
+
dataType: 'json',
|
57
|
+
quietMillis: 100,
|
58
|
+
data: function (term) {
|
59
|
+
return {
|
60
|
+
query: term
|
61
|
+
};
|
62
|
+
},
|
63
|
+
results: function (data) {
|
64
|
+
return {
|
65
|
+
results: $.map(data, function (team) {
|
66
|
+
return {
|
67
|
+
text: team.name,
|
68
|
+
id: team.id
|
69
|
+
}
|
70
|
+
})
|
71
|
+
};
|
72
|
+
}
|
73
|
+
},
|
74
|
+
initSelection: function(element, callback) {
|
75
|
+
if (teamsIDs !== "") {
|
76
|
+
$.ajax(getPath("team"), {
|
77
|
+
data: { id: teamsIDs },
|
78
|
+
dataType: "json"
|
79
|
+
}).done(function (data) { callback(
|
80
|
+
$.map(data, function (team) {
|
81
|
+
return {
|
82
|
+
text: team.name,
|
83
|
+
id: team.id
|
84
|
+
}
|
85
|
+
})
|
86
|
+
);
|
87
|
+
});
|
88
|
+
}
|
89
|
+
}
|
90
|
+
}).select2('val', []);
|
50
91
|
|
51
92
|
$("#users").select2({
|
52
93
|
placeholder: "Users",
|
@@ -96,7 +137,9 @@ $(document).ready(function() {
|
|
96
137
|
*/
|
97
138
|
function getPath (model) {
|
98
139
|
if (model == 'user') {
|
99
|
-
return $("#brand").attr('data-user-path');
|
100
|
-
else if (model == 'repo')
|
140
|
+
return $("#brand").attr('data-user-path');
|
141
|
+
} else if (model == 'repo') {
|
101
142
|
return $("#brand").attr('data-repo-path');
|
143
|
+
} else if (model == 'team')
|
144
|
+
return $("#brand").attr('data-team-path');
|
102
145
|
};
|
@@ -37,6 +37,14 @@ $(document).ready(function() {
|
|
37
37
|
$("#deletions").on("click", function(){
|
38
38
|
toggleOrder(queryParameters,$(this).attr('id'));
|
39
39
|
});
|
40
|
+
|
41
|
+
$("#repocount").on("click", function(){
|
42
|
+
toggleOrder(queryParameters,$(this).attr('id'));
|
43
|
+
});
|
44
|
+
|
45
|
+
$("#usercount").on("click", function(){
|
46
|
+
toggleOrder(queryParameters,$(this).attr('id'));
|
47
|
+
});
|
40
48
|
});
|
41
49
|
|
42
50
|
/* toggleOrder
|
@@ -36,12 +36,14 @@
|
|
36
36
|
top: 8px;
|
37
37
|
}
|
38
38
|
|
39
|
+
/*For the footer*/
|
39
40
|
.footer-main-text {
|
40
41
|
font-size: 18px;
|
41
42
|
color: #B0B0B0;
|
42
43
|
text-align: center;
|
43
44
|
}
|
44
45
|
|
46
|
+
/*For the footer*/
|
45
47
|
.footer-text {
|
46
48
|
font-size: 12px;
|
47
49
|
color: #A0A0A0;
|
@@ -107,7 +109,7 @@
|
|
107
109
|
|
108
110
|
/*For the lists of repos, pull requests, deploys, comments, and users*/
|
109
111
|
|
110
|
-
.pulls, .comments, .users, .repos, .deploys {
|
112
|
+
.pulls, .comments, .users, .repos, .teams, .deploys {
|
111
113
|
margin: 15px 0px 15px 0px;
|
112
114
|
border: 1px solid #ccc;
|
113
115
|
border-radius: 5px;
|
@@ -125,6 +127,7 @@
|
|
125
127
|
.row .single-comment,
|
126
128
|
.row .single-user,
|
127
129
|
.row .single-repo,
|
130
|
+
.row .single-team,
|
128
131
|
.row .single-deploy {
|
129
132
|
padding:5px;
|
130
133
|
margin: 0px;
|
@@ -148,6 +151,7 @@
|
|
148
151
|
.single-pull > .pull-info,
|
149
152
|
.single-user > .user-info,
|
150
153
|
.single-repo > .repo-info,
|
154
|
+
.single-team > .team-info,
|
151
155
|
.single-deploy > .deploy-info, {
|
152
156
|
padding: 0px;
|
153
157
|
}
|
@@ -14,8 +14,8 @@ module Hubstats
|
|
14
14
|
pull_requests = PullRequest.all_filtered(params, @start_date, @end_date)
|
15
15
|
@labels = Hubstats::Label.count_by_pull_requests(pull_requests).order("pull_request_count DESC")
|
16
16
|
|
17
|
-
@pull_requests = Hubstats::PullRequest.includes(:user, :repo)
|
18
|
-
.belonging_to_users(params[:users]).belonging_to_repos(params[:repos])
|
17
|
+
@pull_requests = Hubstats::PullRequest.includes(:user, :repo, :team)
|
18
|
+
.belonging_to_users(params[:users]).belonging_to_repos(params[:repos]).belonging_to_teams(params[:teams])
|
19
19
|
.group_by(params[:group]).with_label(params[:label])
|
20
20
|
.state_based_order(@start_date, @end_date, params[:state], params[:order])
|
21
21
|
.paginate(:page => params[:page], :per_page => 15)
|
@@ -40,6 +40,5 @@ module Hubstats
|
|
40
40
|
deletions: @pull_request.deletions.to_i
|
41
41
|
}
|
42
42
|
end
|
43
|
-
|
44
43
|
end
|
45
44
|
end
|
@@ -46,16 +46,10 @@ module Hubstats
|
|
46
46
|
#
|
47
47
|
# Returns - the stats for the entirety of Hubstats and all repos
|
48
48
|
def dashboard
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
else
|
54
|
-
@repos = Hubstats::Repo.with_all_metrics(@start_date, @end_date)
|
55
|
-
.with_id(params[:repos])
|
56
|
-
.custom_order(params[:order])
|
57
|
-
.paginate(:page => params[:page], :per_page => 15)
|
58
|
-
end
|
49
|
+
@repos = Hubstats::Repo.with_all_metrics(@start_date, @end_date)
|
50
|
+
.with_id(params[:repos])
|
51
|
+
.custom_order(params[:order])
|
52
|
+
.paginate(:page => params[:page], :per_page => 15)
|
59
53
|
|
60
54
|
@user_count = Hubstats::User.with_pulls_or_comments_or_deploys(@start_date, @end_date).only_active.length
|
61
55
|
@deploy_count = Hubstats::Deploy.deployed_in_date_range(@start_date, @end_date).count(:all)
|
@@ -74,8 +68,9 @@ module Hubstats
|
|
74
68
|
end
|
75
69
|
end
|
76
70
|
|
77
|
-
# stats
|
78
|
-
#
|
71
|
+
# Public - Will assign all of the stats for both the show page and the dashboard page.
|
72
|
+
#
|
73
|
+
# Returns - the data in two hashes
|
79
74
|
def stats
|
80
75
|
@additions ||= 0
|
81
76
|
@deletions ||= 0
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require_dependency "hubstats/application_controller"
|
2
|
+
|
3
|
+
module Hubstats
|
4
|
+
class TeamsController < Hubstats::BaseController
|
5
|
+
|
6
|
+
# Public - Shows all of the teams by filter params lists them with metrics between the start date and end date.
|
7
|
+
#
|
8
|
+
# Returns - the team data
|
9
|
+
def index
|
10
|
+
if params[:query] ## For select 2
|
11
|
+
@teams = Hubstats::Team.where("name LIKE ?", "%#{params[:query]}%").order("name ASC")
|
12
|
+
elsif params[:id]
|
13
|
+
@teams = Hubstats::Team.where(id: params[:id].split(",")).order("name ASC")
|
14
|
+
else
|
15
|
+
@teams = Hubstats::Team.where(hubstats: true).with_all_metrics(@start_date, @end_date)
|
16
|
+
.with_id(params[:teams])
|
17
|
+
.custom_order(params[:order])
|
18
|
+
.paginate(:page => params[:page], :per_page => 15)
|
19
|
+
end
|
20
|
+
|
21
|
+
respond_to do |format|
|
22
|
+
format.html # index.html.erb
|
23
|
+
format.json { render :json => @teams}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Public - Will show the specific team along with the basic stats about that team, including all users
|
28
|
+
# and merged PRs a team member has done within the @start_date and @end_date.
|
29
|
+
#
|
30
|
+
# Returns - the data of the specific team
|
31
|
+
def show
|
32
|
+
@team = Hubstats::Team.where(id: params[:id]).first
|
33
|
+
@pull_requests = Hubstats::PullRequest.belonging_to_team(@team.id).merged_in_date_range(@start_date, @end_date).order("updated_at DESC").limit(20)
|
34
|
+
@pull_count = Hubstats::PullRequest.belonging_to_team(@team.id).merged_in_date_range(@start_date, @end_date).count(:all)
|
35
|
+
@users = @team.users.where("login NOT IN (?)", Hubstats.config.github_config["ignore_users_list"]).order("login ASC")
|
36
|
+
@user_count = @users.length
|
37
|
+
@comment_count = Hubstats::Comment.belonging_to_team(@users.pluck(:id)).created_in_date_range(@start_date, @end_date).count(:all)
|
38
|
+
@net_additions = Hubstats::PullRequest.merged_in_date_range(@start_date, @end_date).belonging_to_team(@team.id).sum(:additions).to_i -
|
39
|
+
Hubstats::PullRequest.merged_in_date_range(@start_date, @end_date).belonging_to_team(@team.id).sum(:deletions).to_i
|
40
|
+
@additions = Hubstats::PullRequest.merged_in_date_range(@start_date, @end_date).belonging_to_team(@team.id).average(:additions)
|
41
|
+
@deletions = Hubstats::PullRequest.merged_in_date_range(@start_date, @end_date).belonging_to_team(@team.id).average(:deletions)
|
42
|
+
|
43
|
+
stats
|
44
|
+
end
|
45
|
+
|
46
|
+
# Public - Shows the basic stats for the teams show page.
|
47
|
+
#
|
48
|
+
# Returns - the data in two hashes
|
49
|
+
def stats
|
50
|
+
@additions ||= 0
|
51
|
+
@deletions ||= 0
|
52
|
+
@stats_basics = {
|
53
|
+
pull_count: @pull_count,
|
54
|
+
user_count: @user_count,
|
55
|
+
comment_count: @comment_count,
|
56
|
+
avg_additions: @additions.round.to_i,
|
57
|
+
avg_deletions: @deletions.round.to_i,
|
58
|
+
net_additions: @net_additions
|
59
|
+
}
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -14,14 +14,14 @@ module Hubstats
|
|
14
14
|
@users = Hubstats::User.where(id: params[:id].split(",")).order("login ASC")
|
15
15
|
elsif params[:repos]
|
16
16
|
@users = Hubstats::User.only_active.with_contributions(@start_date, @end_date, params[:repos])
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
.with_id(params[:users])
|
18
|
+
.custom_order(params[:order])
|
19
|
+
.paginate(:page => params[:page], :per_page => 15)
|
20
20
|
else
|
21
21
|
@users = Hubstats::User.only_active.with_all_metrics(@start_date, @end_date)
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
.with_id(params[:users])
|
23
|
+
.custom_order(params[:order])
|
24
|
+
.paginate(:page => params[:page], :per_page => 15)
|
25
25
|
end
|
26
26
|
|
27
27
|
respond_to do |format|
|
@@ -49,8 +49,9 @@ module Hubstats
|
|
49
49
|
stats
|
50
50
|
end
|
51
51
|
|
52
|
-
# stats
|
53
|
-
#
|
52
|
+
# Public - Shows the basic stats for the user show page.
|
53
|
+
#
|
54
|
+
# Returns - the data in a hash
|
54
55
|
def stats
|
55
56
|
@additions ||= 0
|
56
57
|
@deletions ||= 0
|