gruff 0.4.0-java
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +7 -0
- data/.travis.yml +14 -0
- data/Gemfile +10 -0
- data/History.txt +193 -0
- data/MIT-LICENSE +22 -0
- data/Manifest.txt +81 -0
- data/README.md +139 -0
- data/RELEASE.md +92 -0
- data/Rakefile +218 -0
- data/assets/bubble.png +0 -0
- data/assets/city_scene/background/0000.png +0 -0
- data/assets/city_scene/background/0600.png +0 -0
- data/assets/city_scene/background/2000.png +0 -0
- data/assets/city_scene/clouds/cloudy.png +0 -0
- data/assets/city_scene/clouds/partly_cloudy.png +0 -0
- data/assets/city_scene/clouds/stormy.png +0 -0
- data/assets/city_scene/grass/default.png +0 -0
- data/assets/city_scene/haze/true.png +0 -0
- data/assets/city_scene/number_sample/1.png +0 -0
- data/assets/city_scene/number_sample/2.png +0 -0
- data/assets/city_scene/number_sample/default.png +0 -0
- data/assets/city_scene/sky/0000.png +0 -0
- data/assets/city_scene/sky/0200.png +0 -0
- data/assets/city_scene/sky/0400.png +0 -0
- data/assets/city_scene/sky/0600.png +0 -0
- data/assets/city_scene/sky/0800.png +0 -0
- data/assets/city_scene/sky/1000.png +0 -0
- data/assets/city_scene/sky/1200.png +0 -0
- data/assets/city_scene/sky/1400.png +0 -0
- data/assets/city_scene/sky/1500.png +0 -0
- data/assets/city_scene/sky/1700.png +0 -0
- data/assets/city_scene/sky/2000.png +0 -0
- data/assets/pc306715.jpg +0 -0
- data/assets/plastik/blue.png +0 -0
- data/assets/plastik/green.png +0 -0
- data/assets/plastik/red.png +0 -0
- data/gruff.gemspec +36 -0
- data/init.rb +2 -0
- data/lib/gruff.rb +32 -0
- data/lib/gruff/accumulator_bar.rb +18 -0
- data/lib/gruff/area.rb +51 -0
- data/lib/gruff/bar.rb +108 -0
- data/lib/gruff/bar_conversion.rb +46 -0
- data/lib/gruff/base.rb +1169 -0
- data/lib/gruff/bezier.rb +46 -0
- data/lib/gruff/bullet.rb +111 -0
- data/lib/gruff/deprecated.rb +39 -0
- data/lib/gruff/dot.rb +125 -0
- data/lib/gruff/line.rb +242 -0
- data/lib/gruff/mini/bar.rb +37 -0
- data/lib/gruff/mini/legend.rb +109 -0
- data/lib/gruff/mini/pie.rb +36 -0
- data/lib/gruff/mini/side_bar.rb +35 -0
- data/lib/gruff/net.rb +138 -0
- data/lib/gruff/photo_bar.rb +100 -0
- data/lib/gruff/pie.rb +124 -0
- data/lib/gruff/scatter.rb +264 -0
- data/lib/gruff/scene.rb +209 -0
- data/lib/gruff/side_bar.rb +138 -0
- data/lib/gruff/side_stacked_bar.rb +97 -0
- data/lib/gruff/spider.rb +131 -0
- data/lib/gruff/stacked_area.rb +67 -0
- data/lib/gruff/stacked_bar.rb +57 -0
- data/lib/gruff/stacked_mixin.rb +23 -0
- data/lib/gruff/themes.rb +102 -0
- data/lib/gruff/version.rb +3 -0
- data/rails_generators/gruff/gruff_generator.rb +63 -0
- data/rails_generators/gruff/templates/controller.rb +32 -0
- data/rails_generators/gruff/templates/functional_test.rb +24 -0
- data/test/gruff_test_case.rb +155 -0
- 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 +51 -0
- data/test/test_area.rb +134 -0
- data/test/test_bar.rb +505 -0
- data/test/test_base.rb +8 -0
- data/test/test_bezier.rb +33 -0
- data/test/test_bullet.rb +26 -0
- data/test/test_dot.rb +263 -0
- data/test/test_legend.rb +68 -0
- data/test/test_line.rb +626 -0
- data/test/test_mini_bar.rb +33 -0
- data/test/test_mini_pie.rb +25 -0
- data/test/test_mini_side_bar.rb +36 -0
- data/test/test_net.rb +231 -0
- data/test/test_photo.rb +41 -0
- data/test/test_pie.rb +154 -0
- data/test/test_scatter.rb +233 -0
- data/test/test_scene.rb +100 -0
- data/test/test_side_bar.rb +56 -0
- data/test/test_sidestacked_bar.rb +105 -0
- data/test/test_spider.rb +226 -0
- data/test/test_stacked_area.rb +52 -0
- data/test/test_stacked_bar.rb +52 -0
- metadata +1176 -0
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
ADDED
@@ -0,0 +1,218 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
require 'rake/testtask'
|
4
|
+
require 'rake/clean'
|
5
|
+
|
6
|
+
CLEAN << %w(pkg test/output/*)
|
7
|
+
|
8
|
+
desc 'Run tests'
|
9
|
+
task :default => :test
|
10
|
+
|
11
|
+
task :gem => :build
|
12
|
+
|
13
|
+
Rake::TestTask.new
|
14
|
+
|
15
|
+
namespace :test do
|
16
|
+
desc 'Run mini tests'
|
17
|
+
task :mini => :clean do
|
18
|
+
Dir['test/test_mini*'].each do |file|
|
19
|
+
system "ruby #{file}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
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
|
+
|
data/assets/bubble.png
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/assets/pc306715.jpg
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/gruff.gemspec
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'date'
|
5
|
+
require 'gruff/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = %q{gruff}
|
9
|
+
s.version = Gruff::VERSION
|
10
|
+
# s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ['Geoffrey Grosenbach', 'Uwe Kubosch']
|
12
|
+
s.date = Date.today.to_s
|
13
|
+
s.description = %q{Beautiful graphs for one or multiple datasets. Can be used on websites or in documents.}
|
14
|
+
s.email = %q{boss@topfunky.com}
|
15
|
+
# s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
|
16
|
+
s.files = `git ls-files`.split($/)
|
17
|
+
# s.has_rdoc = true
|
18
|
+
s.homepage = %q{http://nubyonrails.com/pages/gruff}
|
19
|
+
# s.rdoc_options = ["--main", "README.txt"]
|
20
|
+
s.require_paths = %w(lib)
|
21
|
+
# s.rubyforge_project = %q{gruff}
|
22
|
+
# s.rubygems_version = %q{1.3.1}
|
23
|
+
s.summary = %q{Beautiful graphs for one or multiple datasets.}
|
24
|
+
# s.test_files = ["test/test_accumulator_bar.rb", "test/test_area.rb", "test/test_bar.rb", "test/test_base.rb", "test/test_bullet.rb", "test/test_dot.rb", "test/test_legend.rb", "test/test_line.rb", "test/test_mini_bar.rb", "test/test_mini_pie.rb", "test/test_mini_side_bar.rb", "test/test_net.rb", "test/test_photo.rb", "test/test_pie.rb", "test/test_scene.rb", "test/test_side_bar.rb", "test/test_sidestacked_bar.rb", "test/test_spider.rb", "test/test_stacked_area.rb", "test/test_stacked_bar.rb"]
|
25
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
26
|
+
s.executables = s.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
27
|
+
s.specification_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
28
|
+
if defined? JRUBY_VERSION
|
29
|
+
s.platform = 'java'
|
30
|
+
s.add_dependency 'rmagick4j'
|
31
|
+
else
|
32
|
+
s.add_dependency 'rmagick'
|
33
|
+
end
|
34
|
+
s.add_development_dependency('rake')
|
35
|
+
s.license = 'MIT'
|
36
|
+
end
|
data/init.rb
ADDED
data/lib/gruff.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'gruff/version'
|
2
|
+
|
3
|
+
# Extra full path added to fix loading errors on some installations.
|
4
|
+
|
5
|
+
%w(
|
6
|
+
themes
|
7
|
+
base
|
8
|
+
area
|
9
|
+
bar
|
10
|
+
bezier
|
11
|
+
bullet
|
12
|
+
dot
|
13
|
+
line
|
14
|
+
net
|
15
|
+
pie
|
16
|
+
scatter
|
17
|
+
spider
|
18
|
+
stacked_area
|
19
|
+
stacked_bar
|
20
|
+
side_stacked_bar
|
21
|
+
side_bar
|
22
|
+
accumulator_bar
|
23
|
+
|
24
|
+
scene
|
25
|
+
|
26
|
+
mini/legend
|
27
|
+
mini/bar
|
28
|
+
mini/pie
|
29
|
+
mini/side_bar
|
30
|
+
).each do |filename|
|
31
|
+
require "gruff/#{filename}"
|
32
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/base'
|
2
|
+
|
3
|
+
##
|
4
|
+
# A special bar graph that shows a single dataset as a set of
|
5
|
+
# stacked bars. The bottom bar shows the running total and
|
6
|
+
# the top bar shows the new value being added to the array.
|
7
|
+
|
8
|
+
class Gruff::AccumulatorBar < Gruff::StackedBar
|
9
|
+
def draw
|
10
|
+
raise(Gruff::IncorrectNumberOfDatasetsException) unless @data.length == 1
|
11
|
+
|
12
|
+
accum_array = @data.first[DATA_VALUES_INDEX][0..-2].inject([0]) { |a, v| a << a.last + v}
|
13
|
+
data 'Accumulator', accum_array
|
14
|
+
set_colors
|
15
|
+
@data.reverse!
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|