From b5da25d52c3938a4d1fa18960962384cbbbc8166 Mon Sep 17 00:00:00 2001 From: Tomasz Gieniusz Date: Fri, 9 Aug 2013 15:18:31 +0200 Subject: [PATCH] [closes #16] days without commits are not ommited on date charts anymore --- lib/git_stats/core_extensions/hash.rb | 15 +++++++++++++++ lib/git_stats/git_data/repo.rb | 10 +++++----- lib/git_stats/stats_view/charts/chart.rb | 3 ++- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/lib/git_stats/core_extensions/hash.rb b/lib/git_stats/core_extensions/hash.rb index 13b8e2027..a5874a312 100644 --- a/lib/git_stats/core_extensions/hash.rb +++ b/lib/git_stats/core_extensions/hash.rb @@ -6,4 +6,19 @@ class Hash default = params[:default] inject(Array.new(min_size, default)) { |acc, (k, v)| acc[k] = v; acc }.map { |e| e || default } end + + def fill_empty_days!(params = {:aggregated => false}) + return self if self.empty? + + days_with_data = self.keys.map(&:to_date).sort.uniq + prev = 0 + days_with_data.first.upto(days_with_data.last) do |day| + if days_with_data.include? day + prev = self[day] + else + self[day] = params[:aggregated] ? prev : 0 + end + end + self + end end diff --git a/lib/git_stats/git_data/repo.rb b/lib/git_stats/git_data/repo.rb index 6b61381c8..e81d479d0 100644 --- a/lib/git_stats/git_data/repo.rb +++ b/lib/git_stats/git_data/repo.rb @@ -50,17 +50,17 @@ module GitStats def files_count_by_date @files_count_each_day ||= Hash[commits.map { |commit| - [commit.date, commit.files_count] - }] + [commit.date.to_date, commit.files_count] + }].fill_empty_days!(aggregated: true) end def lines_count_by_date sum = 0 - Hash[commits.map { |commit| + @lines_count_each_day ||= Hash[commits.map { |commit| sum += commit.short_stat.insertions sum -= commit.short_stat.deletions - [commit.date, sum] - }] + [commit.date.to_date, sum] + }].fill_empty_days!(aggregated: true) end def last_commit diff --git a/lib/git_stats/stats_view/charts/chart.rb b/lib/git_stats/stats_view/charts/chart.rb index 47fd6164e..8d0ed95b4 100644 --- a/lib/git_stats/stats_view/charts/chart.rb +++ b/lib/git_stats/stats_view/charts/chart.rb @@ -104,7 +104,7 @@ module GitStats series( name: params[:name], type: "spline", - data: params[:data].map { |date, value| [date.to_i * 1000, value] } + data: Hash[params[:data]].fill_empty_days!.map { |date, value| [date.to_datetime.to_i * 1000, value] }.sort_by { |d| d[0] } ) end @@ -113,6 +113,7 @@ module GitStats type "column" x_categories params[:data_x] end + end end end