require 'gruff' module Babygitter module GraphOutput THEME = { # Declare a custom theme :colors => %w(orange silver yellow pink purple green white red #cccccc), # colors can be described on hex values (#0f0f0f) :font_color => 'white', :marker_color => 'white', # The horizontal lines color :background_colors => %w(black grey) # you can use instead: :background_image => ‘some_image.png’ } SMALL_SIZE ="183x184" def create_histograph_of_commits_by_author_for_branch(branch) large_file_path = create_large_histograph_of_commits_by_author_for_branch(branch) small_file_path = create_small_histograph_of_commits_by_author_for_branch(branch) "" end def create_large_histograph_of_commits_by_author_for_branch(branch) g = Gruff::Bar.new('800x400') # Define a custom size g.sort = false # Do NOT sort data based on values #g.y_axis_increment = 1 # Points shown on the Y axis g.legend_font_size = 12 # Legend font size g.title_font_size = 22 # Title font size g.theme = THEME g.title = 'Commits by Author' for author in branch.authors g.data("#{author.name}", [author.total_committed]) end image_path = "babygitter_images/large_#{branch.name.gsub(/\//, "_")}_commits_by_author.png" file_path = "#{Babygitter.report_file_path}/#{image_path}" g.write(file_path) "./#{image_path}" end def create_small_histograph_of_commits_by_author_for_branch(branch) g = Gruff::Bar.new(SMALL_SIZE) # Define a custom size g.sort = false # Do NOT sort data based on values #g.y_axis_increment = 1 # Points shown on the Y axis g.hide_legend = true g.title_font_size = 32 # Title font size g.theme = THEME g.title = 'Commits by Author' for author in branch.authors g.data("#{author.name}", [author.total_committed]) end image_path = "babygitter_images/small_#{branch.name.gsub(/\//, "_")}_commits_by_author.png" file_path ="#{Babygitter.report_file_path}/#{image_path}" g.write(file_path) "./#{image_path}" end def create_stacked_bar_graph_of_commits_by_author_for_branch(branch) large_file_path = create_large_stacked_bar_graph_of_commits_by_author_for_branch(branch) small_file_path = create_small_stacked_bar_graph_of_commits_by_author_for_branch(branch) "" end def create_large_stacked_bar_graph_of_commits_by_author_for_branch(branch) g = Gruff::StackedBar.new('800x600') # Define a custom size g.sort = true # Do NOT sort data based on values g.y_axis_increment = 10 # Points shown on the Y axis g.legend_font_size = 12 # Legend font size g.title_font_size = 22 # Title font size g.theme = THEME g.title = 'Commits for the Last 52 weeks' for author in branch.authors g.data("#{author.name}", author.create_bar_data_points) end image_path = "babygitter_images/large_#{branch.name.gsub(/\//, "_")}_stacked_bar_graph_by_author.png" file_path = "#{Babygitter.report_file_path}/#{image_path}" g.write(file_path) "./#{image_path}" end def create_small_stacked_bar_graph_of_commits_by_author_for_branch(branch) g = Gruff::StackedBar.new(SMALL_SIZE) # Define a custom size g.sort = true # Do NOT sort data based on values g.y_axis_increment = 10 # Points shown on the Y axis g.hide_legend = true g.title_font_size = 32 # g.theme = THEME g.title = 'Commits for the Last 52 weeks' for author in branch.authors g.data("#{author.name}", author.create_bar_data_points) end image_path= "babygitter_images/small_#{branch.name.gsub(/\//, "_")}_stacked_bar_graph_by_author.png" file_path = "#{Babygitter.report_file_path}/#{image_path}" g.write(file_path) "./#{image_path}" end def create_folder_graph(branch, level) small_file_path = create_small_folder_graph(branch, level) large_file_path = create_large_folder_graph(branch, level) "" end def create_large_folder_graph(branch, level) g = Gruff::Line.new('800x600') # Define a custom size g.title = "Plot of commits #{pluralize(level, 'level')} deep" g.legend_font_size = 12 # Legend font size branch.plot_folder_points(level).each do |key,value| key = "program_folder" if key == "" g.data(key, value) end image_path = "babygitter_images/large_#{branch.name.gsub(/\//, "_")}_level_#{level}_line_graph.png" file_path = "#{Babygitter.report_file_path}/#{image_path}" g.write(file_path) "./#{image_path}" end def create_small_folder_graph(branch, level) g = Gruff::Line.new(SMALL_SIZE) # Define a custom size g.title = "Plot of commits #{pluralize(level, 'level')} deep" g.legend_font_size = 32 # Legend font size g.hide_legend = true branch.plot_folder_points(level).each do |key,value| key = "program_folder" if key == "" g.data(key, value) end image_path = "babygitter_images/small_#{branch.name.gsub(/\//, "_")}_level_#{level}_line_graph.png" file_path = "#{Babygitter.report_file_path}/#{image_path}" g.write(file_path) "./#{image_path}" end def create_bar_graph_of_commits_in_the_last_52_weeks(author) g = Gruff::Bar.new('800x300') # Define a custom size g.sort = false # Do NOT sort data based on values #g.y_axis_increment = 1 # Points shown on the Y axis g.legend_font_size = 12 # Legend font size g.title_font_size = 22 # Title font size g.top_margin = 10 # Empty space on the upper part of the chart g.bottom_margin = 20 # Empty space on the lower part of the chart g.theme = THEME g.title = "Commits in the last 52 weeks by #{author.name}" g.data("#{author.name}", author.create_bar_data_points) g.no_data_message = "No Commits" image_path ="babygitter_images/#{author.name.gsub(/ |\/|\\/, "_")}_commits_last_52_weeks.png" filepath ="#{Babygitter.report_file_path}/#{image_path}" g.write(filepath) "" end end end