hubstats 0.4.4 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -5,6 +5,7 @@ module Hubstats
|
|
5
5
|
scope :created_in_date_range, lambda {|start_date, end_date| where("hubstats_comments.created_at BETWEEN ? AND ?", start_date, end_date)}
|
6
6
|
scope :belonging_to_pull_request, lambda {|pull_request_id| where(pull_request_id: pull_request_id)}
|
7
7
|
scope :belonging_to_user, lambda {|user_id| where(user_id: user_id)}
|
8
|
+
scope :belonging_to_team, lambda {|user_id| where(user_id: user_id.split(',')) if user_id}
|
8
9
|
scope :belonging_to_repo, lambda {|repo_id| where(repo_id: repo_id)}
|
9
10
|
|
10
11
|
# Public - Gets the number of PRs that a user commented on that were not their own PR.
|
@@ -6,10 +6,13 @@ module Hubstats
|
|
6
6
|
scope :updated_in_date_range, lambda {|start_date, end_date| where("hubstats_pull_requests.updated_at BETWEEN ? AND ?", start_date, end_date)}
|
7
7
|
scope :created_in_date_range, lambda {|start_date, end_date| where("hubstats_pull_requests.created_at BETWEEN ? AND ?", start_date, end_date)}
|
8
8
|
scope :merged_in_date_range, lambda {|start_date, end_date| where("hubstats_pull_requests.merged").where("hubstats_pull_requests.merged_at BETWEEN ? AND ?", start_date, end_date)}
|
9
|
+
scope :created_since, lambda {|days| where("hubstats_pull_requests.created_at > ?", Date.today - days)}
|
9
10
|
scope :belonging_to_repo, lambda {|repo_id| where(repo_id: repo_id)}
|
11
|
+
scope :belonging_to_team, lambda {|team_id| where(team_id: team_id)}
|
10
12
|
scope :belonging_to_user, lambda {|user_id| where(user_id: user_id)}
|
11
13
|
scope :belonging_to_deploy, lambda {|deploy_id| where(deploy_id: deploy_id)}
|
12
14
|
scope :belonging_to_repos, lambda {|repo_id| where(repo_id: repo_id.split(',')) if repo_id}
|
15
|
+
scope :belonging_to_teams, lambda {|team_id| where(team_id: team_id.split(',')) if team_id}
|
13
16
|
scope :belonging_to_users, lambda {|user_id| where(user_id: user_id.split(',')) if user_id}
|
14
17
|
scope :group, lambda {|group| group_by(:repo_id) if group }
|
15
18
|
scope :with_state, lambda {|state| (where(state: state) unless state == 'all') if state}
|
@@ -22,15 +25,18 @@ module Hubstats
|
|
22
25
|
:review_comments_url, :review_comment_url, :comments_url, :statuses_url, :number,
|
23
26
|
:state, :title, :body, :created_at, :updated_at, :closed_at, :merged_at,
|
24
27
|
:merge_commit_sha, :merged, :mergeable, :comments, :commits, :additions,
|
25
|
-
:deletions, :changed_files, :user_id, :repo_id, :merged_by
|
28
|
+
:deletions, :changed_files, :user_id, :repo_id, :merged_by, :team_id
|
26
29
|
|
27
30
|
belongs_to :user
|
28
31
|
belongs_to :repo
|
29
32
|
belongs_to :deploy
|
33
|
+
belongs_to :team
|
30
34
|
has_and_belongs_to_many :labels, :join_table => "hubstats_labels_pull_requests"
|
31
35
|
|
32
36
|
# Public - Makes a new pull request from a GitHub webhook. Finds user_id and repo_id based on users and repos
|
33
|
-
# that are already in the Hubstats database.
|
37
|
+
# that are already in the Hubstats database. Updates the user_id of a deploy if the pull request has been merged in a deploy.
|
38
|
+
# If the user who makes the PR has a team, then it will update the team_id of the PR to match the team the user
|
39
|
+
# belongs to.
|
34
40
|
#
|
35
41
|
# github_pull - the info that is from Github about the new or updated pull request
|
36
42
|
#
|
@@ -58,18 +64,22 @@ module Hubstats
|
|
58
64
|
end
|
59
65
|
end
|
60
66
|
|
67
|
+
if user.team && user.team.id
|
68
|
+
pull_data[:team_id] = user.team.id
|
69
|
+
end
|
70
|
+
|
61
71
|
return pull if pull.update_attributes(pull_data)
|
62
72
|
Rails.logger.warn pull.errors.inspect
|
63
73
|
end
|
64
74
|
|
65
|
-
# Public -
|
75
|
+
# Public - Takes days, a number, and updates all pull requests' team_ids that were created since that many days ago
|
66
76
|
#
|
67
|
-
#
|
77
|
+
# days - the amount of days ago that we wish to grab the number of pull requests since
|
68
78
|
#
|
69
|
-
# Returns -
|
70
|
-
def
|
71
|
-
|
72
|
-
|
79
|
+
# Returns - nothing
|
80
|
+
def self.update_teams_in_pulls(days)
|
81
|
+
pulls = created_since(days)
|
82
|
+
pulls.each {|pull| pull.assign_team_from_user}
|
73
83
|
end
|
74
84
|
|
75
85
|
# Public - Filters all of the pull requests between start_date and end_date that are the given state
|
@@ -84,6 +94,7 @@ module Hubstats
|
|
84
94
|
filter_based_on_date_range(start_date, end_date, params[:state])
|
85
95
|
.belonging_to_users(params[:users])
|
86
96
|
.belonging_to_repos(params[:repos])
|
97
|
+
.belonging_to_teams(params[:teams])
|
87
98
|
end
|
88
99
|
|
89
100
|
# Public - Finds all of the PRs with the current state, and then filters to ones that have been updated in
|
@@ -130,5 +141,26 @@ module Hubstats
|
|
130
141
|
scoped
|
131
142
|
end
|
132
143
|
end
|
144
|
+
|
145
|
+
# Public - Assigns a team to a pull request based on the user's team
|
146
|
+
#
|
147
|
+
# Returns - nothing
|
148
|
+
def assign_team_from_user
|
149
|
+
user = Hubstats::User.find(self.user_id)
|
150
|
+
if user.team && user.team.id
|
151
|
+
self.team_id = user.team.id
|
152
|
+
self.save!
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
# Public - Adds any labels to the labels database if the labels passed in aren't already there.
|
157
|
+
#
|
158
|
+
# labels - the labels to be added to the db
|
159
|
+
#
|
160
|
+
# Returns - the new labels
|
161
|
+
def add_labels(labels)
|
162
|
+
labels.map!{|label| Hubstats::Label.first_or_create(label) }
|
163
|
+
self.labels = labels
|
164
|
+
end
|
133
165
|
end
|
134
166
|
end
|
data/app/models/hubstats/repo.rb
CHANGED
@@ -0,0 +1,159 @@
|
|
1
|
+
module Hubstats
|
2
|
+
class Team < ActiveRecord::Base
|
3
|
+
|
4
|
+
scope :with_id, lambda {|team_id| where(id: team_id.split(',')) if team_id}
|
5
|
+
|
6
|
+
# Public - Counts all of the users that are a part of the selected team.
|
7
|
+
#
|
8
|
+
# start_date - the start of the date range
|
9
|
+
# end_date - the end of the date range
|
10
|
+
#
|
11
|
+
# Returns - the count of users
|
12
|
+
scope :users_count, lambda {|start_date, end_date|
|
13
|
+
select("hubstats_teams.id as team_id")
|
14
|
+
.select("COUNT(DISTINCT hubstats_teams_users.user_id) AS user_count")
|
15
|
+
.where("hubstats_users.login NOT IN (?)", Hubstats.config.github_config["ignore_users_list"])
|
16
|
+
.joins(:users)
|
17
|
+
.group("hubstats_teams.id")
|
18
|
+
}
|
19
|
+
|
20
|
+
# Public - Counts all of the comments a selected team's members have written that occurred between the start_date and end_date.
|
21
|
+
#
|
22
|
+
# start_date - the start of the date range
|
23
|
+
# end_date - the end of the data range
|
24
|
+
# user_id_array - an array of all of the user ids in selected team
|
25
|
+
#
|
26
|
+
# Returns - count of comments
|
27
|
+
scope :comments_count, lambda {|start_date, end_date|
|
28
|
+
select("IFNULL(COUNT(DISTINCT hubstats_comments.id),0) AS comment_count, hubstats_teams.id as team_id")
|
29
|
+
.joins("LEFT OUTER JOIN hubstats_teams_users ON hubstats_teams.id = hubstats_teams_users.team_id")
|
30
|
+
.joins(sanitize_sql_array(["LEFT JOIN hubstats_comments ON (hubstats_comments.user_id = hubstats_teams_users.user_id) AND (hubstats_comments.created_at BETWEEN ? AND ?)", start_date, end_date]))
|
31
|
+
.group("hubstats_teams.id")
|
32
|
+
}
|
33
|
+
|
34
|
+
# Public - Counts all of the repos a selected team's members have made PRs or comments on.
|
35
|
+
#
|
36
|
+
# start_date - the start of the date range
|
37
|
+
# end_date - the end of the data range
|
38
|
+
#
|
39
|
+
# Returns - count of repos
|
40
|
+
scope :repos_count, lambda {|start_date, end_date|
|
41
|
+
select("hubstats_teams.id as team_id")
|
42
|
+
.select("IFNULL(COUNT(DISTINCT hubstats_pull_requests.repo_id),0) AS repo_count")
|
43
|
+
.joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.team_id = hubstats_teams.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND hubstats_pull_requests.merged = '1'", start_date, end_date]))
|
44
|
+
.group("hubstats_teams.id")
|
45
|
+
}
|
46
|
+
|
47
|
+
# Public - Counts all of the merged pull requests for selected team's users that occurred between the start_date and end_date.
|
48
|
+
#
|
49
|
+
# start_date - the start of the date range
|
50
|
+
# end_date - the end of the data range
|
51
|
+
#
|
52
|
+
# Returns - count of pull requests
|
53
|
+
scope :pull_requests_count, lambda {|start_date, end_date|
|
54
|
+
select("hubstats_teams.id as team_id")
|
55
|
+
.select("IFNULL(COUNT(DISTINCT hubstats_pull_requests.id),0) AS pull_request_count")
|
56
|
+
.joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.team_id = hubstats_teams.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND hubstats_pull_requests.merged = '1'", start_date, end_date]))
|
57
|
+
.group("hubstats_teams.id")
|
58
|
+
}
|
59
|
+
|
60
|
+
# Public - Counts all of the addtiions and deletions made from PRs by a member of the selected team that have been merged between the start_date
|
61
|
+
# and the end_date.
|
62
|
+
#
|
63
|
+
# start_date - the start of the date range
|
64
|
+
# end_date - the end of the data range
|
65
|
+
#
|
66
|
+
# Returns - the additions and deletions
|
67
|
+
scope :net_additions_count, lambda {|start_date, end_date|
|
68
|
+
select("hubstats_teams.id as team_id")
|
69
|
+
.select("SUM(IFNULL(hubstats_pull_requests.additions, 0)) AS additions")
|
70
|
+
.select("SUM(IFNULL(hubstats_pull_requests.deletions, 0)) AS deletions")
|
71
|
+
.joins(sanitize_sql_array(["LEFT JOIN hubstats_pull_requests ON hubstats_pull_requests.team_id = hubstats_teams.id AND (hubstats_pull_requests.merged_at BETWEEN ? AND ?) AND hubstats_pull_requests.merged = '1'", start_date, end_date]))
|
72
|
+
.group("hubstats_teams.id")
|
73
|
+
}
|
74
|
+
|
75
|
+
# Public - Joins all of the metrics together for selected team: net additions, comments, repos, pull requests, and users.
|
76
|
+
#
|
77
|
+
# start_date - the start of the date range
|
78
|
+
# end_date - the end of the data range
|
79
|
+
#
|
80
|
+
# Returns - all of the stats about the team
|
81
|
+
scope :with_all_metrics, lambda {|start_date, end_date|
|
82
|
+
select("hubstats_teams.*, user_count, pull_request_count, comment_count, repo_count,additions, deletions")
|
83
|
+
.joins("LEFT JOIN (#{net_additions_count(start_date, end_date).to_sql}) AS net_additions ON net_additions.team_id = hubstats_teams.id")
|
84
|
+
.joins("LEFT JOIN (#{pull_requests_count(start_date, end_date).to_sql}) AS pull_requests ON pull_requests.team_id = hubstats_teams.id")
|
85
|
+
.joins("LEFT JOIN (#{comments_count(start_date, end_date).to_sql}) AS comments ON comments.team_id = hubstats_teams.id")
|
86
|
+
.joins("LEFT JOIN (#{repos_count(start_date, end_date).to_sql}) AS repos ON repos.team_id = hubstats_teams.id")
|
87
|
+
.joins("LEFT JOIN (#{users_count(start_date, end_date).to_sql}) AS users ON users.team_id = hubstats_teams.id")
|
88
|
+
.group("hubstats_teams.id")
|
89
|
+
}
|
90
|
+
|
91
|
+
attr_accessible :name, :hubstats
|
92
|
+
has_and_belongs_to_many :users, :join_table => 'hubstats_teams_users', :uniq => true
|
93
|
+
|
94
|
+
# Public - Checks if the team is currently existing, and if it isn't, then makes a new team with
|
95
|
+
# the specifications that are passed in. We are assuming that if it is not already existent,
|
96
|
+
# then we probably don't really care about the team, so our hubstats boolean will be set to false.
|
97
|
+
#
|
98
|
+
# github_team - the info that's passed in about the new or updated team
|
99
|
+
#
|
100
|
+
# Returns - the team
|
101
|
+
def self.create_or_update(github_team)
|
102
|
+
github_team = github_team.to_h.with_indifferent_access if github_team.respond_to? :to_h
|
103
|
+
|
104
|
+
team_data = github_team.slice(*Hubstats::Team.column_names.map(&:to_sym))
|
105
|
+
team = where(:id => team_data[:id]).first_or_create(team_data)
|
106
|
+
|
107
|
+
team_data[:hubstats] = true
|
108
|
+
|
109
|
+
return team if team.update_attributes(team_data)
|
110
|
+
Rails.logger.warn team.errors.inspect
|
111
|
+
end
|
112
|
+
|
113
|
+
# Public - Adds or removes a user from a team
|
114
|
+
#
|
115
|
+
# team - a hubstats team that we wish to edit the users of
|
116
|
+
# user - a hubstats user that we wish to remove or add to the team
|
117
|
+
# action - whether the user is to be removed or added (string)
|
118
|
+
#
|
119
|
+
# Returns - nothing
|
120
|
+
def self.update_users_in_team(team, user, action)
|
121
|
+
if action == "added"
|
122
|
+
team.users << user
|
123
|
+
elsif action == "removed"
|
124
|
+
team.users.delete(user)
|
125
|
+
end
|
126
|
+
team.save!
|
127
|
+
end
|
128
|
+
|
129
|
+
# Public - Designed so that the list of teams can be ordered based on users, pulls, comments, net additions, or name.
|
130
|
+
# if none of these are selected, then the default is to order by pull request count in descending order.
|
131
|
+
#
|
132
|
+
# order_params - the param of what the teams should be sorted by
|
133
|
+
#
|
134
|
+
# Returns - the team data ordered
|
135
|
+
def self.custom_order(order_params)
|
136
|
+
if order_params
|
137
|
+
order = order_params.include?('asc') ? "ASC" : "DESC"
|
138
|
+
case order_params.split('-').first
|
139
|
+
when 'usercount'
|
140
|
+
order("user_count #{order}")
|
141
|
+
when 'pulls'
|
142
|
+
order("pull_request_count #{order}")
|
143
|
+
when 'comments'
|
144
|
+
order("comment_count #{order}")
|
145
|
+
when 'netadditions'
|
146
|
+
order("additions - deletions #{order}")
|
147
|
+
when 'repocount'
|
148
|
+
order("repo_count #{order}")
|
149
|
+
when 'name'
|
150
|
+
order("name #{order}")
|
151
|
+
else
|
152
|
+
order("pull_request_count #{order}")
|
153
|
+
end
|
154
|
+
else
|
155
|
+
order("pull_request_count DESC")
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
data/app/models/hubstats/user.rb
CHANGED
@@ -144,7 +144,7 @@ module Hubstats
|
|
144
144
|
.group("hubstats_users.id")
|
145
145
|
}
|
146
146
|
|
147
|
-
# Public - Joins all of the metrics together for selected
|
147
|
+
# Public - Joins all of the metrics together for selected user: average additions and deletions, comments, pull requests, and deploys.
|
148
148
|
#
|
149
149
|
# start_date - the start of the date range
|
150
150
|
# end_date - the end of the data range
|
@@ -169,6 +169,7 @@ module Hubstats
|
|
169
169
|
has_many :repos, :class_name => "Repo"
|
170
170
|
has_many :pull_requests
|
171
171
|
has_many :deploys
|
172
|
+
has_and_belongs_to_many :teams, :join_table => 'hubstats_teams_users', :uniq => true
|
172
173
|
|
173
174
|
# Public - Creates a new user form a GitHub webhook.
|
174
175
|
#
|
@@ -231,6 +232,14 @@ module Hubstats
|
|
231
232
|
end
|
232
233
|
end
|
233
234
|
|
235
|
+
# Public - Gets the first team where the user is belongs to and where hubstats bool is true.
|
236
|
+
#
|
237
|
+
# Returns - the first team that the user belongs to where hubstats bool is true, if nothing
|
238
|
+
# meets these qualifications, nil is returned
|
239
|
+
def team
|
240
|
+
teams.where(hubstats: true).first
|
241
|
+
end
|
242
|
+
|
234
243
|
# Public - Designed to make a path for the show page when a repository is selected.
|
235
244
|
#
|
236
245
|
# Returns - the show page of self.name
|
@@ -7,8 +7,6 @@
|
|
7
7
|
<%= @deploy.git_revision.titleize %>
|
8
8
|
</h1>
|
9
9
|
|
10
|
-
<br>
|
11
|
-
|
12
10
|
<!-- Show the date/time that the deploy was deployed -->
|
13
11
|
<h4 class="text-center">
|
14
12
|
Deployed at: <%= @deploy.deployed_at %>
|
@@ -21,12 +19,11 @@
|
|
21
19
|
<!--Show all of the pull requests in a "condensed" view -->
|
22
20
|
<div class="col col-lg-8 col-lg-offset-2">
|
23
21
|
<div class="row">
|
24
|
-
<h4> Pull Requests </h4>
|
22
|
+
<h4> Merged Pull Requests </h4>
|
25
23
|
<%= render 'hubstats/tables/pulls-condensed' %>
|
26
24
|
<% if @pull_request_count > 20 %>
|
27
25
|
<p class="pull-right"><%= link_to "View All", pulls_path(:deploys => @deploy.id) %></p>
|
28
26
|
<% end %>
|
29
27
|
</div>
|
30
28
|
</div>
|
31
|
-
|
32
29
|
</div>
|
@@ -2,11 +2,13 @@
|
|
2
2
|
<hr>
|
3
3
|
<div class="row">
|
4
4
|
<div class="col-lg-3 col-md-3 col-sm-3">
|
5
|
+
<!-- Show the Sport Ngin copyright information, change if using a different copyright -->
|
5
6
|
<div class="footer-text">
|
6
7
|
© 2015 Sport Ngin
|
7
8
|
</div>
|
8
9
|
</div>
|
9
10
|
<div class="col-lg-6 col-md-6 col-sm-6">
|
11
|
+
<!-- Show the Hubstats name in the footer -->
|
10
12
|
<div class="footer-main-text">
|
11
13
|
Hubstats
|
12
14
|
<br>
|
@@ -14,6 +16,7 @@
|
|
14
16
|
</div>
|
15
17
|
</div>
|
16
18
|
<div class="col-lg-3 col-md-3 col-sm-3">
|
19
|
+
<!-- Have a link to the Hubstats source code on github, change if wishing to connect to a different repository -->
|
17
20
|
<div class="footer-text" align="right">
|
18
21
|
<%= link_to("Source Code", "https://github.com/sportngin/hubstats") %>
|
19
22
|
</div>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<nav class="navbar navbar-default" role="navigation">
|
3
3
|
<div class="container-fluid">
|
4
4
|
|
5
|
-
<!-- Show the Hubstats name in navbar along with a link to the PR page -->
|
5
|
+
<!-- Show the Hubstats name in navbar along with a link to the PR page that shows current open and deployable PRs sorted by repo -->
|
6
6
|
<div class="navbar-header">
|
7
7
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
8
8
|
<span class="sr-only">Toggle navigation</span>
|
@@ -11,12 +11,14 @@
|
|
11
11
|
<span class="icon-bar"></span>
|
12
12
|
</button>
|
13
13
|
<%= link_to "Hubstats", root_path(:state => "open", :label => "deployable", :group => "repo"),
|
14
|
-
{:data => {:repo_path => repos_path(), :user_path => users_path()}, :class => "navbar-brand title", :id =>"brand"}%>
|
14
|
+
{:data => {:repo_path => repos_path(), :user_path => users_path(), :team_path => teams_path()}, :class => "navbar-brand title", :id =>"brand"}%>
|
15
15
|
</div>
|
16
16
|
|
17
|
-
<!-- Show all of the pages in tab form -->
|
17
|
+
<!-- Show all of the pages (Teams, Deployments, Metrics, Pull Requests, Users) in tab form -->
|
18
18
|
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
19
19
|
<ul class="nav navbar-nav navbar-right">
|
20
|
+
<li class="<%='navbar-active' if params[:controller] == 'hubstats/teams'%>">
|
21
|
+
<%= link_to "Teams", teams_path%></li>
|
20
22
|
<li class="<%='navbar-active' if params[:controller] == 'hubstats/deploys'%>">
|
21
23
|
<%= link_to "Deployments", deploys_path%></li>
|
22
24
|
<li class="<%='navbar-active' if params[:controller] == 'hubstats/repos'%>">
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<div class="row single-team">
|
2
|
+
|
3
|
+
<!-- Show the team name and the date that it was last updated, with a link to the github team -->
|
4
|
+
<div class="team-info col-lg-2 col-md-2 col-sm-2 col-xs-8">
|
5
|
+
<h4>
|
6
|
+
<%= link_to team.name, team_path(team)%>
|
7
|
+
</h4>
|
8
|
+
<br>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<!-- Show all of the stats for the individual team -->
|
12
|
+
<div class="col-lg-2 col-md-2 col-sm-2">
|
13
|
+
<div class="text-center">
|
14
|
+
<span class="text-large"><%= team.user_count || 0 %></span> <!-- minus one for the user we're using as the access_token -->
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<div class="col-lg-2 col-md-2 col-sm-2">
|
18
|
+
<div class="text-center">
|
19
|
+
<span class="text-large"><%= team.pull_request_count %></span>
|
20
|
+
<span class="mega-octicon octicon-git-pull-request"></span>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<div class="col-lg-2 col-md-2 col-sm-2">
|
24
|
+
<div class="text-center">
|
25
|
+
<span class="text-large"><%= team.comment_count %></span>
|
26
|
+
<span class="mega-octicon octicon-comment"></span>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
<div class="col-lg-2 col-md-2 col-sm-2">
|
30
|
+
<div class="text-center">
|
31
|
+
<span class="text-large"><%= team.repo_count %></span>
|
32
|
+
<span class="mega-octicon octicon-repo"></span>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
<div class="col-lg-2 col-md-2 col-sm-2">
|
36
|
+
<div class="text-center">
|
37
|
+
<span class="text-large"><%= team.additions - team.deletions %></span>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
</div>
|
@@ -4,23 +4,24 @@
|
|
4
4
|
<div class="user-image-small col-lg-1 col-md-1 col-sm-1 col-xs-2" >
|
5
5
|
<img src= <%= user.avatar_url%> alt= <%= user.login %> >
|
6
6
|
</div>
|
7
|
-
<div class="user-info col-lg-
|
7
|
+
<div class="user-info col-lg-4 col-md-4 col-sm-4 col-xs-4">
|
8
8
|
<h4>
|
9
9
|
<%= link_to user.login, user_path(user) %>
|
10
10
|
</h4>
|
11
|
+
updated <%= distance_of_time_in_words(DateTime.now,user.updated_at) %> ago
|
11
12
|
</div>
|
12
13
|
|
13
14
|
<!-- Show the number of pull requests and comments -->
|
14
|
-
<div class="col-lg-3 col-
|
15
|
+
<div class="col-lg-3 col-md-3 col-sm-3 col-xs-3">
|
15
16
|
<div class="pull-right">
|
16
|
-
<span class="text-large"><%= user.
|
17
|
+
<span class="text-large"><%= Hubstats::PullRequest.belonging_to_user(user.id).merged_in_date_range(@start_date, @end_date).count(:all) %></span>
|
17
18
|
<span class="mega-octicon octicon-git-pull-request"></span>
|
18
19
|
</div>
|
19
20
|
</div>
|
20
21
|
<div class="col-lg-3 col-md-3 col-sm-3 col-xs-3">
|
21
22
|
<div class="pull-right">
|
22
|
-
<span class="text-large"><%= user.
|
23
|
-
<span class="mega-octicon octicon-
|
23
|
+
<span class="text-large"><%= Hubstats::Deploy.belonging_to_user(user.id).deployed_in_date_range(@start_date, @end_date).count(:all) %></span>
|
24
|
+
<span class="mega-octicon octicon-rocket"></span>
|
24
25
|
</div>
|
25
26
|
</div>
|
26
27
|
<div class="col-lg-1 col-md-1 col-sm-1 col-xs-1">
|