gruff 0.3.7 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://travis-ci.org/topfunky/gruff.png?branch=master)](https://travis-ci.org/topfunky/gruff)
|
4
|
+
[![Gem Version](https://badge.fury.io/rb/gruff.png)](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
|
+
![Accumulator bar chart](https://raw.github.com/topfunky/gruff/master/test/output/accum_bar.png)
|
56
|
+
|
57
|
+
### Area chart
|
58
|
+
|
59
|
+
![Area chart](https://raw.github.com/topfunky/gruff/master/test/output/area_keynote.png)
|
60
|
+
|
61
|
+
### Bar chart
|
62
|
+
|
63
|
+
![Bar chart](https://raw.github.com/topfunky/gruff/master/test/output/bar_rails_keynote.png)
|
64
|
+
|
65
|
+
### Bezier chart
|
66
|
+
|
67
|
+
In progress!
|
68
|
+
|
69
|
+
![Bezier chart](https://raw.github.com/topfunky/gruff/master/test/output/bezier_3.png)
|
70
|
+
|
71
|
+
### Bullet chart
|
72
|
+
|
73
|
+
In progress!
|
74
|
+
|
75
|
+
![Bullet chart](https://raw.github.com/topfunky/gruff/master/test/output/bullet_greyscale.png)
|
76
|
+
|
77
|
+
### Dot chart
|
78
|
+
|
79
|
+
![Dot chart](https://raw.github.com/topfunky/gruff/master/test/output/dot.png)
|
80
|
+
|
81
|
+
### Line chart
|
28
82
|
|
29
|
-
|
83
|
+
![Line chart](https://raw.github.com/topfunky/gruff/master/test/output/line_theme_rails_keynote_.png)
|
84
|
+
|
85
|
+
### LineXY chart
|
86
|
+
|
87
|
+
![LineXY chart](https://raw.github.com/topfunky/gruff/master/test/output/line_xy.png)
|
88
|
+
|
89
|
+
### Net chart
|
90
|
+
|
91
|
+
![Net chart](https://raw.github.com/topfunky/gruff/master/test/output/net_wide_graph.png)
|
92
|
+
|
93
|
+
### Pie chart
|
94
|
+
|
95
|
+
![Pie chart](https://raw.github.com/topfunky/gruff/master/test/output/pie_pastel.png)
|
96
|
+
|
97
|
+
### Scatter chart
|
98
|
+
|
99
|
+
![Scatter chart](https://raw.github.com/topfunky/gruff/master/test/output/scatter_basic.png)
|
100
|
+
|
101
|
+
### Side bar chart
|
102
|
+
|
103
|
+
![Side bar chart](https://raw.github.com/topfunky/gruff/master/test/output/side_bar.png)
|
104
|
+
|
105
|
+
### Side stacked bar chart
|
106
|
+
|
107
|
+
![Side stacked bar chart](https://raw.github.com/topfunky/gruff/master/test/output/side_stacked_bar_keynote.png)
|
108
|
+
|
109
|
+
### Spider chart
|
110
|
+
|
111
|
+
![Spider chart](https://raw.github.com/topfunky/gruff/master/test/output/spider_37signals.png)
|
112
|
+
|
113
|
+
### Stacked area chart
|
114
|
+
|
115
|
+
![Stacked area chart](https://raw.github.com/topfunky/gruff/master/test/output/stacked_area_keynote.png)
|
116
|
+
|
117
|
+
### Stacked bar chart
|
118
|
+
|
119
|
+
![Stacked bar chart](https://raw.github.com/topfunky/gruff/master/test/output/stacked_bar_keynote.png)
|
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
|
+
|