gruff 0.3.7 → 0.4.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 +7 -0
- data/.gitignore +2 -1
- data/.travis.yml +6 -0
- data/Gemfile +2 -8
- data/History.txt +76 -0
- data/MIT-LICENSE +3 -2
- data/README.md +96 -6
- data/RELEASE.md +92 -0
- data/Rakefile +203 -23
- data/gruff.gemspec +13 -10
- data/lib/gruff.rb +8 -7
- data/lib/gruff/accumulator_bar.rb +4 -13
- data/lib/gruff/area.rb +6 -13
- data/lib/gruff/bar.rb +24 -3
- data/lib/gruff/bar_conversion.rb +31 -31
- data/lib/gruff/base.rb +310 -267
- data/lib/gruff/bezier.rb +46 -0
- data/lib/gruff/bullet.rb +3 -1
- data/lib/gruff/dot.rb +56 -44
- data/lib/gruff/line.rb +83 -69
- data/lib/gruff/net.rb +7 -9
- data/lib/gruff/pie.rb +2 -4
- data/lib/gruff/scatter.rb +25 -29
- data/lib/gruff/side_bar.rb +54 -37
- data/lib/gruff/side_stacked_bar.rb +25 -5
- data/lib/gruff/spider.rb +22 -21
- data/lib/gruff/themes.rb +102 -0
- data/lib/gruff/version.rb +1 -1
- data/test/gruff_test_case.rb +68 -38
- data/test/image_compare.rb +58 -0
- data/test/output/accum_bar.png +0 -0
- data/test/output/area_keynote.png +0 -0
- data/test/output/area_keynote_small.png +0 -0
- data/test/output/area_many.png +0 -0
- data/test/output/area_many_areas_small.png +0 -0
- data/test/output/area_tiny.png +0 -0
- data/test/output/area_wide.png +0 -0
- data/test/output/bar2_wrapped_legend_16_400.png +0 -0
- data/test/output/bar2_wrapped_legend_16_800.png +0 -0
- data/test/output/bar2_wrapped_legend_30_400.png +0 -0
- data/test/output/bar2_wrapped_legend_30_800.png +0 -0
- data/test/output/bar2_wrapped_legend_4_400.png +0 -0
- data/test/output/bar2_wrapped_legend_4_800.png +0 -0
- data/test/output/bar2_wrapped_legend__400.png +0 -0
- data/test/output/bar2_wrapped_legend__800.png +0 -0
- data/test/output/bar_background_gradient_bottom_top.png +0 -0
- data/test/output/bar_background_gradient_left_right.png +0 -0
- data/test/output/bar_background_gradient_right_left.png +0 -0
- data/test/output/bar_background_gradient_top_bottom.png +0 -0
- data/test/output/bar_background_gradient_topleft_bottomright.png +0 -0
- data/test/output/bar_background_gradient_topright_bottomleft.png +0 -0
- data/test/output/bar_formatted_numbers.png +0 -0
- data/test/output/bar_keynote.png +0 -0
- data/test/output/bar_keynote_small.png +0 -0
- data/test/output/bar_long_legend_text.png +0 -0
- data/test/output/bar_manual_colors.png +0 -0
- data/test/output/bar_marker_shadow.png +0 -0
- data/test/output/bar_nearly_zero_max_10.png +0 -0
- data/test/output/bar_no_legend.png +0 -0
- data/test/output/bar_no_line_markers.png +0 -0
- data/test/output/bar_no_title.png +0 -0
- data/test/output/bar_no_title_or_legend.png +0 -0
- data/test/output/bar_odeo.png +0 -0
- data/test/output/bar_one_value.png +0 -0
- data/test/output/bar_pos_neg.png +0 -0
- data/test/output/bar_rails_keynote.png +0 -0
- data/test/output/bar_set_absolute_trunc.png +0 -0
- data/test/output/bar_set_label_stagger_height.png +0 -0
- data/test/output/bar_set_legend_box_size_lg.png +0 -0
- data/test/output/bar_set_legend_box_size_sm.png +0 -0
- data/test/output/bar_set_marker.png +0 -0
- data/test/output/bar_set_trailing_dots_trunc.png +0 -0
- data/test/output/bar_spacing_full.png +0 -0
- data/test/output/bar_spacing_half.png +0 -0
- data/test/output/bar_spacing_none.png +0 -0
- data/test/output/bar_tall_graph.png +0 -0
- data/test/output/bar_tall_graph_small.png +0 -0
- data/test/output/bar_themed.png +0 -0
- data/test/output/bar_title_margin.png +0 -0
- data/test/output/bar_value_labels.png +0 -0
- data/test/output/bar_wide_graph.png +0 -0
- data/test/output/bar_wide_graph_small.png +0 -0
- data/test/output/bar_wrapped_legend_16_400.png +0 -0
- data/test/output/bar_wrapped_legend_16_800.png +0 -0
- data/test/output/bar_wrapped_legend_30_400.png +0 -0
- data/test/output/bar_wrapped_legend_30_800.png +0 -0
- data/test/output/bar_wrapped_legend_4_400.png +0 -0
- data/test/output/bar_wrapped_legend_4_800.png +0 -0
- data/test/output/bar_wrapped_legend__400.png +0 -0
- data/test/output/bar_wrapped_legend__800.png +0 -0
- data/test/output/bar_x_y_labels.png +0 -0
- data/test/output/bar_y_increment_1.png +0 -0
- data/test/output/bar_y_increment_2.0.png +0 -0
- data/test/output/bar_y_increment_20.png +0 -0
- data/test/output/bar_y_increment_5.png +0 -0
- data/test/output/bar_zero_marker_count.png +0 -0
- data/test/output/bar_zero_spacing.png +0 -0
- data/test/output/bezier.png +0 -0
- data/test/output/bezier_2.png +0 -0
- data/test/output/bezier_3.png +0 -0
- data/test/output/bullet_greyscale.png +0 -0
- data/test/output/bullet_no_options.png +0 -0
- data/test/output/dot.png +0 -0
- data/test/output/dot_manual_colors.png +0 -0
- data/test/output/dot_nearly_zero_max_10.png +0 -0
- data/test/output/dot_no_legend.png +0 -0
- data/test/output/dot_no_line_markers.png +0 -0
- data/test/output/dot_no_title.png +0 -0
- data/test/output/dot_no_title_or_legend.png +0 -0
- data/test/output/dot_one_value.png +0 -0
- data/test/output/dot_pos_neg.png +0 -0
- data/test/output/dot_set_legend_box_size_lg.png +0 -0
- data/test/output/dot_set_legend_box_size_sm.png +0 -0
- data/test/output/dot_set_marker.png +0 -0
- data/test/output/dot_small.png +0 -0
- data/test/output/dot_tall_graph.png +0 -0
- data/test/output/dot_tall_graph_small.png +0 -0
- data/test/output/dot_themed.png +0 -0
- data/test/output/dot_wide_graph.png +0 -0
- data/test/output/dot_wide_graph_small.png +0 -0
- data/test/output/dot_x_y_labels.png +0 -0
- data/test/output/dot_y_increment_1.png +0 -0
- data/test/output/dot_y_increment_2.0.png +0 -0
- data/test/output/dot_y_increment_20.png +0 -0
- data/test/output/dot_y_increment_5.png +0 -0
- data/test/output/enhancements-1.png +0 -0
- data/test/output/enhancements.png +0 -0
- data/test/output/line_all_neg.png +0 -0
- data/test/output/line_all_neg_400.png +0 -0
- data/test/output/line_all_neg_no_max.png +0 -0
- data/test/output/line_baseline.png +0 -0
- data/test/output/line_hang_value.png +0 -0
- data/test/output/line_hide_dots.png +0 -0
- data/test/output/line_hide_lines.png +0 -0
- data/test/output/line_jruby_error.png +0 -0
- data/test/output/line_large.png +0 -0
- data/test/output/line_large_baseline.png +0 -0
- data/test/output/line_legend_at_bottom.png +0 -0
- data/test/output/line_many.png +0 -0
- data/test/output/line_many_lines_small.png +0 -0
- data/test/output/line_many_numbers.png +0 -0
- data/test/output/line_marker_label_accuracy.png +0 -0
- data/test/output/line_more_sets_than_colors.png +0 -0
- data/test/output/line_no_data.png +0 -0
- data/test/output/line_no_data_msg.png +0 -0
- data/test/output/line_no_data_other.png +0 -0
- data/test/output/line_no_hide.png +0 -0
- data/test/output/line_no_legend.png +0 -0
- data/test/output/line_no_line_markers.png +0 -0
- data/test/output/line_no_title.png +0 -0
- data/test/output/line_nothing_but_the_graph.png +0 -0
- data/test/output/line_one_value.png +0 -0
- data/test/output/line_one_value_array.png +0 -0
- data/test/output/line_pos_neg.png +0 -0
- data/test/output/line_pos_neg_400.png +0 -0
- data/test/output/line_similar_high_end_values.png +0 -0
- data/test/output/line_similar_high_end_values_with_floor.png +0 -0
- data/test/output/line_small_small_zero.png +0 -0
- data/test/output/line_small_values.png +0 -0
- data/test/output/line_small_values_small.png +0 -0
- data/test/output/line_small_zero.png +0 -0
- data/test/output/line_some_nil_points.png +0 -0
- data/test/output/line_theme_37signals_.png +0 -0
- data/test/output/line_theme_37signals_400.png +0 -0
- data/test/output/line_theme_keynote_.png +0 -0
- data/test/output/line_theme_keynote_400.png +0 -0
- data/test/output/line_theme_odeo_.png +0 -0
- data/test/output/line_theme_odeo_400.png +0 -0
- data/test/output/line_theme_rails_keynote_.png +0 -0
- data/test/output/line_theme_rails_keynote_400.png +0 -0
- data/test/output/line_tiny.png +0 -0
- data/test/output/line_transparent.png +0 -0
- data/test/output/line_very_small.png +0 -0
- data/test/output/line_wide_graph.png +0 -0
- data/test/output/line_wide_graph_small.png +0 -0
- data/test/output/line_xy.png +0 -0
- data/test/output/line_xy_pairs.png +0 -0
- data/test/output/line_y_axis_increment.png +0 -0
- data/test/output/mini_bar.png +0 -0
- data/test/output/mini_pie.png +0 -0
- data/test/output/mini_pie_right_legend.png +0 -0
- data/test/output/mini_side_bar.png +0 -0
- data/test/output/mini_side_bar_multi_color.png +0 -0
- data/test/output/net_dots_tiny.png +0 -0
- data/test/output/net_large.png +0 -0
- data/test/output/net_many.png +0 -0
- data/test/output/net_many_nets_small.png +0 -0
- data/test/output/net_no_data.png +0 -0
- data/test/output/net_no_data_msg.png +0 -0
- data/test/output/net_no_data_other.png +0 -0
- data/test/output/net_no_legend.png +0 -0
- data/test/output/net_no_net_markers.png +0 -0
- data/test/output/net_no_title.png +0 -0
- data/test/output/net_nothing_but_the_graph.png +0 -0
- data/test/output/net_similar_high_end_values.png +0 -0
- data/test/output/net_small.png +0 -0
- data/test/output/net_small_small.png +0 -0
- data/test/output/net_small_small_zero.png +0 -0
- data/test/output/net_small_zero.png +0 -0
- data/test/output/net_wide_graph.png +0 -0
- data/test/output/net_wide_graph_small.png +0 -0
- data/test/output/pie_equal.png +0 -0
- data/test/output/pie_grey.png +0 -0
- data/test/output/pie_keynote.png +0 -0
- data/test/output/pie_keynote_small.png +0 -0
- data/test/output/pie_legend.png +0 -0
- data/test/output/pie_legend_small.png +0 -0
- data/test/output/pie_nearly_equal.png +0 -0
- data/test/output/pie_one_val.png +0 -0
- data/test/output/pie_pastel.png +0 -0
- data/test/output/pie_simple.png +0 -0
- data/test/output/pie_wide.png +0 -0
- data/test/output/pie_wrapped_legend_16_400.png +0 -0
- data/test/output/pie_wrapped_legend_16_800.png +0 -0
- data/test/output/pie_wrapped_legend_30_400.png +0 -0
- data/test/output/pie_wrapped_legend_30_800.png +0 -0
- data/test/output/pie_wrapped_legend_4_400.png +0 -0
- data/test/output/pie_wrapped_legend_4_800.png +0 -0
- data/test/output/pie_wrapped_legend__400.png +0 -0
- data/test/output/pie_wrapped_legend__800.png +0 -0
- data/test/output/pie_zero.png +0 -0
- data/test/output/scatter_all_neg.png +0 -0
- data/test/output/scatter_all_neg_400.png +0 -0
- data/test/output/scatter_basic.png +0 -0
- data/test/output/scatter_many.png +0 -0
- data/test/output/scatter_no_data.png +0 -0
- data/test/output/scatter_no_data_msg.png +0 -0
- data/test/output/scatter_no_data_other.png +0 -0
- data/test/output/scatter_no_hide.png +0 -0
- data/test/output/scatter_no_labels.png +0 -0
- data/test/output/scatter_no_legend.png +0 -0
- data/test/output/scatter_no_line_markers.png +0 -0
- data/test/output/scatter_no_title.png +0 -0
- data/test/output/scatter_nothing_but_the_graph.png +0 -0
- data/test/output/scatter_pos_neg.png +0 -0
- data/test/output/scatter_pos_neg_400.png +0 -0
- data/test/output/scatter_wide_graph.png +0 -0
- data/test/output/scatter_wide_graph_small.png +0 -0
- data/test/output/scene_hazy_night.png +0 -0
- data/test/output/scene_not_hazy_day.png +0 -0
- data/test/output/scene_partly_cloudy_day.png +0 -0
- data/test/output/scene_stormy_day.png +0 -0
- data/test/output/scene_stormy_night.png +0 -0
- data/test/output/side_bar.png +0 -0
- data/test/output/side_bar_data_range.png +0 -0
- data/test/output/side_bar_labels.png +0 -0
- data/test/output/side_bar_spacing_full.png +0 -0
- data/test/output/side_bar_spacing_half.png +0 -0
- data/test/output/side_bar_spacing_none.png +0 -0
- data/test/output/side_stacked_bar_keynote.png +0 -0
- data/test/output/side_stacked_bar_keynote_small.png +0 -0
- data/test/output/side_stacked_bar_labels.png +0 -0
- data/test/output/side_stacked_bar_long_label.png +0 -0
- data/test/output/side_stacked_bar_wide.png +0 -0
- data/test/output/spider_37signals.png +0 -0
- data/test/output/spider_equal.png +0 -0
- data/test/output/spider_keynote.png +0 -0
- data/test/output/spider_legend.png +0 -0
- data/test/output/spider_legend_small.png +0 -0
- data/test/output/spider_lots_of_data.png +0 -0
- data/test/output/spider_lots_of_data_normal_names.png +0 -0
- data/test/output/spider_nearly_equal.png +0 -0
- data/test/output/spider_no_axes.png +0 -0
- data/test/output/spider_no_background.png +0 -0
- data/test/output/spider_no_print.png +0 -0
- data/test/output/spider_overlay_1.png +0 -0
- data/test/output/spider_overlay_2.png +0 -0
- data/test/output/spider_rotation.png +0 -0
- data/test/output/spider_small.png +0 -0
- data/test/output/spider_wide.png +0 -0
- data/test/output/spider_zero.png +0 -0
- data/test/output/stacked_area_keynote.png +0 -0
- data/test/output/stacked_area_keynote_small.png +0 -0
- data/test/output/stacked_bar_keynote.png +0 -0
- data/test/output/stacked_bar_keynote_small.png +0 -0
- data/test/output_java/accum_bar.png +0 -0
- data/test/output_java/area_keynote.png +0 -0
- data/test/output_java/area_keynote_small.png +0 -0
- data/test/output_java/area_many.png +0 -0
- data/test/output_java/area_many_areas_small.png +0 -0
- data/test/output_java/area_tiny.png +0 -0
- data/test/output_java/area_wide.png +0 -0
- data/test/output_java/bar2_wrapped_legend_16_400.png +0 -0
- data/test/output_java/bar2_wrapped_legend_16_800.png +0 -0
- data/test/output_java/bar2_wrapped_legend_30_400.png +0 -0
- data/test/output_java/bar2_wrapped_legend_30_800.png +0 -0
- data/test/output_java/bar2_wrapped_legend_4_400.png +0 -0
- data/test/output_java/bar2_wrapped_legend_4_800.png +0 -0
- data/test/output_java/bar2_wrapped_legend__400.png +0 -0
- data/test/output_java/bar2_wrapped_legend__800.png +0 -0
- data/test/output_java/bar_background_gradient_bottom_top.png +0 -0
- data/test/output_java/bar_background_gradient_left_right.png +0 -0
- data/test/output_java/bar_background_gradient_right_left.png +0 -0
- data/test/output_java/bar_background_gradient_top_bottom.png +0 -0
- data/test/output_java/bar_background_gradient_topleft_bottomright.png +0 -0
- data/test/output_java/bar_background_gradient_topright_bottomleft.png +0 -0
- data/test/output_java/bar_formatted_numbers.png +0 -0
- data/test/output_java/bar_keynote.png +0 -0
- data/test/output_java/bar_keynote_small.png +0 -0
- data/test/output_java/bar_long_legend_text.png +0 -0
- data/test/output_java/bar_manual_colors.png +0 -0
- data/test/output_java/bar_marker_shadow.png +0 -0
- data/test/output_java/bar_nearly_zero_max_10.png +0 -0
- data/test/output_java/bar_no_legend.png +0 -0
- data/test/output_java/bar_no_line_markers.png +0 -0
- data/test/output_java/bar_no_title.png +0 -0
- data/test/output_java/bar_no_title_or_legend.png +0 -0
- data/test/output_java/bar_odeo.png +0 -0
- data/test/output_java/bar_one_value.png +0 -0
- data/test/output_java/bar_pos_neg.png +0 -0
- data/test/output_java/bar_rails_keynote.png +0 -0
- data/test/output_java/bar_set_absolute_trunc.png +0 -0
- data/test/output_java/bar_set_label_stagger_height.png +0 -0
- data/test/output_java/bar_set_legend_box_size_lg.png +0 -0
- data/test/output_java/bar_set_legend_box_size_sm.png +0 -0
- data/test/output_java/bar_set_marker.png +0 -0
- data/test/output_java/bar_set_trailing_dots_trunc.png +0 -0
- data/test/output_java/bar_spacing_full.png +0 -0
- data/test/output_java/bar_spacing_half.png +0 -0
- data/test/output_java/bar_spacing_none.png +0 -0
- data/test/output_java/bar_tall_graph.png +0 -0
- data/test/output_java/bar_tall_graph_small.png +0 -0
- data/test/output_java/bar_themed.png +0 -0
- data/test/output_java/bar_title_margin.png +0 -0
- data/test/output_java/bar_value_labels.png +0 -0
- data/test/output_java/bar_wide_graph.png +0 -0
- data/test/output_java/bar_wide_graph_small.png +0 -0
- data/test/output_java/bar_wrapped_legend_16_400.png +0 -0
- data/test/output_java/bar_wrapped_legend_16_800.png +0 -0
- data/test/output_java/bar_wrapped_legend_30_400.png +0 -0
- data/test/output_java/bar_wrapped_legend_30_800.png +0 -0
- data/test/output_java/bar_wrapped_legend_4_400.png +0 -0
- data/test/output_java/bar_wrapped_legend_4_800.png +0 -0
- data/test/output_java/bar_wrapped_legend__400.png +0 -0
- data/test/output_java/bar_wrapped_legend__800.png +0 -0
- data/test/output_java/bar_x_y_labels.png +0 -0
- data/test/output_java/bar_y_increment_1.png +0 -0
- data/test/output_java/bar_y_increment_2.0.png +0 -0
- data/test/output_java/bar_y_increment_20.png +0 -0
- data/test/output_java/bar_y_increment_5.png +0 -0
- data/test/output_java/bar_zero_marker_count.png +0 -0
- data/test/output_java/bar_zero_spacing.png +0 -0
- data/test/output_java/bezier.png +0 -0
- data/test/output_java/bezier_2.png +0 -0
- data/test/output_java/bezier_3.png +0 -0
- data/test/output_java/bullet_greyscale.png +0 -0
- data/test/output_java/bullet_no_options.png +0 -0
- data/test/output_java/dot.png +0 -0
- data/test/output_java/dot_manual_colors.png +0 -0
- data/test/output_java/dot_nearly_zero_max_10.png +0 -0
- data/test/output_java/dot_no_legend.png +0 -0
- data/test/output_java/dot_no_line_markers.png +0 -0
- data/test/output_java/dot_no_title.png +0 -0
- data/test/output_java/dot_no_title_or_legend.png +0 -0
- data/test/output_java/dot_one_value.png +0 -0
- data/test/output_java/dot_pos_neg.png +0 -0
- data/test/output_java/dot_set_legend_box_size_lg.png +0 -0
- data/test/output_java/dot_set_legend_box_size_sm.png +0 -0
- data/test/output_java/dot_set_marker.png +0 -0
- data/test/output_java/dot_small.png +0 -0
- data/test/output_java/dot_tall_graph.png +0 -0
- data/test/output_java/dot_tall_graph_small.png +0 -0
- data/test/output_java/dot_themed.png +0 -0
- data/test/output_java/dot_wide_graph.png +0 -0
- data/test/output_java/dot_wide_graph_small.png +0 -0
- data/test/output_java/dot_x_y_labels.png +0 -0
- data/test/output_java/dot_y_increment_1.png +0 -0
- data/test/output_java/dot_y_increment_2.0.png +0 -0
- data/test/output_java/dot_y_increment_20.png +0 -0
- data/test/output_java/dot_y_increment_5.png +0 -0
- data/test/output_java/enhancements-1.png +0 -0
- data/test/output_java/enhancements.png +0 -0
- data/test/output_java/line_all_neg.png +0 -0
- data/test/output_java/line_all_neg_400.png +0 -0
- data/test/output_java/line_all_neg_no_max.png +0 -0
- data/test/output_java/line_baseline.png +0 -0
- data/test/output_java/line_hang_value.png +0 -0
- data/test/output_java/line_hide_dots.png +0 -0
- data/test/output_java/line_hide_lines.png +0 -0
- data/test/output_java/line_jruby_error.png +0 -0
- data/test/output_java/line_large.png +0 -0
- data/test/output_java/line_large_baseline.png +0 -0
- data/test/output_java/line_legend_at_bottom.png +0 -0
- data/test/output_java/line_many.png +0 -0
- data/test/output_java/line_many_lines_small.png +0 -0
- data/test/output_java/line_many_numbers.png +0 -0
- data/test/output_java/line_marker_label_accuracy.png +0 -0
- data/test/output_java/line_more_sets_than_colors.png +0 -0
- data/test/output_java/line_no_data.png +0 -0
- data/test/output_java/line_no_data_msg.png +0 -0
- data/test/output_java/line_no_data_other.png +0 -0
- data/test/output_java/line_no_hide.png +0 -0
- data/test/output_java/line_no_legend.png +0 -0
- data/test/output_java/line_no_line_markers.png +0 -0
- data/test/output_java/line_no_title.png +0 -0
- data/test/output_java/line_nothing_but_the_graph.png +0 -0
- data/test/output_java/line_one_value.png +0 -0
- data/test/output_java/line_one_value_array.png +0 -0
- data/test/output_java/line_pos_neg.png +0 -0
- data/test/output_java/line_pos_neg_400.png +0 -0
- data/test/output_java/line_similar_high_end_values.png +0 -0
- data/test/output_java/line_similar_high_end_values_with_floor.png +0 -0
- data/test/output_java/line_small_small_zero.png +0 -0
- data/test/output_java/line_small_values.png +0 -0
- data/test/output_java/line_small_values_small.png +0 -0
- data/test/output_java/line_small_zero.png +0 -0
- data/test/output_java/line_some_nil_points.png +0 -0
- data/test/output_java/line_theme_37signals_.png +0 -0
- data/test/output_java/line_theme_37signals_400.png +0 -0
- data/test/output_java/line_theme_keynote_.png +0 -0
- data/test/output_java/line_theme_keynote_400.png +0 -0
- data/test/output_java/line_theme_odeo_.png +0 -0
- data/test/output_java/line_theme_odeo_400.png +0 -0
- data/test/output_java/line_theme_rails_keynote_.png +0 -0
- data/test/output_java/line_theme_rails_keynote_400.png +0 -0
- data/test/output_java/line_tiny.png +0 -0
- data/test/output_java/line_transparent.png +0 -0
- data/test/output_java/line_very_small.png +0 -0
- data/test/output_java/line_wide_graph.png +0 -0
- data/test/output_java/line_wide_graph_small.png +0 -0
- data/test/output_java/line_xy.png +0 -0
- data/test/output_java/line_xy_pairs.png +0 -0
- data/test/output_java/line_y_axis_increment.png +0 -0
- data/test/output_java/mini_bar.png +0 -0
- data/test/output_java/mini_pie.png +0 -0
- data/test/output_java/mini_pie_right_legend.png +0 -0
- data/test/output_java/mini_side_bar.png +0 -0
- data/test/output_java/mini_side_bar_multi_color.png +0 -0
- data/test/output_java/net_dots_tiny.png +0 -0
- data/test/output_java/net_large.png +0 -0
- data/test/output_java/net_many.png +0 -0
- data/test/output_java/net_many_nets_small.png +0 -0
- data/test/output_java/net_no_data.png +0 -0
- data/test/output_java/net_no_data_msg.png +0 -0
- data/test/output_java/net_no_data_other.png +0 -0
- data/test/output_java/net_no_legend.png +0 -0
- data/test/output_java/net_no_net_markers.png +0 -0
- data/test/output_java/net_no_title.png +0 -0
- data/test/output_java/net_nothing_but_the_graph.png +0 -0
- data/test/output_java/net_similar_high_end_values.png +0 -0
- data/test/output_java/net_small.png +0 -0
- data/test/output_java/net_small_small.png +0 -0
- data/test/output_java/net_small_small_zero.png +0 -0
- data/test/output_java/net_small_zero.png +0 -0
- data/test/output_java/net_wide_graph.png +0 -0
- data/test/output_java/net_wide_graph_small.png +0 -0
- data/test/output_java/pie_equal.png +0 -0
- data/test/output_java/pie_grey.png +0 -0
- data/test/output_java/pie_keynote.png +0 -0
- data/test/output_java/pie_keynote_small.png +0 -0
- data/test/output_java/pie_legend.png +0 -0
- data/test/output_java/pie_legend_small.png +0 -0
- data/test/output_java/pie_nearly_equal.png +0 -0
- data/test/output_java/pie_one_val.png +0 -0
- data/test/output_java/pie_pastel.png +0 -0
- data/test/output_java/pie_simple.png +0 -0
- data/test/output_java/pie_wide.png +0 -0
- data/test/output_java/pie_wrapped_legend_16_400.png +0 -0
- data/test/output_java/pie_wrapped_legend_16_800.png +0 -0
- data/test/output_java/pie_wrapped_legend_30_400.png +0 -0
- data/test/output_java/pie_wrapped_legend_30_800.png +0 -0
- data/test/output_java/pie_wrapped_legend_4_400.png +0 -0
- data/test/output_java/pie_wrapped_legend_4_800.png +0 -0
- data/test/output_java/pie_wrapped_legend__400.png +0 -0
- data/test/output_java/pie_wrapped_legend__800.png +0 -0
- data/test/output_java/pie_zero.png +0 -0
- data/test/output_java/scatter_all_neg.png +0 -0
- data/test/output_java/scatter_all_neg_400.png +0 -0
- data/test/output_java/scatter_basic.png +0 -0
- data/test/output_java/scatter_many.png +0 -0
- data/test/output_java/scatter_no_data.png +0 -0
- data/test/output_java/scatter_no_data_msg.png +0 -0
- data/test/output_java/scatter_no_data_other.png +0 -0
- data/test/output_java/scatter_no_hide.png +0 -0
- data/test/output_java/scatter_no_labels.png +0 -0
- data/test/output_java/scatter_no_legend.png +0 -0
- data/test/output_java/scatter_no_line_markers.png +0 -0
- data/test/output_java/scatter_no_title.png +0 -0
- data/test/output_java/scatter_nothing_but_the_graph.png +0 -0
- data/test/output_java/scatter_pos_neg.png +0 -0
- data/test/output_java/scatter_pos_neg_400.png +0 -0
- data/test/output_java/scatter_wide_graph.png +0 -0
- data/test/output_java/scatter_wide_graph_small.png +0 -0
- data/test/output_java/scene_hazy_night.png +0 -0
- data/test/output_java/scene_not_hazy_day.png +0 -0
- data/test/output_java/scene_partly_cloudy_day.png +0 -0
- data/test/output_java/scene_stormy_day.png +0 -0
- data/test/output_java/scene_stormy_night.png +0 -0
- data/test/output_java/side_bar.png +0 -0
- data/test/output_java/side_bar_data_range.png +0 -0
- data/test/output_java/side_bar_labels.png +0 -0
- data/test/output_java/side_bar_spacing_full.png +0 -0
- data/test/output_java/side_bar_spacing_half.png +0 -0
- data/test/output_java/side_bar_spacing_none.png +0 -0
- data/test/output_java/side_stacked_bar_keynote.png +0 -0
- data/test/output_java/side_stacked_bar_keynote_small.png +0 -0
- data/test/output_java/side_stacked_bar_labels.png +0 -0
- data/test/output_java/side_stacked_bar_long_label.png +0 -0
- data/test/output_java/side_stacked_bar_wide.png +0 -0
- data/test/output_java/spider_37signals.png +0 -0
- data/test/output_java/spider_equal.png +0 -0
- data/test/output_java/spider_keynote.png +0 -0
- data/test/output_java/spider_legend.png +0 -0
- data/test/output_java/spider_legend_small.png +0 -0
- data/test/output_java/spider_lots_of_data.png +0 -0
- data/test/output_java/spider_lots_of_data_normal_names.png +0 -0
- data/test/output_java/spider_nearly_equal.png +0 -0
- data/test/output_java/spider_no_axes.png +0 -0
- data/test/output_java/spider_no_background.png +0 -0
- data/test/output_java/spider_no_print.png +0 -0
- data/test/output_java/spider_overlay_1.png +0 -0
- data/test/output_java/spider_overlay_2.png +0 -0
- data/test/output_java/spider_rotation.png +0 -0
- data/test/output_java/spider_small.png +0 -0
- data/test/output_java/spider_wide.png +0 -0
- data/test/output_java/spider_zero.png +0 -0
- data/test/output_java/stacked_area_keynote.png +0 -0
- data/test/output_java/stacked_area_keynote_small.png +0 -0
- data/test/output_java/stacked_bar_keynote.png +0 -0
- data/test/output_java/stacked_bar_keynote_small.png +0 -0
- data/test/test_accumulator_bar.rb +7 -6
- data/test/test_area.rb +2 -2
- data/test/test_bar.rb +296 -112
- data/test/test_bezier.rb +33 -0
- data/test/test_bullet.rb +26 -26
- data/test/test_dot.rb +44 -54
- data/test/test_legend.rb +29 -29
- data/test/test_line.rb +250 -218
- data/test/test_net.rb +2 -1
- data/test/test_pie.rb +2 -2
- data/test/test_scatter.rb +85 -85
- data/test/test_side_bar.rb +13 -0
- data/test/test_sidestacked_bar.rb +16 -0
- data/test/test_spider.rb +11 -1
- data/test/test_stacked_area.rb +5 -5
- metadata +1041 -49
- data/.rvmrc +0 -5
- data/Gemfile.lock +0 -20
- data/LICENSE.txt +0 -22
- data/README.txt +0 -43
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: f87f85fa28083c6c5de44ae3ff41f6ec46c23b87
|
|
4
|
+
data.tar.gz: a53548ce9aad15d9790b783e89c430e9152c46a6
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 0c29244b01317a82ca81b1090d1b24d956e8c7437cca469847aba06f9c48128ea2d47c76b9fd8db76fb02c08671e47e18b98a677fc149154140af413aed8e190
|
|
7
|
+
data.tar.gz: 5f30539089e2b77e077e95df0117316771b901c6415f7710cbfb0bd5875e74607889433b8f8df8cadc4f918bae91207e074809c48b8ac8d586ddd02f306f3f1c
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
language: ruby
|
|
2
|
+
notifications:
|
|
3
|
+
email:
|
|
4
|
+
- uwe@kubosch.no
|
|
2
5
|
rvm:
|
|
3
6
|
- "1.8.7"
|
|
4
7
|
- "1.9.3"
|
|
8
|
+
- "2.0.0"
|
|
5
9
|
- jruby-18mode # JRuby in 1.8 mode
|
|
6
10
|
- jruby-19mode # JRuby in 1.9 mode
|
|
11
|
+
- jruby-20mode # JRuby in 2.0 mode
|
|
7
12
|
- rbx-18mode
|
|
8
13
|
- rbx-19mode
|
|
14
|
+
- rbx-20mode
|
data/Gemfile
CHANGED
|
@@ -4,13 +4,7 @@ source 'https://rubygems.org'
|
|
|
4
4
|
gemspec
|
|
5
5
|
|
|
6
6
|
group :test do
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
platform :ruby do
|
|
10
|
-
gem 'rmagick'
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
platform :jruby do
|
|
14
|
-
gem 'rmagick4j'
|
|
7
|
+
if RUBY_VERSION =~ /^1\.9\./ || RUBY_VERSION =~ /^2\.0\./
|
|
8
|
+
gem 'minitest-reporters'
|
|
15
9
|
end
|
|
16
10
|
end
|
data/History.txt
CHANGED
|
@@ -1,3 +1,79 @@
|
|
|
1
|
+
== 0.4.0
|
|
2
|
+
|
|
3
|
+
All old branches and pull requests have been merged or deleted. Over 40
|
|
4
|
+
issues have been resolved! Ruby 2.0 compatibility has been confirmed.
|
|
5
|
+
Several new features.
|
|
6
|
+
|
|
7
|
+
Features:
|
|
8
|
+
|
|
9
|
+
* Issue #38 Separate themes into Gruff::Themes module
|
|
10
|
+
* Issue #39 Add staggered labels
|
|
11
|
+
* Issue #40 Added spacing factor to bar graphs
|
|
12
|
+
* Issue #41 Add rotation to spider chart
|
|
13
|
+
* Issue #65 Add RMagick and RMagick4J respectively as dependencies to the
|
|
14
|
+
Gruff gem
|
|
15
|
+
* Issue #81 Ensure Ruby 2.0 compatibility
|
|
16
|
+
|
|
17
|
+
Bugfixes:
|
|
18
|
+
|
|
19
|
+
* Issue #17 Baseline drawn at incorrect position
|
|
20
|
+
* Issue #21 Division By Zero Error on Documented Example
|
|
21
|
+
* Issue #36 When writing the same chart multiple times, it should not be
|
|
22
|
+
rendered again.
|
|
23
|
+
* Issue #44 XY Datasets are inconvenient to use. (documentation and/or
|
|
24
|
+
code is wrong)
|
|
25
|
+
* Issue #46 issue with markers that are floats
|
|
26
|
+
* Issue #51 line with nil in dataset
|
|
27
|
+
* Issue #52 Wrong direction in y_axis_label
|
|
28
|
+
* Issue #54 Explicitly specify overlapping for lines (Gruff::Line)
|
|
29
|
+
* Issue #58 Clean up data sorting
|
|
30
|
+
* Issue #59 Escape '%' in labels
|
|
31
|
+
* Issue #60 Correct DOT graph drawing
|
|
32
|
+
* Issue #63 Some charts are drawn with transparent text when running with
|
|
33
|
+
JRuby/RMagick4J
|
|
34
|
+
* Issue #66 Marker line for 54.0 is missing on bar_set_marker.png example
|
|
35
|
+
* Issue #68 Y-axis label for bar_x_y_labels.png should be rotated when
|
|
36
|
+
drawn with JRuby
|
|
37
|
+
|
|
38
|
+
Support:
|
|
39
|
+
|
|
40
|
+
* Issue #4 Scaling a graph leads to fuzzy pictures
|
|
41
|
+
* Issue #8 zero-width bar entries drawn
|
|
42
|
+
* Issue #11 Feature: Data value markers
|
|
43
|
+
* Issue #18 Set encoding to uft-8
|
|
44
|
+
* Issue #24 Gruff::SideStackedBar
|
|
45
|
+
* Issue #35 Add option for line height in legend.
|
|
46
|
+
* Issue #49 font directive is not setting font in charts
|
|
47
|
+
* Issue #53 Is this project still alive?
|
|
48
|
+
|
|
49
|
+
Documentation:
|
|
50
|
+
|
|
51
|
+
* Issue #57 Build failing on Travis and no Build Status image in Readme
|
|
52
|
+
|
|
53
|
+
Pull requests:
|
|
54
|
+
|
|
55
|
+
* Issue #9 Add gradient background direction
|
|
56
|
+
* Issue #12 Bar updates
|
|
57
|
+
* Issue #14 Make use of the TEXT_OFFSET_PERCENTAGE const variable
|
|
58
|
+
* Issue #16 Fix exception when y_axis_increment is used in line bars
|
|
59
|
+
* Issue #26 Fix bug with additional point included on area charts
|
|
60
|
+
* Issue #27 Added marker_shadow_color to allow to draw shadows below
|
|
61
|
+
marker lines
|
|
62
|
+
* Issue #37 Update lib/gruff/base.rb: set legend under the graph
|
|
63
|
+
* Issue #42 Update lib/gruff/base.rb: set legend under the graph
|
|
64
|
+
* Issue #43 Fixed issue #25
|
|
65
|
+
* Issue #48 add license information to the gemspec
|
|
66
|
+
* Issue #56 Fixed gem file generation problem
|
|
67
|
+
|
|
68
|
+
Internal:
|
|
69
|
+
|
|
70
|
+
* Issue #80 Remove the .rmvrc file from the project
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
== 0.3.7
|
|
74
|
+
|
|
75
|
+
* ???
|
|
76
|
+
|
|
1
77
|
== 0.3.6
|
|
2
78
|
|
|
3
79
|
* Fixed manifest to list dot graph [theirishpenguin]
|
data/MIT-LICENSE
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
Copyright (c) 2005-
|
|
1
|
+
Copyright (c) 2005-2012 Topfunky Corporation boss@topfunky.com
|
|
2
|
+
|
|
3
|
+
MIT License
|
|
2
4
|
|
|
3
5
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
6
|
a copy of this software and associated documentation files (the
|
|
@@ -18,4 +20,3 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
|
18
20
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
21
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
22
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
|
-
|
data/README.md
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# Gruff Graphs
|
|
2
2
|
|
|
3
|
+
[](https://travis-ci.org/topfunky/gruff)
|
|
4
|
+
[](http://badge.fury.io/rb/gruff)
|
|
5
|
+
|
|
3
6
|
A library for making beautiful graphs.
|
|
4
7
|
|
|
5
8
|
## WARNING
|
|
@@ -24,23 +27,110 @@ Or install it yourself as:
|
|
|
24
27
|
|
|
25
28
|
## Usage
|
|
26
29
|
|
|
27
|
-
|
|
30
|
+
```Ruby
|
|
31
|
+
require 'gruff'
|
|
32
|
+
g = Gruff::Line.new
|
|
33
|
+
g.title = 'Wow! Look at this!'
|
|
34
|
+
g.labels = { 0 => '5/6', 1 => '5/15', 2 => '5/24', 3 => '5/30', 4 => '6/4',
|
|
35
|
+
5 => '6/12', 6 => '6/21', 7 => '6/28' }
|
|
36
|
+
g.data :Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]
|
|
37
|
+
g.data :Charles, [80, 54, 67, 54, 68, 70, 90, 95]
|
|
38
|
+
g.data :Julie, [22, 29, 35, 38, 36, 40, 46, 57]
|
|
39
|
+
g.data :Jane, [95, 95, 95, 90, 85, 80, 88, 100]
|
|
40
|
+
g.data :Philip, [90, 34, 23, 12, 78, 89, 98, 88]
|
|
41
|
+
g.data :Arthur, [5, 10, 13, 11, 6, 16, 22, 32]
|
|
42
|
+
g.write('exciting.png')
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Examples
|
|
46
|
+
|
|
47
|
+
You can find many examples in the [test](https://github.com/topfunky/gruff/tree/master/test)
|
|
48
|
+
directory along with their resulting charts in the
|
|
49
|
+
[output](https://github.com/topfunky/gruff/tree/master/test/output) directory.
|
|
50
|
+
|
|
51
|
+
You can find older examples here: http://nubyonrails.com/pages/gruff
|
|
52
|
+
|
|
53
|
+
### Accumulator bar chart
|
|
54
|
+
|
|
55
|
+

|
|
56
|
+
|
|
57
|
+
### Area chart
|
|
58
|
+
|
|
59
|
+

|
|
60
|
+
|
|
61
|
+
### Bar chart
|
|
62
|
+
|
|
63
|
+

|
|
64
|
+
|
|
65
|
+
### Bezier chart
|
|
66
|
+
|
|
67
|
+
In progress!
|
|
68
|
+
|
|
69
|
+

|
|
70
|
+
|
|
71
|
+
### Bullet chart
|
|
72
|
+
|
|
73
|
+
In progress!
|
|
74
|
+
|
|
75
|
+

|
|
76
|
+
|
|
77
|
+
### Dot chart
|
|
78
|
+
|
|
79
|
+

|
|
80
|
+
|
|
81
|
+
### Line chart
|
|
28
82
|
|
|
29
|
-
|
|
83
|
+

|
|
84
|
+
|
|
85
|
+
### LineXY chart
|
|
86
|
+
|
|
87
|
+

|
|
88
|
+
|
|
89
|
+
### Net chart
|
|
90
|
+
|
|
91
|
+

|
|
92
|
+
|
|
93
|
+
### Pie chart
|
|
94
|
+
|
|
95
|
+

|
|
96
|
+
|
|
97
|
+
### Scatter chart
|
|
98
|
+
|
|
99
|
+

|
|
100
|
+
|
|
101
|
+
### Side bar chart
|
|
102
|
+
|
|
103
|
+

|
|
104
|
+
|
|
105
|
+
### Side stacked bar chart
|
|
106
|
+
|
|
107
|
+

|
|
108
|
+
|
|
109
|
+
### Spider chart
|
|
110
|
+
|
|
111
|
+

|
|
112
|
+
|
|
113
|
+
### Stacked area chart
|
|
114
|
+
|
|
115
|
+

|
|
116
|
+
|
|
117
|
+
### Stacked bar chart
|
|
118
|
+
|
|
119
|
+

|
|
30
120
|
|
|
31
|
-
http://nubyonrails.com/pages/gruff
|
|
32
121
|
|
|
33
122
|
## Documentation
|
|
34
123
|
|
|
35
|
-
http://
|
|
124
|
+
http://www.rubydoc.info/github/topfunky/gruff/frames
|
|
125
|
+
|
|
36
126
|
|
|
37
127
|
## Contributing
|
|
38
128
|
|
|
39
|
-
|
|
129
|
+
### Source
|
|
40
130
|
|
|
41
131
|
The source for this project is now kept at GitHub:
|
|
42
132
|
|
|
43
|
-
http://github.com/topfunky/gruff
|
|
133
|
+
http://github.com/topfunky/gruff
|
|
44
134
|
|
|
45
135
|
1. Fork it
|
|
46
136
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
data/RELEASE.md
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Subject: [ANN] Gruff 0.4.0 released!
|
|
2
|
+
|
|
3
|
+
The Gruff team is pleased to announce the release of Gruff 0.4.0.
|
|
4
|
+
|
|
5
|
+
New in version 0.4.0:
|
|
6
|
+
|
|
7
|
+
All old branches and pull requests have been merged or deleted. Over 40
|
|
8
|
+
issues have been resolved! Ruby 2.0 compatibility has been confirmed.
|
|
9
|
+
Several new features.
|
|
10
|
+
|
|
11
|
+
Features:
|
|
12
|
+
|
|
13
|
+
* Issue #38 Separate themes into Gruff::Themes module
|
|
14
|
+
* Issue #39 Add staggered labels
|
|
15
|
+
* Issue #40 Added spacing factor to bar graphs
|
|
16
|
+
* Issue #41 Add rotation to spider chart
|
|
17
|
+
* Issue #65 Add RMagick and RMagick4J respectively as dependencies to the
|
|
18
|
+
Gruff gem
|
|
19
|
+
* Issue #81 Ensure Ruby 2.0 compatibility
|
|
20
|
+
|
|
21
|
+
Bugfixes:
|
|
22
|
+
|
|
23
|
+
* Issue #17 Baseline drawn at incorrect position
|
|
24
|
+
* Issue #21 Division By Zero Error on Documented Example
|
|
25
|
+
* Issue #36 When writing the same chart multiple times, it should not be
|
|
26
|
+
rendered again.
|
|
27
|
+
* Issue #44 XY Datasets are inconvenient to use. (documentation and/or
|
|
28
|
+
code is wrong)
|
|
29
|
+
* Issue #46 issue with markers that are floats
|
|
30
|
+
* Issue #51 line with nil in dataset
|
|
31
|
+
* Issue #52 Wrong direction in y_axis_label
|
|
32
|
+
* Issue #54 Explicitly specify overlapping for lines (Gruff::Line)
|
|
33
|
+
* Issue #58 Clean up data sorting
|
|
34
|
+
* Issue #59 Escape '%' in labels
|
|
35
|
+
* Issue #60 Correct DOT graph drawing
|
|
36
|
+
* Issue #63 Some charts are drawn with transparent text when running with
|
|
37
|
+
JRuby/RMagick4J
|
|
38
|
+
* Issue #66 Marker line for 54.0 is missing on bar_set_marker.png example
|
|
39
|
+
* Issue #68 Y-axis label for bar_x_y_labels.png should be rotated when
|
|
40
|
+
drawn with JRuby
|
|
41
|
+
|
|
42
|
+
Support:
|
|
43
|
+
|
|
44
|
+
* Issue #4 Scaling a graph leads to fuzzy pictures
|
|
45
|
+
* Issue #8 zero-width bar entries drawn
|
|
46
|
+
* Issue #11 Feature: Data value markers
|
|
47
|
+
* Issue #18 Set encoding to uft-8
|
|
48
|
+
* Issue #24 Gruff::SideStackedBar
|
|
49
|
+
* Issue #35 Add option for line height in legend.
|
|
50
|
+
* Issue #49 font directive is not setting font in charts
|
|
51
|
+
* Issue #53 Is this project still alive?
|
|
52
|
+
|
|
53
|
+
Documentation:
|
|
54
|
+
|
|
55
|
+
* Issue #57 Build failing on Travis and no Build Status image in Readme
|
|
56
|
+
|
|
57
|
+
Pull requests:
|
|
58
|
+
|
|
59
|
+
* Issue #9 Add gradient background direction
|
|
60
|
+
* Issue #12 Bar updates
|
|
61
|
+
* Issue #14 Make use of the TEXT_OFFSET_PERCENTAGE const variable
|
|
62
|
+
* Issue #16 Fix exception when y_axis_increment is used in line bars
|
|
63
|
+
* Issue #26 Fix bug with additional point included on area charts
|
|
64
|
+
* Issue #27 Added marker_shadow_color to allow to draw shadows below
|
|
65
|
+
marker lines
|
|
66
|
+
* Issue #37 Update lib/gruff/base.rb: set legend under the graph
|
|
67
|
+
* Issue #42 Update lib/gruff/base.rb: set legend under the graph
|
|
68
|
+
* Issue #43 Fixed issue #25
|
|
69
|
+
* Issue #48 add license information to the gemspec
|
|
70
|
+
* Issue #56 Fixed gem file generation problem
|
|
71
|
+
|
|
72
|
+
Internal:
|
|
73
|
+
|
|
74
|
+
* Issue #80 Remove the .rmvrc file from the project
|
|
75
|
+
|
|
76
|
+
You can find a complete list of issues here:
|
|
77
|
+
|
|
78
|
+
* https://github.com/topfunky/gruff/issues?state=closed&milestone=2
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
Installation:
|
|
82
|
+
|
|
83
|
+
gem install gruff
|
|
84
|
+
|
|
85
|
+
You can find an introductory tutorial at
|
|
86
|
+
https://github.com/topfunky/gruff
|
|
87
|
+
|
|
88
|
+
Enjoy!
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
--
|
|
92
|
+
The Gruff Team
|
data/Rakefile
CHANGED
|
@@ -1,21 +1,19 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'bundler/gem_tasks'
|
|
3
3
|
require 'rake/testtask'
|
|
4
|
-
|
|
5
4
|
require 'rake/clean'
|
|
6
|
-
$:.unshift(File.dirname(__FILE__) + "/lib")
|
|
7
5
|
|
|
8
|
-
CLEAN <<
|
|
6
|
+
CLEAN << %w(pkg test/output/*)
|
|
9
7
|
|
|
10
|
-
desc
|
|
8
|
+
desc 'Run tests'
|
|
11
9
|
task :default => :test
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
task :gem => :build
|
|
12
|
+
|
|
13
|
+
Rake::TestTask.new
|
|
16
14
|
|
|
17
15
|
namespace :test do
|
|
18
|
-
desc
|
|
16
|
+
desc 'Run mini tests'
|
|
19
17
|
task :mini => :clean do
|
|
20
18
|
Dir['test/test_mini*'].each do |file|
|
|
21
19
|
system "ruby #{file}"
|
|
@@ -23,16 +21,198 @@ namespace :test do
|
|
|
23
21
|
end
|
|
24
22
|
end
|
|
25
23
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
#
|
|
24
|
+
desc 'Generate release docs for a given milestone'
|
|
25
|
+
task :release_docs do
|
|
26
|
+
raise "\n This task requires Ruby 1.9 or newer to parse JSON as YAML.\n\n" if RUBY_VERSION == '1.8.7'
|
|
27
|
+
categories, grouped_issues, milestone, milestone_description, milestone_name = get_github_issues
|
|
28
|
+
|
|
29
|
+
puts '=' * 80
|
|
30
|
+
puts
|
|
31
|
+
release_doc = <<EOF
|
|
32
|
+
Subject: [ANN] Gruff #{milestone_name} released!
|
|
33
|
+
|
|
34
|
+
The Gruff team is pleased to announce the release of Gruff #{milestone_name}.
|
|
35
|
+
|
|
36
|
+
New in version #{milestone_name}:
|
|
37
|
+
|
|
38
|
+
#{milestone_description}
|
|
39
|
+
|
|
40
|
+
#{(categories.keys & grouped_issues.keys).map do |cat|
|
|
41
|
+
"#{cat}:\n
|
|
42
|
+
#{grouped_issues[cat].map { |i| wrap(%Q{* Issue ##{i['number']} #{i['title']}},2) }.join("\n")}
|
|
43
|
+
"
|
|
44
|
+
end.join("\n")}
|
|
45
|
+
You can find a complete list of issues here:
|
|
46
|
+
|
|
47
|
+
* https://github.com/topfunky/gruff/issues?state=closed&milestone=#{milestone}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
Installation:
|
|
51
|
+
|
|
52
|
+
gem install gruff
|
|
53
|
+
|
|
54
|
+
You can find an introductory tutorial at
|
|
55
|
+
https://github.com/topfunky/gruff
|
|
56
|
+
|
|
57
|
+
Enjoy!
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
--
|
|
61
|
+
The Gruff Team
|
|
62
|
+
EOF
|
|
63
|
+
|
|
64
|
+
puts release_doc
|
|
65
|
+
puts
|
|
66
|
+
puts '=' * 80
|
|
67
|
+
|
|
68
|
+
unless Gem::Version.new(Gruff::VERSION).prerelease?
|
|
69
|
+
File.write('RELEASE.md', release_doc)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
desc 'Fetch download stats form rubygems.org'
|
|
74
|
+
task :stats do
|
|
75
|
+
require 'time'
|
|
76
|
+
require 'date'
|
|
77
|
+
require 'rubygems'
|
|
78
|
+
require 'uri'
|
|
79
|
+
require 'net/http'
|
|
80
|
+
require 'net/https'
|
|
81
|
+
require 'openssl'
|
|
82
|
+
require 'yaml'
|
|
83
|
+
host = 'rubygems.org'
|
|
84
|
+
base_uri = "https://#{host}/api/v1"
|
|
85
|
+
https = Net::HTTP.new(host, 443)
|
|
86
|
+
https.use_ssl = true
|
|
87
|
+
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
88
|
+
|
|
89
|
+
counts_per_month = Hash.new { |h, k| h[k] = Hash.new { |mh, mk| mh[mk] = 0 } }
|
|
90
|
+
total = 0
|
|
91
|
+
|
|
92
|
+
%w{gruff}.each do |gem|
|
|
93
|
+
versions_uri = URI("#{base_uri}/versions/#{gem}.yaml")
|
|
94
|
+
req = Net::HTTP::Get.new(versions_uri.request_uri)
|
|
95
|
+
res = https.start { |http| http.request(req) }
|
|
96
|
+
versions = YAML.load(res.body).sort_by { |v| Gem::Version.new(v['number']) }
|
|
97
|
+
puts "\n#{gem}:\n#{versions.map { |v| "#{Time.parse(v['built_at']).strftime('%Y-%m-%d')} #{'%10s' % v['number']} #{v['downloads_count']}" }.join("\n")}"
|
|
98
|
+
|
|
99
|
+
versions.each do |v|
|
|
100
|
+
downloads_uri = URI("#{base_uri}/versions/#{gem}-#{v['number']}/downloads/search.yaml?from=#{Time.parse(v['built_at']).strftime('%Y-%m-%d')}&to=#{Date.today}")
|
|
101
|
+
req = Net::HTTP::Get.new(downloads_uri.request_uri)
|
|
102
|
+
res = https.start { |http| http.request(req) }
|
|
103
|
+
counts = YAML.load(res.body)
|
|
104
|
+
counts.delete_if { |date_str, count| count == 0 }
|
|
105
|
+
counts.each do |date_str, count|
|
|
106
|
+
date = Date.parse(date_str)
|
|
107
|
+
counts_per_month[date.year][date.month] += count
|
|
108
|
+
total += count
|
|
109
|
+
end
|
|
110
|
+
print '.'; STDOUT.flush
|
|
111
|
+
end
|
|
112
|
+
puts
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
puts "\nDownloads statistics per month:"
|
|
116
|
+
years = counts_per_month.keys
|
|
117
|
+
puts "\n #{years.map { |year| '%6s:' % year }.join(' ')}"
|
|
118
|
+
(1..12).each do |month|
|
|
119
|
+
print "#{'%2d' % month}:"
|
|
120
|
+
years.each do |year|
|
|
121
|
+
count = counts_per_month[year][month]
|
|
122
|
+
print count > 0 ? '%8d' % count : ' ' * 8
|
|
123
|
+
end
|
|
124
|
+
puts
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
puts "\nTotal: #{total}\n\n"
|
|
128
|
+
|
|
129
|
+
puts "\nRubyGems download statistics per month:"
|
|
130
|
+
years = counts_per_month.keys
|
|
131
|
+
puts ' ' + years.map { |year| '%-12s' % year }.join
|
|
132
|
+
(0..20).each do |l|
|
|
133
|
+
print (l % 10 == 0) ? '%4d' % ((20-l) * 100) : ' '
|
|
134
|
+
years.each do |year|
|
|
135
|
+
(1..12).each do |month|
|
|
136
|
+
count = counts_per_month[year][month]
|
|
137
|
+
if [year, month] == [Date.today.year, Date.today.month]
|
|
138
|
+
count *= (Date.new(Date.today.year, Date.today.month, -1).day.to_f / Date.today.day).to_i
|
|
139
|
+
end
|
|
140
|
+
print count > ((20-l) * 100) ? '*' : ' '
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
puts
|
|
144
|
+
end
|
|
145
|
+
puts ' ' + years.map { |year| '%-12s' % year }.join
|
|
146
|
+
|
|
147
|
+
puts "\nTotal: #{total}\n\n"
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def get_github_issues
|
|
152
|
+
puts 'GitHub login:'
|
|
153
|
+
begin
|
|
154
|
+
require 'rubygems'
|
|
155
|
+
require 'highline/import'
|
|
156
|
+
user = ask('login : ') { |q| q.echo = true }
|
|
157
|
+
pass = ask('password: ') { |q| q.echo = '*' }
|
|
158
|
+
rescue Exception
|
|
159
|
+
print 'user name: '; user = STDIN.gets.chomp
|
|
160
|
+
print ' password: '; pass = STDIN.gets.chomp
|
|
161
|
+
end
|
|
162
|
+
require 'uri'
|
|
163
|
+
require 'net/http'
|
|
164
|
+
require 'net/https'
|
|
165
|
+
require 'openssl'
|
|
166
|
+
require 'yaml'
|
|
167
|
+
host = 'api.github.com'
|
|
168
|
+
base_uri = "https://#{host}/repos/topfunky/gruff"
|
|
169
|
+
https = Net::HTTP.new(host, 443)
|
|
170
|
+
https.use_ssl = true
|
|
171
|
+
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
172
|
+
|
|
173
|
+
milestone_uri = URI("#{base_uri}/milestones")
|
|
174
|
+
req = Net::HTTP::Get.new(milestone_uri.request_uri)
|
|
175
|
+
req.basic_auth(user, pass)
|
|
176
|
+
res = https.start { |http| http.request(req) }
|
|
177
|
+
milestones = YAML.load(res.body).sort_by { |i| Date.parse(i['due_on']) }
|
|
178
|
+
puts milestones.map { |m| "#{'%2d' % m['number']} #{m['title']}" }.join("\n")
|
|
179
|
+
|
|
180
|
+
if defined? ask
|
|
181
|
+
milestone = ask('milestone: ', Integer) { |q| q.echo = true }
|
|
182
|
+
else
|
|
183
|
+
print 'milestone: '; milestone = STDIN.gets.chomp
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
uri = URI("#{base_uri}/issues?milestone=#{milestone}&state=closed&per_page=1000")
|
|
187
|
+
req = Net::HTTP::Get.new(uri.request_uri)
|
|
188
|
+
req.basic_auth(user, pass)
|
|
189
|
+
res = https.start { |http| http.request(req) }
|
|
190
|
+
issues = YAML.load(res.body).sort_by { |i| i['number'] }
|
|
191
|
+
milestone_name = issues[0] ? issues[0]['milestone']['title'] : "No issues for milestone #{milestone}"
|
|
192
|
+
milestone_description = issues[0] ? issues[0]['milestone']['description'] : "No issues for milestone #{milestone}"
|
|
193
|
+
milestone_description = milestone_description.split("\r\n").map{|l|wrap l}.join("\r\n")
|
|
194
|
+
categories = {
|
|
195
|
+
'Features' => 'feature', 'Bugfixes' => 'bug', 'Support' => 'support',
|
|
196
|
+
'Documentation' => 'documentation', 'Pull requests' => nil,
|
|
197
|
+
'Internal' => 'internal', 'Rejected' => 'rejected', 'Other' => nil
|
|
198
|
+
}
|
|
199
|
+
grouped_issues = issues.group_by do |i|
|
|
200
|
+
labels = i['labels'].map { |l| l['name'] }
|
|
201
|
+
cat = nil
|
|
202
|
+
categories.each do |k, v|
|
|
203
|
+
if labels.include? v
|
|
204
|
+
cat = k
|
|
205
|
+
break
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
cat ||= i['pull_request'] && i['pull_request']['html_url'] && 'Pull requests'
|
|
209
|
+
cat ||= 'Other'
|
|
210
|
+
cat
|
|
211
|
+
end
|
|
212
|
+
return categories, grouped_issues, milestone, milestone_description, milestone_name
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def wrap(string, indent = 0)
|
|
216
|
+
string.scan(/\S.{0,72}\S(?=\s|$)|\S+/).join("\n" + ' ' * indent)
|
|
217
|
+
end
|
|
218
|
+
|