gruff 0.3.7 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (540) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -1
  3. data/.travis.yml +6 -0
  4. data/Gemfile +2 -8
  5. data/History.txt +76 -0
  6. data/MIT-LICENSE +3 -2
  7. data/README.md +96 -6
  8. data/RELEASE.md +92 -0
  9. data/Rakefile +203 -23
  10. data/gruff.gemspec +13 -10
  11. data/lib/gruff.rb +8 -7
  12. data/lib/gruff/accumulator_bar.rb +4 -13
  13. data/lib/gruff/area.rb +6 -13
  14. data/lib/gruff/bar.rb +24 -3
  15. data/lib/gruff/bar_conversion.rb +31 -31
  16. data/lib/gruff/base.rb +310 -267
  17. data/lib/gruff/bezier.rb +46 -0
  18. data/lib/gruff/bullet.rb +3 -1
  19. data/lib/gruff/dot.rb +56 -44
  20. data/lib/gruff/line.rb +83 -69
  21. data/lib/gruff/net.rb +7 -9
  22. data/lib/gruff/pie.rb +2 -4
  23. data/lib/gruff/scatter.rb +25 -29
  24. data/lib/gruff/side_bar.rb +54 -37
  25. data/lib/gruff/side_stacked_bar.rb +25 -5
  26. data/lib/gruff/spider.rb +22 -21
  27. data/lib/gruff/themes.rb +102 -0
  28. data/lib/gruff/version.rb +1 -1
  29. data/test/gruff_test_case.rb +68 -38
  30. data/test/image_compare.rb +58 -0
  31. data/test/output/accum_bar.png +0 -0
  32. data/test/output/area_keynote.png +0 -0
  33. data/test/output/area_keynote_small.png +0 -0
  34. data/test/output/area_many.png +0 -0
  35. data/test/output/area_many_areas_small.png +0 -0
  36. data/test/output/area_tiny.png +0 -0
  37. data/test/output/area_wide.png +0 -0
  38. data/test/output/bar2_wrapped_legend_16_400.png +0 -0
  39. data/test/output/bar2_wrapped_legend_16_800.png +0 -0
  40. data/test/output/bar2_wrapped_legend_30_400.png +0 -0
  41. data/test/output/bar2_wrapped_legend_30_800.png +0 -0
  42. data/test/output/bar2_wrapped_legend_4_400.png +0 -0
  43. data/test/output/bar2_wrapped_legend_4_800.png +0 -0
  44. data/test/output/bar2_wrapped_legend__400.png +0 -0
  45. data/test/output/bar2_wrapped_legend__800.png +0 -0
  46. data/test/output/bar_background_gradient_bottom_top.png +0 -0
  47. data/test/output/bar_background_gradient_left_right.png +0 -0
  48. data/test/output/bar_background_gradient_right_left.png +0 -0
  49. data/test/output/bar_background_gradient_top_bottom.png +0 -0
  50. data/test/output/bar_background_gradient_topleft_bottomright.png +0 -0
  51. data/test/output/bar_background_gradient_topright_bottomleft.png +0 -0
  52. data/test/output/bar_formatted_numbers.png +0 -0
  53. data/test/output/bar_keynote.png +0 -0
  54. data/test/output/bar_keynote_small.png +0 -0
  55. data/test/output/bar_long_legend_text.png +0 -0
  56. data/test/output/bar_manual_colors.png +0 -0
  57. data/test/output/bar_marker_shadow.png +0 -0
  58. data/test/output/bar_nearly_zero_max_10.png +0 -0
  59. data/test/output/bar_no_legend.png +0 -0
  60. data/test/output/bar_no_line_markers.png +0 -0
  61. data/test/output/bar_no_title.png +0 -0
  62. data/test/output/bar_no_title_or_legend.png +0 -0
  63. data/test/output/bar_odeo.png +0 -0
  64. data/test/output/bar_one_value.png +0 -0
  65. data/test/output/bar_pos_neg.png +0 -0
  66. data/test/output/bar_rails_keynote.png +0 -0
  67. data/test/output/bar_set_absolute_trunc.png +0 -0
  68. data/test/output/bar_set_label_stagger_height.png +0 -0
  69. data/test/output/bar_set_legend_box_size_lg.png +0 -0
  70. data/test/output/bar_set_legend_box_size_sm.png +0 -0
  71. data/test/output/bar_set_marker.png +0 -0
  72. data/test/output/bar_set_trailing_dots_trunc.png +0 -0
  73. data/test/output/bar_spacing_full.png +0 -0
  74. data/test/output/bar_spacing_half.png +0 -0
  75. data/test/output/bar_spacing_none.png +0 -0
  76. data/test/output/bar_tall_graph.png +0 -0
  77. data/test/output/bar_tall_graph_small.png +0 -0
  78. data/test/output/bar_themed.png +0 -0
  79. data/test/output/bar_title_margin.png +0 -0
  80. data/test/output/bar_value_labels.png +0 -0
  81. data/test/output/bar_wide_graph.png +0 -0
  82. data/test/output/bar_wide_graph_small.png +0 -0
  83. data/test/output/bar_wrapped_legend_16_400.png +0 -0
  84. data/test/output/bar_wrapped_legend_16_800.png +0 -0
  85. data/test/output/bar_wrapped_legend_30_400.png +0 -0
  86. data/test/output/bar_wrapped_legend_30_800.png +0 -0
  87. data/test/output/bar_wrapped_legend_4_400.png +0 -0
  88. data/test/output/bar_wrapped_legend_4_800.png +0 -0
  89. data/test/output/bar_wrapped_legend__400.png +0 -0
  90. data/test/output/bar_wrapped_legend__800.png +0 -0
  91. data/test/output/bar_x_y_labels.png +0 -0
  92. data/test/output/bar_y_increment_1.png +0 -0
  93. data/test/output/bar_y_increment_2.0.png +0 -0
  94. data/test/output/bar_y_increment_20.png +0 -0
  95. data/test/output/bar_y_increment_5.png +0 -0
  96. data/test/output/bar_zero_marker_count.png +0 -0
  97. data/test/output/bar_zero_spacing.png +0 -0
  98. data/test/output/bezier.png +0 -0
  99. data/test/output/bezier_2.png +0 -0
  100. data/test/output/bezier_3.png +0 -0
  101. data/test/output/bullet_greyscale.png +0 -0
  102. data/test/output/bullet_no_options.png +0 -0
  103. data/test/output/dot.png +0 -0
  104. data/test/output/dot_manual_colors.png +0 -0
  105. data/test/output/dot_nearly_zero_max_10.png +0 -0
  106. data/test/output/dot_no_legend.png +0 -0
  107. data/test/output/dot_no_line_markers.png +0 -0
  108. data/test/output/dot_no_title.png +0 -0
  109. data/test/output/dot_no_title_or_legend.png +0 -0
  110. data/test/output/dot_one_value.png +0 -0
  111. data/test/output/dot_pos_neg.png +0 -0
  112. data/test/output/dot_set_legend_box_size_lg.png +0 -0
  113. data/test/output/dot_set_legend_box_size_sm.png +0 -0
  114. data/test/output/dot_set_marker.png +0 -0
  115. data/test/output/dot_small.png +0 -0
  116. data/test/output/dot_tall_graph.png +0 -0
  117. data/test/output/dot_tall_graph_small.png +0 -0
  118. data/test/output/dot_themed.png +0 -0
  119. data/test/output/dot_wide_graph.png +0 -0
  120. data/test/output/dot_wide_graph_small.png +0 -0
  121. data/test/output/dot_x_y_labels.png +0 -0
  122. data/test/output/dot_y_increment_1.png +0 -0
  123. data/test/output/dot_y_increment_2.0.png +0 -0
  124. data/test/output/dot_y_increment_20.png +0 -0
  125. data/test/output/dot_y_increment_5.png +0 -0
  126. data/test/output/enhancements-1.png +0 -0
  127. data/test/output/enhancements.png +0 -0
  128. data/test/output/line_all_neg.png +0 -0
  129. data/test/output/line_all_neg_400.png +0 -0
  130. data/test/output/line_all_neg_no_max.png +0 -0
  131. data/test/output/line_baseline.png +0 -0
  132. data/test/output/line_hang_value.png +0 -0
  133. data/test/output/line_hide_dots.png +0 -0
  134. data/test/output/line_hide_lines.png +0 -0
  135. data/test/output/line_jruby_error.png +0 -0
  136. data/test/output/line_large.png +0 -0
  137. data/test/output/line_large_baseline.png +0 -0
  138. data/test/output/line_legend_at_bottom.png +0 -0
  139. data/test/output/line_many.png +0 -0
  140. data/test/output/line_many_lines_small.png +0 -0
  141. data/test/output/line_many_numbers.png +0 -0
  142. data/test/output/line_marker_label_accuracy.png +0 -0
  143. data/test/output/line_more_sets_than_colors.png +0 -0
  144. data/test/output/line_no_data.png +0 -0
  145. data/test/output/line_no_data_msg.png +0 -0
  146. data/test/output/line_no_data_other.png +0 -0
  147. data/test/output/line_no_hide.png +0 -0
  148. data/test/output/line_no_legend.png +0 -0
  149. data/test/output/line_no_line_markers.png +0 -0
  150. data/test/output/line_no_title.png +0 -0
  151. data/test/output/line_nothing_but_the_graph.png +0 -0
  152. data/test/output/line_one_value.png +0 -0
  153. data/test/output/line_one_value_array.png +0 -0
  154. data/test/output/line_pos_neg.png +0 -0
  155. data/test/output/line_pos_neg_400.png +0 -0
  156. data/test/output/line_similar_high_end_values.png +0 -0
  157. data/test/output/line_similar_high_end_values_with_floor.png +0 -0
  158. data/test/output/line_small_small_zero.png +0 -0
  159. data/test/output/line_small_values.png +0 -0
  160. data/test/output/line_small_values_small.png +0 -0
  161. data/test/output/line_small_zero.png +0 -0
  162. data/test/output/line_some_nil_points.png +0 -0
  163. data/test/output/line_theme_37signals_.png +0 -0
  164. data/test/output/line_theme_37signals_400.png +0 -0
  165. data/test/output/line_theme_keynote_.png +0 -0
  166. data/test/output/line_theme_keynote_400.png +0 -0
  167. data/test/output/line_theme_odeo_.png +0 -0
  168. data/test/output/line_theme_odeo_400.png +0 -0
  169. data/test/output/line_theme_rails_keynote_.png +0 -0
  170. data/test/output/line_theme_rails_keynote_400.png +0 -0
  171. data/test/output/line_tiny.png +0 -0
  172. data/test/output/line_transparent.png +0 -0
  173. data/test/output/line_very_small.png +0 -0
  174. data/test/output/line_wide_graph.png +0 -0
  175. data/test/output/line_wide_graph_small.png +0 -0
  176. data/test/output/line_xy.png +0 -0
  177. data/test/output/line_xy_pairs.png +0 -0
  178. data/test/output/line_y_axis_increment.png +0 -0
  179. data/test/output/mini_bar.png +0 -0
  180. data/test/output/mini_pie.png +0 -0
  181. data/test/output/mini_pie_right_legend.png +0 -0
  182. data/test/output/mini_side_bar.png +0 -0
  183. data/test/output/mini_side_bar_multi_color.png +0 -0
  184. data/test/output/net_dots_tiny.png +0 -0
  185. data/test/output/net_large.png +0 -0
  186. data/test/output/net_many.png +0 -0
  187. data/test/output/net_many_nets_small.png +0 -0
  188. data/test/output/net_no_data.png +0 -0
  189. data/test/output/net_no_data_msg.png +0 -0
  190. data/test/output/net_no_data_other.png +0 -0
  191. data/test/output/net_no_legend.png +0 -0
  192. data/test/output/net_no_net_markers.png +0 -0
  193. data/test/output/net_no_title.png +0 -0
  194. data/test/output/net_nothing_but_the_graph.png +0 -0
  195. data/test/output/net_similar_high_end_values.png +0 -0
  196. data/test/output/net_small.png +0 -0
  197. data/test/output/net_small_small.png +0 -0
  198. data/test/output/net_small_small_zero.png +0 -0
  199. data/test/output/net_small_zero.png +0 -0
  200. data/test/output/net_wide_graph.png +0 -0
  201. data/test/output/net_wide_graph_small.png +0 -0
  202. data/test/output/pie_equal.png +0 -0
  203. data/test/output/pie_grey.png +0 -0
  204. data/test/output/pie_keynote.png +0 -0
  205. data/test/output/pie_keynote_small.png +0 -0
  206. data/test/output/pie_legend.png +0 -0
  207. data/test/output/pie_legend_small.png +0 -0
  208. data/test/output/pie_nearly_equal.png +0 -0
  209. data/test/output/pie_one_val.png +0 -0
  210. data/test/output/pie_pastel.png +0 -0
  211. data/test/output/pie_simple.png +0 -0
  212. data/test/output/pie_wide.png +0 -0
  213. data/test/output/pie_wrapped_legend_16_400.png +0 -0
  214. data/test/output/pie_wrapped_legend_16_800.png +0 -0
  215. data/test/output/pie_wrapped_legend_30_400.png +0 -0
  216. data/test/output/pie_wrapped_legend_30_800.png +0 -0
  217. data/test/output/pie_wrapped_legend_4_400.png +0 -0
  218. data/test/output/pie_wrapped_legend_4_800.png +0 -0
  219. data/test/output/pie_wrapped_legend__400.png +0 -0
  220. data/test/output/pie_wrapped_legend__800.png +0 -0
  221. data/test/output/pie_zero.png +0 -0
  222. data/test/output/scatter_all_neg.png +0 -0
  223. data/test/output/scatter_all_neg_400.png +0 -0
  224. data/test/output/scatter_basic.png +0 -0
  225. data/test/output/scatter_many.png +0 -0
  226. data/test/output/scatter_no_data.png +0 -0
  227. data/test/output/scatter_no_data_msg.png +0 -0
  228. data/test/output/scatter_no_data_other.png +0 -0
  229. data/test/output/scatter_no_hide.png +0 -0
  230. data/test/output/scatter_no_labels.png +0 -0
  231. data/test/output/scatter_no_legend.png +0 -0
  232. data/test/output/scatter_no_line_markers.png +0 -0
  233. data/test/output/scatter_no_title.png +0 -0
  234. data/test/output/scatter_nothing_but_the_graph.png +0 -0
  235. data/test/output/scatter_pos_neg.png +0 -0
  236. data/test/output/scatter_pos_neg_400.png +0 -0
  237. data/test/output/scatter_wide_graph.png +0 -0
  238. data/test/output/scatter_wide_graph_small.png +0 -0
  239. data/test/output/scene_hazy_night.png +0 -0
  240. data/test/output/scene_not_hazy_day.png +0 -0
  241. data/test/output/scene_partly_cloudy_day.png +0 -0
  242. data/test/output/scene_stormy_day.png +0 -0
  243. data/test/output/scene_stormy_night.png +0 -0
  244. data/test/output/side_bar.png +0 -0
  245. data/test/output/side_bar_data_range.png +0 -0
  246. data/test/output/side_bar_labels.png +0 -0
  247. data/test/output/side_bar_spacing_full.png +0 -0
  248. data/test/output/side_bar_spacing_half.png +0 -0
  249. data/test/output/side_bar_spacing_none.png +0 -0
  250. data/test/output/side_stacked_bar_keynote.png +0 -0
  251. data/test/output/side_stacked_bar_keynote_small.png +0 -0
  252. data/test/output/side_stacked_bar_labels.png +0 -0
  253. data/test/output/side_stacked_bar_long_label.png +0 -0
  254. data/test/output/side_stacked_bar_wide.png +0 -0
  255. data/test/output/spider_37signals.png +0 -0
  256. data/test/output/spider_equal.png +0 -0
  257. data/test/output/spider_keynote.png +0 -0
  258. data/test/output/spider_legend.png +0 -0
  259. data/test/output/spider_legend_small.png +0 -0
  260. data/test/output/spider_lots_of_data.png +0 -0
  261. data/test/output/spider_lots_of_data_normal_names.png +0 -0
  262. data/test/output/spider_nearly_equal.png +0 -0
  263. data/test/output/spider_no_axes.png +0 -0
  264. data/test/output/spider_no_background.png +0 -0
  265. data/test/output/spider_no_print.png +0 -0
  266. data/test/output/spider_overlay_1.png +0 -0
  267. data/test/output/spider_overlay_2.png +0 -0
  268. data/test/output/spider_rotation.png +0 -0
  269. data/test/output/spider_small.png +0 -0
  270. data/test/output/spider_wide.png +0 -0
  271. data/test/output/spider_zero.png +0 -0
  272. data/test/output/stacked_area_keynote.png +0 -0
  273. data/test/output/stacked_area_keynote_small.png +0 -0
  274. data/test/output/stacked_bar_keynote.png +0 -0
  275. data/test/output/stacked_bar_keynote_small.png +0 -0
  276. data/test/output_java/accum_bar.png +0 -0
  277. data/test/output_java/area_keynote.png +0 -0
  278. data/test/output_java/area_keynote_small.png +0 -0
  279. data/test/output_java/area_many.png +0 -0
  280. data/test/output_java/area_many_areas_small.png +0 -0
  281. data/test/output_java/area_tiny.png +0 -0
  282. data/test/output_java/area_wide.png +0 -0
  283. data/test/output_java/bar2_wrapped_legend_16_400.png +0 -0
  284. data/test/output_java/bar2_wrapped_legend_16_800.png +0 -0
  285. data/test/output_java/bar2_wrapped_legend_30_400.png +0 -0
  286. data/test/output_java/bar2_wrapped_legend_30_800.png +0 -0
  287. data/test/output_java/bar2_wrapped_legend_4_400.png +0 -0
  288. data/test/output_java/bar2_wrapped_legend_4_800.png +0 -0
  289. data/test/output_java/bar2_wrapped_legend__400.png +0 -0
  290. data/test/output_java/bar2_wrapped_legend__800.png +0 -0
  291. data/test/output_java/bar_background_gradient_bottom_top.png +0 -0
  292. data/test/output_java/bar_background_gradient_left_right.png +0 -0
  293. data/test/output_java/bar_background_gradient_right_left.png +0 -0
  294. data/test/output_java/bar_background_gradient_top_bottom.png +0 -0
  295. data/test/output_java/bar_background_gradient_topleft_bottomright.png +0 -0
  296. data/test/output_java/bar_background_gradient_topright_bottomleft.png +0 -0
  297. data/test/output_java/bar_formatted_numbers.png +0 -0
  298. data/test/output_java/bar_keynote.png +0 -0
  299. data/test/output_java/bar_keynote_small.png +0 -0
  300. data/test/output_java/bar_long_legend_text.png +0 -0
  301. data/test/output_java/bar_manual_colors.png +0 -0
  302. data/test/output_java/bar_marker_shadow.png +0 -0
  303. data/test/output_java/bar_nearly_zero_max_10.png +0 -0
  304. data/test/output_java/bar_no_legend.png +0 -0
  305. data/test/output_java/bar_no_line_markers.png +0 -0
  306. data/test/output_java/bar_no_title.png +0 -0
  307. data/test/output_java/bar_no_title_or_legend.png +0 -0
  308. data/test/output_java/bar_odeo.png +0 -0
  309. data/test/output_java/bar_one_value.png +0 -0
  310. data/test/output_java/bar_pos_neg.png +0 -0
  311. data/test/output_java/bar_rails_keynote.png +0 -0
  312. data/test/output_java/bar_set_absolute_trunc.png +0 -0
  313. data/test/output_java/bar_set_label_stagger_height.png +0 -0
  314. data/test/output_java/bar_set_legend_box_size_lg.png +0 -0
  315. data/test/output_java/bar_set_legend_box_size_sm.png +0 -0
  316. data/test/output_java/bar_set_marker.png +0 -0
  317. data/test/output_java/bar_set_trailing_dots_trunc.png +0 -0
  318. data/test/output_java/bar_spacing_full.png +0 -0
  319. data/test/output_java/bar_spacing_half.png +0 -0
  320. data/test/output_java/bar_spacing_none.png +0 -0
  321. data/test/output_java/bar_tall_graph.png +0 -0
  322. data/test/output_java/bar_tall_graph_small.png +0 -0
  323. data/test/output_java/bar_themed.png +0 -0
  324. data/test/output_java/bar_title_margin.png +0 -0
  325. data/test/output_java/bar_value_labels.png +0 -0
  326. data/test/output_java/bar_wide_graph.png +0 -0
  327. data/test/output_java/bar_wide_graph_small.png +0 -0
  328. data/test/output_java/bar_wrapped_legend_16_400.png +0 -0
  329. data/test/output_java/bar_wrapped_legend_16_800.png +0 -0
  330. data/test/output_java/bar_wrapped_legend_30_400.png +0 -0
  331. data/test/output_java/bar_wrapped_legend_30_800.png +0 -0
  332. data/test/output_java/bar_wrapped_legend_4_400.png +0 -0
  333. data/test/output_java/bar_wrapped_legend_4_800.png +0 -0
  334. data/test/output_java/bar_wrapped_legend__400.png +0 -0
  335. data/test/output_java/bar_wrapped_legend__800.png +0 -0
  336. data/test/output_java/bar_x_y_labels.png +0 -0
  337. data/test/output_java/bar_y_increment_1.png +0 -0
  338. data/test/output_java/bar_y_increment_2.0.png +0 -0
  339. data/test/output_java/bar_y_increment_20.png +0 -0
  340. data/test/output_java/bar_y_increment_5.png +0 -0
  341. data/test/output_java/bar_zero_marker_count.png +0 -0
  342. data/test/output_java/bar_zero_spacing.png +0 -0
  343. data/test/output_java/bezier.png +0 -0
  344. data/test/output_java/bezier_2.png +0 -0
  345. data/test/output_java/bezier_3.png +0 -0
  346. data/test/output_java/bullet_greyscale.png +0 -0
  347. data/test/output_java/bullet_no_options.png +0 -0
  348. data/test/output_java/dot.png +0 -0
  349. data/test/output_java/dot_manual_colors.png +0 -0
  350. data/test/output_java/dot_nearly_zero_max_10.png +0 -0
  351. data/test/output_java/dot_no_legend.png +0 -0
  352. data/test/output_java/dot_no_line_markers.png +0 -0
  353. data/test/output_java/dot_no_title.png +0 -0
  354. data/test/output_java/dot_no_title_or_legend.png +0 -0
  355. data/test/output_java/dot_one_value.png +0 -0
  356. data/test/output_java/dot_pos_neg.png +0 -0
  357. data/test/output_java/dot_set_legend_box_size_lg.png +0 -0
  358. data/test/output_java/dot_set_legend_box_size_sm.png +0 -0
  359. data/test/output_java/dot_set_marker.png +0 -0
  360. data/test/output_java/dot_small.png +0 -0
  361. data/test/output_java/dot_tall_graph.png +0 -0
  362. data/test/output_java/dot_tall_graph_small.png +0 -0
  363. data/test/output_java/dot_themed.png +0 -0
  364. data/test/output_java/dot_wide_graph.png +0 -0
  365. data/test/output_java/dot_wide_graph_small.png +0 -0
  366. data/test/output_java/dot_x_y_labels.png +0 -0
  367. data/test/output_java/dot_y_increment_1.png +0 -0
  368. data/test/output_java/dot_y_increment_2.0.png +0 -0
  369. data/test/output_java/dot_y_increment_20.png +0 -0
  370. data/test/output_java/dot_y_increment_5.png +0 -0
  371. data/test/output_java/enhancements-1.png +0 -0
  372. data/test/output_java/enhancements.png +0 -0
  373. data/test/output_java/line_all_neg.png +0 -0
  374. data/test/output_java/line_all_neg_400.png +0 -0
  375. data/test/output_java/line_all_neg_no_max.png +0 -0
  376. data/test/output_java/line_baseline.png +0 -0
  377. data/test/output_java/line_hang_value.png +0 -0
  378. data/test/output_java/line_hide_dots.png +0 -0
  379. data/test/output_java/line_hide_lines.png +0 -0
  380. data/test/output_java/line_jruby_error.png +0 -0
  381. data/test/output_java/line_large.png +0 -0
  382. data/test/output_java/line_large_baseline.png +0 -0
  383. data/test/output_java/line_legend_at_bottom.png +0 -0
  384. data/test/output_java/line_many.png +0 -0
  385. data/test/output_java/line_many_lines_small.png +0 -0
  386. data/test/output_java/line_many_numbers.png +0 -0
  387. data/test/output_java/line_marker_label_accuracy.png +0 -0
  388. data/test/output_java/line_more_sets_than_colors.png +0 -0
  389. data/test/output_java/line_no_data.png +0 -0
  390. data/test/output_java/line_no_data_msg.png +0 -0
  391. data/test/output_java/line_no_data_other.png +0 -0
  392. data/test/output_java/line_no_hide.png +0 -0
  393. data/test/output_java/line_no_legend.png +0 -0
  394. data/test/output_java/line_no_line_markers.png +0 -0
  395. data/test/output_java/line_no_title.png +0 -0
  396. data/test/output_java/line_nothing_but_the_graph.png +0 -0
  397. data/test/output_java/line_one_value.png +0 -0
  398. data/test/output_java/line_one_value_array.png +0 -0
  399. data/test/output_java/line_pos_neg.png +0 -0
  400. data/test/output_java/line_pos_neg_400.png +0 -0
  401. data/test/output_java/line_similar_high_end_values.png +0 -0
  402. data/test/output_java/line_similar_high_end_values_with_floor.png +0 -0
  403. data/test/output_java/line_small_small_zero.png +0 -0
  404. data/test/output_java/line_small_values.png +0 -0
  405. data/test/output_java/line_small_values_small.png +0 -0
  406. data/test/output_java/line_small_zero.png +0 -0
  407. data/test/output_java/line_some_nil_points.png +0 -0
  408. data/test/output_java/line_theme_37signals_.png +0 -0
  409. data/test/output_java/line_theme_37signals_400.png +0 -0
  410. data/test/output_java/line_theme_keynote_.png +0 -0
  411. data/test/output_java/line_theme_keynote_400.png +0 -0
  412. data/test/output_java/line_theme_odeo_.png +0 -0
  413. data/test/output_java/line_theme_odeo_400.png +0 -0
  414. data/test/output_java/line_theme_rails_keynote_.png +0 -0
  415. data/test/output_java/line_theme_rails_keynote_400.png +0 -0
  416. data/test/output_java/line_tiny.png +0 -0
  417. data/test/output_java/line_transparent.png +0 -0
  418. data/test/output_java/line_very_small.png +0 -0
  419. data/test/output_java/line_wide_graph.png +0 -0
  420. data/test/output_java/line_wide_graph_small.png +0 -0
  421. data/test/output_java/line_xy.png +0 -0
  422. data/test/output_java/line_xy_pairs.png +0 -0
  423. data/test/output_java/line_y_axis_increment.png +0 -0
  424. data/test/output_java/mini_bar.png +0 -0
  425. data/test/output_java/mini_pie.png +0 -0
  426. data/test/output_java/mini_pie_right_legend.png +0 -0
  427. data/test/output_java/mini_side_bar.png +0 -0
  428. data/test/output_java/mini_side_bar_multi_color.png +0 -0
  429. data/test/output_java/net_dots_tiny.png +0 -0
  430. data/test/output_java/net_large.png +0 -0
  431. data/test/output_java/net_many.png +0 -0
  432. data/test/output_java/net_many_nets_small.png +0 -0
  433. data/test/output_java/net_no_data.png +0 -0
  434. data/test/output_java/net_no_data_msg.png +0 -0
  435. data/test/output_java/net_no_data_other.png +0 -0
  436. data/test/output_java/net_no_legend.png +0 -0
  437. data/test/output_java/net_no_net_markers.png +0 -0
  438. data/test/output_java/net_no_title.png +0 -0
  439. data/test/output_java/net_nothing_but_the_graph.png +0 -0
  440. data/test/output_java/net_similar_high_end_values.png +0 -0
  441. data/test/output_java/net_small.png +0 -0
  442. data/test/output_java/net_small_small.png +0 -0
  443. data/test/output_java/net_small_small_zero.png +0 -0
  444. data/test/output_java/net_small_zero.png +0 -0
  445. data/test/output_java/net_wide_graph.png +0 -0
  446. data/test/output_java/net_wide_graph_small.png +0 -0
  447. data/test/output_java/pie_equal.png +0 -0
  448. data/test/output_java/pie_grey.png +0 -0
  449. data/test/output_java/pie_keynote.png +0 -0
  450. data/test/output_java/pie_keynote_small.png +0 -0
  451. data/test/output_java/pie_legend.png +0 -0
  452. data/test/output_java/pie_legend_small.png +0 -0
  453. data/test/output_java/pie_nearly_equal.png +0 -0
  454. data/test/output_java/pie_one_val.png +0 -0
  455. data/test/output_java/pie_pastel.png +0 -0
  456. data/test/output_java/pie_simple.png +0 -0
  457. data/test/output_java/pie_wide.png +0 -0
  458. data/test/output_java/pie_wrapped_legend_16_400.png +0 -0
  459. data/test/output_java/pie_wrapped_legend_16_800.png +0 -0
  460. data/test/output_java/pie_wrapped_legend_30_400.png +0 -0
  461. data/test/output_java/pie_wrapped_legend_30_800.png +0 -0
  462. data/test/output_java/pie_wrapped_legend_4_400.png +0 -0
  463. data/test/output_java/pie_wrapped_legend_4_800.png +0 -0
  464. data/test/output_java/pie_wrapped_legend__400.png +0 -0
  465. data/test/output_java/pie_wrapped_legend__800.png +0 -0
  466. data/test/output_java/pie_zero.png +0 -0
  467. data/test/output_java/scatter_all_neg.png +0 -0
  468. data/test/output_java/scatter_all_neg_400.png +0 -0
  469. data/test/output_java/scatter_basic.png +0 -0
  470. data/test/output_java/scatter_many.png +0 -0
  471. data/test/output_java/scatter_no_data.png +0 -0
  472. data/test/output_java/scatter_no_data_msg.png +0 -0
  473. data/test/output_java/scatter_no_data_other.png +0 -0
  474. data/test/output_java/scatter_no_hide.png +0 -0
  475. data/test/output_java/scatter_no_labels.png +0 -0
  476. data/test/output_java/scatter_no_legend.png +0 -0
  477. data/test/output_java/scatter_no_line_markers.png +0 -0
  478. data/test/output_java/scatter_no_title.png +0 -0
  479. data/test/output_java/scatter_nothing_but_the_graph.png +0 -0
  480. data/test/output_java/scatter_pos_neg.png +0 -0
  481. data/test/output_java/scatter_pos_neg_400.png +0 -0
  482. data/test/output_java/scatter_wide_graph.png +0 -0
  483. data/test/output_java/scatter_wide_graph_small.png +0 -0
  484. data/test/output_java/scene_hazy_night.png +0 -0
  485. data/test/output_java/scene_not_hazy_day.png +0 -0
  486. data/test/output_java/scene_partly_cloudy_day.png +0 -0
  487. data/test/output_java/scene_stormy_day.png +0 -0
  488. data/test/output_java/scene_stormy_night.png +0 -0
  489. data/test/output_java/side_bar.png +0 -0
  490. data/test/output_java/side_bar_data_range.png +0 -0
  491. data/test/output_java/side_bar_labels.png +0 -0
  492. data/test/output_java/side_bar_spacing_full.png +0 -0
  493. data/test/output_java/side_bar_spacing_half.png +0 -0
  494. data/test/output_java/side_bar_spacing_none.png +0 -0
  495. data/test/output_java/side_stacked_bar_keynote.png +0 -0
  496. data/test/output_java/side_stacked_bar_keynote_small.png +0 -0
  497. data/test/output_java/side_stacked_bar_labels.png +0 -0
  498. data/test/output_java/side_stacked_bar_long_label.png +0 -0
  499. data/test/output_java/side_stacked_bar_wide.png +0 -0
  500. data/test/output_java/spider_37signals.png +0 -0
  501. data/test/output_java/spider_equal.png +0 -0
  502. data/test/output_java/spider_keynote.png +0 -0
  503. data/test/output_java/spider_legend.png +0 -0
  504. data/test/output_java/spider_legend_small.png +0 -0
  505. data/test/output_java/spider_lots_of_data.png +0 -0
  506. data/test/output_java/spider_lots_of_data_normal_names.png +0 -0
  507. data/test/output_java/spider_nearly_equal.png +0 -0
  508. data/test/output_java/spider_no_axes.png +0 -0
  509. data/test/output_java/spider_no_background.png +0 -0
  510. data/test/output_java/spider_no_print.png +0 -0
  511. data/test/output_java/spider_overlay_1.png +0 -0
  512. data/test/output_java/spider_overlay_2.png +0 -0
  513. data/test/output_java/spider_rotation.png +0 -0
  514. data/test/output_java/spider_small.png +0 -0
  515. data/test/output_java/spider_wide.png +0 -0
  516. data/test/output_java/spider_zero.png +0 -0
  517. data/test/output_java/stacked_area_keynote.png +0 -0
  518. data/test/output_java/stacked_area_keynote_small.png +0 -0
  519. data/test/output_java/stacked_bar_keynote.png +0 -0
  520. data/test/output_java/stacked_bar_keynote_small.png +0 -0
  521. data/test/test_accumulator_bar.rb +7 -6
  522. data/test/test_area.rb +2 -2
  523. data/test/test_bar.rb +296 -112
  524. data/test/test_bezier.rb +33 -0
  525. data/test/test_bullet.rb +26 -26
  526. data/test/test_dot.rb +44 -54
  527. data/test/test_legend.rb +29 -29
  528. data/test/test_line.rb +250 -218
  529. data/test/test_net.rb +2 -1
  530. data/test/test_pie.rb +2 -2
  531. data/test/test_scatter.rb +85 -85
  532. data/test/test_side_bar.rb +13 -0
  533. data/test/test_sidestacked_bar.rb +16 -0
  534. data/test/test_spider.rb +11 -1
  535. data/test/test_stacked_area.rb +5 -5
  536. metadata +1041 -49
  537. data/.rvmrc +0 -5
  538. data/Gemfile.lock +0 -20
  539. data/LICENSE.txt +0 -22
  540. 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
@@ -1,6 +1,7 @@
1
+ *~
1
2
  /.idea/
2
3
  /pkg/
3
4
  .DS_Store
4
- /test/output
5
5
  .bundle
6
6
  .yardoc
7
+ Gemfile.lock
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
- gem 'rake'
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-2008 Topfunky Corporation boss@topfunky.com
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
- See the test suite in test/line_test.rb for examples.
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
- ## Samples
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://gruff.rubyforge.org
124
+ http://www.rubydoc.info/github/topfunky/gruff/frames
125
+
36
126
 
37
127
  ## Contributing
38
128
 
39
- == Source
129
+ ### Source
40
130
 
41
131
  The source for this project is now kept at GitHub:
42
132
 
43
- http://github.com/topfunky/gruff/tree/master
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 "rubygems"
2
- require "bundler/gem_tasks"
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 << ['pkg', 'test/output/*']
6
+ CLEAN << %w(pkg test/output/*)
9
7
 
10
- desc "Run tests"
8
+ desc 'Run tests'
11
9
  task :default => :test
12
10
 
13
- Rake::TestTask.new do |t|
14
- t.libs << 'test'
15
- end
11
+ task :gem => :build
12
+
13
+ Rake::TestTask.new
16
14
 
17
15
  namespace :test do
18
- desc "Run mini tests"
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
- # Catch unmatched tasks and run them as a unit test.
28
- # Makes it possible to do
29
- #
30
- # rake pie
31
- #
32
- # To run the +test/test_pie+ and +test/test_mini_pie+ files.
33
- #rule '' do |t|
34
- # # Rake::Task["clean"].invoke
35
- # Dir["test/test_*#{t.name}*.rb"].each do |filename|
36
- # system "ruby #{filename}"
37
- # end
38
- #end
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
+