gchartrb 0.5.5 → 0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CREDITS CHANGED
@@ -1,3 +1,4 @@
1
1
  Will Fitzgerald - http://www.entish.org/willwhim
2
2
  Bryan Donovan
3
- Aseem Tandon
3
+ Aseem Tandon
4
+ Diomedes <alakazoom@gmail.com>
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ == 0.6 / 2008-01-27
2
+
3
+ * Added experimental support for undocumented Financial Line Chart (lfi)
4
+ * Added line style support (thanks diomedes)
5
+ * Added support for customisable width and spacing in bar charts
6
+
1
7
  == 0.5.5 / 2008-01-23
2
8
 
3
9
  * Fixed a bug related to multiple datasets using extended encoding
data/Manifest.txt CHANGED
@@ -12,4 +12,5 @@ lib/google_chart/line_chart.rb
12
12
  lib/google_chart/pie_chart.rb
13
13
  lib/google_chart/scatter_chart.rb
14
14
  lib/google_chart/venn_diagram.rb
15
+ lib/google_chart/financial_line_chart.rb
15
16
  lib/test.rb
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ class Hoe
8
8
  def extra_deps; @extra_deps.reject { |x| Array(x).first == "hoe" } end
9
9
  end # copied from the Rakefile of the sup project
10
10
 
11
- Hoe.new('gchartrb', "0.5.5") do |p|
11
+ Hoe.new('gchartrb', "0.6") do |p|
12
12
  p.rubyforge_name = 'gchartrb'
13
13
  p.author = 'Deepak Jois'
14
14
  p.email = 'deepak.jois@gmail.com'
data/TODO CHANGED
@@ -1,11 +1,12 @@
1
1
  TODO List (Features)
2
2
  ====================
3
- * Line Styles
3
+ * Line Styles DONE
4
+ * Customisable Width for bar charts DONE
4
5
  * Fill Area
5
- * Handle Missing Values (?)
6
- * Download image
7
- * Friendly color values
8
- * Helper methods for standard chart types like Sparklines etc.
6
+ * Download Image
7
+
8
+ * Friendly Color Values
9
+ * Easy calculations for Stuff that is needed
9
10
 
10
11
  TODO List (Other)
11
12
  =================
data/lib/google_chart.rb CHANGED
@@ -4,7 +4,8 @@
4
4
  line_chart
5
5
  bar_chart
6
6
  venn_diagram
7
- scatter_chart
7
+ scatter_chart
8
+ financial_line_chart
8
9
  ).each do |filename|
9
10
  require File.dirname(__FILE__) + "/google_chart/#{filename}"
10
11
  end
@@ -1,76 +1,90 @@
1
1
  require File.dirname(__FILE__) + '/base'
2
2
  module GoogleChart
3
- # Generates a Bar Chart. You can specify the alignment(horizontal or vertical) and whether you want the bars to be grouped or stacked
4
- # ==== Examples
5
- # bc = GoogleChart::BarChart.new('800x200', "Bar Chart", :vertical, false)
6
- # bc.data "Trend 1", [5,4,3,1,3,5], '0000ff'
7
- class BarChart < Base
8
-
9
- attr_accessor :alignment, :stacked
10
-
11
- # Specify the
12
- # * +chart_size+ in WIDTHxHEIGHT format
13
- # * +chart_title+ as a string
14
- # * +alignment+ as either <tt>:vertical</tt> or <tt>:horizontal</tt>
15
- # * +stacked+ should be +true+ if you want the bars to be stacked, false otherwise
16
- def initialize(chart_size='300x200', chart_title=nil, alignment=:vertical, stacked=false) # :yield: self
17
- super(chart_size, chart_title)
18
- @alignment = alignment
19
- @stacked = stacked
20
- set_chart_type
21
- self.show_legend = true
22
- yield self if block_given?
23
- end
24
-
25
- # Set the alignment to either <tt>:vertical</tt> or <tt>:horizontal</tt>
26
- def alignment=(value)
27
- @alignment = value
28
- set_chart_type
29
- end
30
-
31
- # If you want the bar chart to be stacked, set the value to <tt>true</tt>, otherwise set the value to <tt>false</tt> to group it.
32
- def stacked=(stacked)
33
- @stacked = value
34
- set_chart_type
35
- end
3
+ # Generates a Bar Chart. You can specify the alignment(horizontal or vertical) and whether you want the bars to be grouped or stacked
4
+ # ==== Examples
5
+ # bc = GoogleChart::BarChart.new('800x200', "Bar Chart", :vertical, false)
6
+ # bc.data "Trend 1", [5,4,3,1,3,5], '0000ff'
7
+ class BarChart < Base
8
+
9
+ attr_accessor :alignment, :stacked
10
+
11
+ # Specify the
12
+ # * +chart_size+ in WIDTHxHEIGHT format
13
+ # * +chart_title+ as a string
14
+ # * +alignment+ as either <tt>:vertical</tt> or <tt>:horizontal</tt>
15
+ # * +stacked+ should be +true+ if you want the bars to be stacked, false otherwise
16
+ def initialize(chart_size='300x200', chart_title=nil, alignment=:vertical, stacked=false) # :yield: self
17
+ super(chart_size, chart_title)
18
+ @alignment = alignment
19
+ @stacked = stacked
20
+ set_chart_type
21
+ self.show_legend = true
22
+ yield self if block_given?
23
+ end
24
+
25
+ # Set the alignment to either <tt>:vertical</tt> or <tt>:horizontal</tt>
26
+ def alignment=(value)
27
+ @alignment = value
28
+ set_chart_type
29
+ end
30
+
31
+ # If you want the bar chart to be stacked, set the value to <tt>true</tt>, otherwise set the value to <tt>false</tt> to group it.
32
+ def stacked=(stacked)
33
+ @stacked = value
34
+ set_chart_type
35
+ end
36
36
 
37
- def process_data
38
- if @stacked # Special handling of max value for stacked
39
- unless @max_data # Unless max_data is explicitly set
40
- @max_data = @data.inject([]) do |sum_arr, series|
41
- series.each_with_index do |v,i|
42
- if sum_arr[i] == nil
43
- sum_arr[i] = v
44
- else
45
- sum_arr[i] += v
46
- end
47
- end
48
- sum_arr
49
- end.max
50
- end
51
- end
37
+ # Defines options for bar width, spacing between bars and between groups of bars. Applicable for bar charts.
38
+ # [+options+] : Options for the style, specifying things like line thickness and lengths of the line segment and blank portions
39
+ #
40
+ # ==== Options
41
+ # * <tt>:bar_width</tt>, Bar width in pixels
42
+ # * <tt>:bar_spacing</tt> (optional), space between bars in a group
43
+ # * <tt>:group_spacing</tt> (optional), space between groups
44
+ def width_spacing_options(options={})
45
+ options_str = "#{options[:bar_width]}"
46
+ options_str += ",#{options[:bar_spacing]}" if options[:bar_spacing]
47
+ options_str += ",#{options[:group_spacing]}" if options[:bar_spacing] and options[:group_spacing]
48
+ @bar_width_spacing_options = options_str
49
+ end
52
50
 
53
- if @data.size > 1
54
- join_encoded_data(@data.collect { |series|
55
- encode_data(series, max_data_value)
56
- })
57
- else
58
- encode_data(@data.flatten,max_data_value)
59
- end
51
+ def process_data
52
+ if @stacked # Special handling of max value for stacked
53
+ unless @max_data # Unless max_data is explicitly set
54
+ @max_data = @data.inject([]) do |sum_arr, series|
55
+ series.each_with_index do |v,i|
56
+ if sum_arr[i] == nil
57
+ sum_arr[i] = v
58
+ else
59
+ sum_arr[i] += v
60
+ end
61
+ end
62
+ sum_arr
63
+ end.max
64
+ end
60
65
  end
61
-
62
- private
63
- def set_chart_type
64
- # Set chart type
65
- if alignment == :vertical and stacked == false
66
- self.chart_type = :bvg
67
- elsif alignment == :vertical and stacked == true
68
- self.chart_type = :bvs
69
- elsif alignment == :horizontal and stacked == false
70
- self.chart_type = :bhg
71
- elsif alignment == :horizontal and stacked == true
72
- self.chart_type = :bhs
73
- end
66
+
67
+ if @data.size > 1
68
+ join_encoded_data(@data.collect { |series|
69
+ encode_data(series, max_data_value)
70
+ })
71
+ else
72
+ encode_data(@data.flatten,max_data_value)
74
73
  end
75
74
  end
76
- end
75
+
76
+ private
77
+ def set_chart_type
78
+ # Set chart type
79
+ if alignment == :vertical and stacked == false
80
+ self.chart_type = :bvg
81
+ elsif alignment == :vertical and stacked == true
82
+ self.chart_type = :bvs
83
+ elsif alignment == :horizontal and stacked == false
84
+ self.chart_type = :bhg
85
+ elsif alignment == :horizontal and stacked == true
86
+ self.chart_type = :bhs
87
+ end
88
+ end
89
+ end
90
+ end
@@ -24,6 +24,8 @@ module GoogleChart
24
24
  :x => "x"
25
25
  }
26
26
 
27
+ DEFAULT_LINE_STYLE = '1'
28
+
27
29
  # Size of the chart in WIDTHxHEIGHT format
28
30
  attr_accessor :chart_size
29
31
 
@@ -55,6 +57,7 @@ module GoogleChart
55
57
  @colors = []
56
58
  @axis = []
57
59
  @markers = []
60
+ @line_styles = []
58
61
  self.chart_size = chart_size
59
62
  self.chart_title = chart_title
60
63
  self.data_encoding = :simple
@@ -79,6 +82,8 @@ module GoogleChart
79
82
  add_axis unless @axis.empty?
80
83
  add_grid
81
84
  add_data
85
+ add_line_styles unless @line_styles.empty?
86
+ set_bar_width_spacing_options if @bar_width_spacing_options
82
87
  add_markers unless @markers.empty?
83
88
  add_labels(@labels) if [:p, :p3].member?(self.chart_type)
84
89
  add_legend(@labels) if show_legend
@@ -355,6 +360,17 @@ module GoogleChart
355
360
  def add_grid
356
361
  params.merge!({ :chg => @grid_str }) if @grid_str
357
362
  end
363
+
364
+ def add_line_styles
365
+ 0.upto(@line_styles.length - 1) { |i|
366
+ @line_styles[i] = DEFAULT_LINE_STYLE unless @line_styles[i]
367
+ }
368
+ params.merge!({:chls => @line_styles.join("|")})
369
+ end
370
+
371
+ def set_bar_width_spacing_options
372
+ params.merge!({:chbh => @bar_width_spacing_options})
373
+ end
358
374
 
359
375
  def add_markers
360
376
  params.merge!({:chm => @markers.join("|")})
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + '/base'
2
+ module GoogleChart
3
+
4
+ # Generates a Financial Line Chart. This feature is UNDOCUMENTED and EXPERIMENTAL.
5
+ # For a sample usage, visit (right at the bottom) http://24ways.org/2007/tracking-christmas-cheer-with-google-charts
6
+ #
7
+ # ==== Examples
8
+ # flc = GoogleChart::FinancialLineChart.new do |chart|
9
+ # chart.data "", [3,10,20,37,40,25,68,75,89,99], "ff0000"
10
+ # end
11
+ # puts flc.to_url
12
+ #
13
+ class FinancialLineChart < Base
14
+
15
+ # Specify the
16
+ # * +chart_size+ in WIDTHxHEIGHT format
17
+ # * +chart_title+ as a string
18
+ def initialize(chart_size='100x15', chart_title=nil) # :yield: self
19
+ super(chart_size, chart_title)
20
+ self.chart_type = :lfi
21
+ self.show_legend = false
22
+ yield self if block_given?
23
+ end
24
+
25
+ def process_data
26
+ join_encoded_data(@data.collect { |series|
27
+ encode_data(series, max_data_value)
28
+ })
29
+ end
30
+ end
31
+ end
@@ -28,6 +28,7 @@ module GoogleChart
28
28
  def initialize(chart_size='300x200', chart_title=nil, is_xy=false) # :yield: self
29
29
  super(chart_size, chart_title)
30
30
  self.is_xy = is_xy
31
+ @line_styles = []
31
32
  yield self if block_given?
32
33
  end
33
34
 
@@ -43,6 +44,19 @@ module GoogleChart
43
44
  end
44
45
  end
45
46
 
47
+ # Defines a line style. Applicable for line charts.
48
+ # [+data_set_index+] Can be one of <tt>:background</tt> or <tt>:chart</tt> depending on the kind of fill requested
49
+ # [+options+] : Options for the style, specifying things like line thickness and lengths of the line segment and blank portions
50
+ #
51
+ # ==== Options
52
+ # * <tt>:line_thickness</tt> (mandatory) option which specifies the thickness of the line segment in pixels
53
+ # * <tt>:length_segment</tt>, which specifies the length of the line segment
54
+ # * <tt>:length_blank</tt>, which specifies the lenght of the blank segment
55
+ def line_style(data_set_index, options={})
56
+ @line_styles[data_set_index] = "#{options[:line_thickness]}"
57
+ @line_styles[data_set_index] += ",#{options[:length_segment]},#{options[:length_blank]}" if options[:length_segment]
58
+ end
59
+
46
60
  def process_data
47
61
  if self.is_xy or @data.size > 1
48
62
  if self.is_xy # XY Line graph data series
@@ -54,8 +68,8 @@ module GoogleChart
54
68
  join_encoded_data(encoded_data)
55
69
  else # Line graph multiple data series
56
70
  join_encoded_data(@data.collect { |series|
57
- encode_data(series, max_data_value)
58
- })
71
+ encode_data(series, max_data_value)
72
+ })
59
73
  end
60
74
  else
61
75
  encode_data(@data.flatten, max_data_value)
data/lib/test.rb CHANGED
@@ -34,6 +34,7 @@ GoogleChart::BarChart.new('800x200', "Bar Chart", :vertical, false) do |bc|
34
34
  bc.data "Trend 1", [5,4,3,1,3,5], '0000ff'
35
35
  bc.data "Trend 2", [1,2,3,4,5,6], 'ff0000'
36
36
  bc.data "Trend 3", [6,5,4,4,5,6], '00ff00'
37
+ bc.width_spacing_options :bar_width => 5, :bar_spacing => 2, :group_spacing => 10
37
38
  puts "\nBar Chart"
38
39
  puts bc.to_url
39
40
  end
@@ -155,3 +156,21 @@ end
155
156
  puts "\nBar chart encoding error test"
156
157
  puts bc.to_url
157
158
 
159
+ # Financial Line Chart (Experimental)
160
+ flc = GoogleChart::FinancialLineChart.new do |chart|
161
+ chart.data "", [3,10,20,37,40,25,68,75,89,99], "ff0000"
162
+ end
163
+ puts "\nFinancial Line Chart or Sparklines (EXPERIMENTAL)"
164
+ puts flc.to_url
165
+
166
+ # Line Style
167
+ lc = GoogleChart::LineChart.new('320x200', "Line Chart", false) do |lc|
168
+ lc.data "Trend 1", [5,4,3,1,3,5], '0000ff'
169
+ lc.data "Trend 2", [1,2,3,4,5,6], '00ff00'
170
+ lc.data "Trend 3", [6,5,4,3,2,1], 'ff0000'
171
+ lc.line_style 0, :length_segment => 3, :length_blank => 2, :line_thickness => 3
172
+ lc.line_style 1, :length_segment => 1, :length_blank => 2, :line_thickness => 1
173
+ lc.line_style 2, :length_segment => 2, :length_blank => 1, :line_thickness => 5
174
+ end
175
+ puts "\nLine Styles"
176
+ puts lc.to_url
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gchartrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5
4
+ version: "0.6"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Deepak Jois
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-01-23 00:00:00 +08:00
12
+ date: 2008-01-27 00:00:00 +08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -38,6 +38,7 @@ files:
38
38
  - lib/google_chart/pie_chart.rb
39
39
  - lib/google_chart/scatter_chart.rb
40
40
  - lib/google_chart/venn_diagram.rb
41
+ - lib/google_chart/financial_line_chart.rb
41
42
  - lib/test.rb
42
43
  has_rdoc: true
43
44
  homepage: " by Deepak Jois"