From ab5795a645da0c6d132529624bf2a4a566f33c6a Mon Sep 17 00:00:00 2001 From: Tomasz Gieniusz Date: Sun, 21 Oct 2012 17:34:05 +0200 Subject: [PATCH] authors charts --- config/locales/en.yml | 7 +++ lib/git_stats/git_data/author.rb | 24 ++++++++ lib/git_stats/git_data/repo.rb | 8 ++- .../stats_view/charts/authors_charts.rb | 33 +++++++--- lib/git_stats/stats_view/charts/chart.rb | 12 ++++ lib/git_stats/stats_view/charts/charts.rb | 4 +- .../stats_view/charts/repo_charts.rb | 4 +- templates/authors.haml | 60 ++++++++++++++++++- 8 files changed, 136 insertions(+), 16 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 73fb1c0ad..d40040d3f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -34,3 +34,10 @@ en: activity: Activity activity_by_date: Activity by date commits_by_date: Commits by date + lines_added_by_author: Lines added by author + lines_deleted_by_author: Lines deleted by author + best_authors_shown: best authors shown + commits_count_by_author: Commits count by author + commits_sum_by_author_by_date: Commits sum by author by date + lines_added_by_author_by_date: Lines added by author by date + lines_deleted_by_author_by_date: Lines deleted by author by date \ No newline at end of file diff --git a/lib/git_stats/git_data/author.rb b/lib/git_stats/git_data/author.rb index 25ad03472..e6967f39b 100644 --- a/lib/git_stats/git_data/author.rb +++ b/lib/git_stats/git_data/author.rb @@ -19,6 +19,30 @@ module GitStats short_stats.map(&:deletions).sum end + def commits_sum_by_date + sum = 0 + commits.map { |commit| + sum += 1 + [commit.date, sum] + } + end + + def lines_added_by_date + sum = 0 + commits.map { |commit| + sum += commit.short_stat.insertions + [commit.date, sum] + } + end + + def lines_deleted_by_date + sum = 0 + commits.map { |commit| + sum += commit.short_stat.deletions + [commit.date, sum] + } + end + def short_stats commits.map(&:short_stat) end diff --git a/lib/git_stats/git_data/repo.rb b/lib/git_stats/git_data/repo.rb index 4dd94a238..32c7c25d7 100644 --- a/lib/git_stats/git_data/repo.rb +++ b/lib/git_stats/git_data/repo.rb @@ -37,12 +37,16 @@ module GitStats commits.map(&:date).minmax end + def commits_count_by_author + Hash[authors.map { |author| [author, author.commits.size] }.sort_by { |author, commits| -commits }[0..5]] + end + def lines_added_by_author - Hash[authors.map { |author| [author, author.lines_added] }] + Hash[authors.map { |author| [author, author.lines_added] }.sort_by { |author, lines| -lines }[0..5]] end def lines_deleted_by_author - Hash[authors.map { |author| [author, author.lines_deleted] }] + Hash[authors.map { |author| [author, author.lines_deleted] }.sort_by { |author, lines| -lines }[0..5]] end def files_count_by_date diff --git a/lib/git_stats/stats_view/charts/authors_charts.rb b/lib/git_stats/stats_view/charts/authors_charts.rb index 6b45c91c7..791ac749a 100644 --- a/lib/git_stats/stats_view/charts/authors_charts.rb +++ b/lib/git_stats/stats_view/charts/authors_charts.rb @@ -6,17 +6,36 @@ module GitStats @authors = authors end - def by_authors_wday + def commits_sum_by_author_by_date Chart.new do |f| - f.multiple_column_chart( - title: :by_authors_wday.t, - y_text: :commits.t, - data_x: Date::ABBR_DAYNAMES, - data_y: @authors.map { |author| {name: author.email, data: author.activity.by_wday.to_key_indexed_array} } + f.multi_date_chart( + data: @authors.sort_by { |author| -author.commits.size }[0..5].map { |author| {name: author.email, data: author.commits_sum_by_date} }, + title: :lines_by_date.t, + y_text: :lines.t ) - f.default_legend end end + + def lines_added_by_author_by_date + Chart.new do |f| + f.multi_date_chart( + data: @authors.sort_by { |author| -author.lines_added }[0..5].map { |author| {name: author.email, data: author.lines_added_by_date} }, + title: :lines_by_date.t, + y_text: :lines.t + ) + end + end + + def lines_deleted_by_author_by_date + Chart.new do |f| + f.multi_date_chart( + data: @authors.sort_by { |author| -author.lines_deleted }[0..5].map { |author| {name: author.email, data: author.lines_deleted_by_date} }, + title: :lines_by_date.t, + y_text: :lines.t + ) + end + end + end end end diff --git a/lib/git_stats/stats_view/charts/chart.rb b/lib/git_stats/stats_view/charts/chart.rb index 84cb1fa4b..fba680b33 100644 --- a/lib/git_stats/stats_view/charts/chart.rb +++ b/lib/git_stats/stats_view/charts/chart.rb @@ -42,6 +42,18 @@ module GitStats ) end + def multi_date_chart(params) + common_options(params) + rangeSelector(selected: 1) + params[:data].each do |s| + series( + name: s[:name], + type: "spline", + data: s[:data].map { |date, value| [date.to_i * 1000, value] } + ) + end + end + def date_column_chart(params) date_chart(params) data[0][:type] = 'column' diff --git a/lib/git_stats/stats_view/charts/charts.rb b/lib/git_stats/stats_view/charts/charts.rb index 003f00d9f..cdc653151 100644 --- a/lib/git_stats/stats_view/charts/charts.rb +++ b/lib/git_stats/stats_view/charts/charts.rb @@ -3,9 +3,9 @@ module GitStats module Charts class All delegate :files_by_extension, :lines_by_extension, :files_by_date, :lines_by_date, - :lines_added_by_author, :lines_deleted_by_author, to: :repo_charts + :commits_count_by_author, :lines_added_by_author, :lines_deleted_by_author, to: :repo_charts - delegate :by_authors_wday, to: :authors_charts + delegate :commits_sum_by_author_by_date, :lines_added_by_author_by_date, :lines_deleted_by_author_by_date, to: :authors_charts delegate :activity_by_date, :activity_by_hour, :activity_by_wday, :activity_by_month, :activity_by_year, to: :activity_charts diff --git a/lib/git_stats/stats_view/charts/repo_charts.rb b/lib/git_stats/stats_view/charts/repo_charts.rb index 95ddcabf2..c6090a4a8 100644 --- a/lib/git_stats/stats_view/charts/repo_charts.rb +++ b/lib/git_stats/stats_view/charts/repo_charts.rb @@ -46,13 +46,13 @@ module GitStats end end - [:lines_added_by_author, :lines_deleted_by_author].each do |method| + [:commits_count_by_author, :lines_added_by_author, :lines_deleted_by_author].each do |method| define_method method do Chart.new do |f| f.column_hash_chart( data: Hash[@repo.send(method).map { |a, l| [a.email, l] }], title: method.t, - y_text: :lines.t + y_text: method.to_s.split('_').first.to_sym ) end end diff --git a/templates/authors.haml b/templates/authors.haml index 7ac083505..9666ec4b8 100644 --- a/templates/authors.haml +++ b/templates/authors.haml @@ -1,3 +1,57 @@ -= high_chart("by_authors_wday", charts.by_authors_wday) -= high_chart("lines_added_by_author", charts.lines_added_by_author) -= high_chart("lines_deleted_by_author", charts.lines_deleted_by_author) +.tabbable.tabs-left + %ul.nav.nav-tabs + %li.active + %a{:href => '#commits_count_by_author', 'data-toogle' => 'tab'}= :commits_count_by_author.t + %li + %a{:href => '#lines_added_by_author', 'data-toogle' => 'tab'}= :lines_added_by_author.t + %li + %a{:href => '#lines_deleted_by_author', 'data-toogle' => 'tab'}= :lines_deleted_by_author.t + %li + %a{:href => '#commits_sum_by_author_by_date', 'data-toogle' => 'tab'}= :commits_sum_by_author_by_date.t + %li + %a{:href => '#lines_added_by_author_by_date', 'data-toogle' => 'tab'}= :lines_added_by_author_by_date.t + %li + %a{:href => '#lines_deleted_by_author_by_date', 'data-toogle' => 'tab'}= :lines_deleted_by_author_by_date.t + + .tab-content + .tab-pane.active{id: 'commits_count_by_author'} + .page-header + %h1.pagination-centered= :commits_count_by_author.t + = high_chart("charts.commits_count_by_author", charts.commits_count_by_author) + %small + %center= "5 #{:best_authors_shown.t}" + + .tab-pane{id: 'lines_added_by_author'} + .page-header + %h1.pagination-centered= :lines_added_by_author.t + = high_chart("charts.lines_added_by_author", charts.lines_added_by_author) + %small + %center= "5 #{:best_authors_shown.t}" + + .tab-pane{id: 'lines_deleted_by_author'} + .page-header + %h1.pagination-centered= :lines_deleted_by_author.t + = high_chart("charts.lines_deleted_by_author", charts.lines_deleted_by_author) + %small + %center= "5 #{:best_authors_shown.t}" + + .tab-pane{id: 'lines_added_by_author_by_date'} + .page-header + %h1.pagination-centered= :lines_added_by_author_by_date.t + = high_stock("charts.lines_added_by_author_by_date", charts.lines_added_by_author_by_date) + %small + %center= "5 #{:best_authors_shown.t}" + + .tab-pane{id: 'commits_sum_by_author_by_date'} + .page-header + %h1.pagination-centered= :commits_sum_by_author_by_date.t + = high_stock("charts.commits_sum_by_author_by_date", charts.commits_sum_by_author_by_date) + %small + %center= "5 #{:best_authors_shown.t}" + + .tab-pane{id: 'lines_deleted_by_author_by_date'} + .page-header + %h1.pagination-centered= :lines_deleted_by_author_by_date.t + = high_stock("charts.lines_deleted_by_author_by_date", charts.lines_deleted_by_author_by_date) + %small + %center= "5 #{:best_authors_shown.t}"