seer 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/CONTRIBUTORS ADDED
@@ -0,0 +1,4 @@
1
+ Thanks go to the following individuals for their contributions:
2
+
3
+ Alexey Kuleshov (http://github.com/kulesa)
4
+ Harold Giménez (http://github.com/hgimenez)
data/README.rdoc CHANGED
@@ -20,7 +20,7 @@ In your controller:
20
20
 
21
21
  In your view:
22
22
 
23
- <div id="chart" class="chart"></div>
23
+ <div id="chart"></div>
24
24
 
25
25
  <%= Seer::visualize(
26
26
  @widgets,
@@ -44,6 +44,8 @@ In your view:
44
44
 
45
45
  For examples of additional chart types, refer to the documentation for each of the individual chart objects, or see the blog post announcing Seer: {Simple, Semantic Graphing for Ruby on Rails with Seer}[http://www.idolhands.com/ruby-on-rails/gems-plugins-and-engines/graphing-for-ruby-on-rails-with-seer]
46
46
 
47
+ A {sample project}[http://github.com/Bantik/seer_sample] that demonstrates each of the chart types is available on GitHub.
48
+
47
49
  Seer is developed and maintained by {Corey Ehmke}[http://www.idolhands.com/] at {SEO Logic}[http://www.seologic.com/].
48
50
 
49
51
  Copyright (c) 2010 Corey Ehmke / SEO Logic, released under the MIT license
data/Rakefile CHANGED
@@ -12,6 +12,7 @@ begin
12
12
  gem.authors = ["Corey Ehmke / SEO Logic"]
13
13
  gem.add_development_dependency "rspec", ">= 1.2.9"
14
14
  gem.files = [
15
+ "CONTRIBUTORS",
15
16
  "init.rb",
16
17
  "lib/seer.rb",
17
18
  "lib/seer/area_chart.rb",
@@ -11,7 +11,7 @@ module Seer
11
11
  #
12
12
  # In your view:
13
13
  #
14
- # <div id="chart" class="chart"></div>
14
+ # <div id="chart"></div>
15
15
  #
16
16
  # <%= Seer::visualize(
17
17
  # @data,
@@ -66,7 +66,7 @@ module Seer
66
66
  end
67
67
 
68
68
  def data_columns #:nodoc:
69
- _data_columns = " data.addRows(#{data_series.first.map{|d| d.send(data_label)}.uniq.size});\r"
69
+ _data_columns = " data.addRows(#{data_rows.size});\r"
70
70
  _data_columns << " data.addColumn('string', 'Date');\r"
71
71
  data.each do |datum|
72
72
  _data_columns << " data.addColumn('number', '#{datum.send(series_label)}');\r"
@@ -75,20 +75,26 @@ module Seer
75
75
  end
76
76
 
77
77
  def data_table #:nodoc:
78
- _rows = data_series.first.map{|d| d.send(data_label)}.uniq
78
+ _rows = data_rows
79
79
  _rows.each_with_index do |r,i|
80
80
  @data_table << " data.setCell(#{i}, 0,'#{r}');\r"
81
81
  end
82
82
  data_series.each_with_index do |column,i|
83
83
  column.each_with_index do |c,j|
84
- @data_table << "data.setCell(#{j},#{i+1},#{c.send(data_method)});\r"
84
+ @data_table << " data.setCell(#{j},#{i+1},#{c.send(data_method)});\r"
85
85
  end
86
86
  end
87
87
  @data_table
88
88
  end
89
+
90
+ def data_rows
91
+ data_series.inject([]) do |rows, element|
92
+ rows |= element.map { |e| e.send(data_label) }
93
+ end
94
+ end
89
95
 
90
96
  def nonstring_options #:nodoc:
91
- [ :axis_font_size, :colors, :enable_tooltip, :height, :legend_font_size, :line_size, :log_scale, :max, :min, :point_size, :reverse_axis, :show_categories, :title_font_size, :tooltip_font_size, :tooltip_height, :tooltip_width, :width]
97
+ [ :axis_font_size, :colors, :enable_tooltip, :height, :is_stacked, :legend_font_size, :line_size, :log_scale, :max, :min, :point_size, :reverse_axis, :show_categories, :title_font_size, :tooltip_font_size, :tooltip_height, :tooltip_width, :width]
92
98
  end
93
99
 
94
100
  def string_options #:nodoc:
@@ -107,7 +113,7 @@ module Seer
107
113
  #{data_table.to_s}
108
114
  var options = {};
109
115
  #{options}
110
- var container = document.getElementById('chart');
116
+ var container = document.getElementById('#{self.chart_element}');
111
117
  var chart = new google.visualization.AreaChart(container);
112
118
  chart.draw(data, options);
113
119
  }
@@ -9,7 +9,7 @@ module Seer
9
9
  #
10
10
  # In your view:
11
11
  #
12
- # <div id="chart" class="chart"></div>
12
+ # <div id="chart"></div>
13
13
  #
14
14
  # <%= Seer::visualize(
15
15
  # @widgets,
@@ -100,7 +100,7 @@ module Seer
100
100
  #{data_table.to_s}
101
101
  var options = {};
102
102
  #{options}
103
- var container = document.getElementById('chart');
103
+ var container = document.getElementById('#{self.chart_element}');
104
104
  var chart = new google.visualization.BarChart(container);
105
105
  chart.draw(data, options);
106
106
  }
data/lib/seer/chart.rb CHANGED
@@ -41,14 +41,16 @@ module Seer
41
41
  def options
42
42
  _options = ""
43
43
  nonstring_options.each do |opt|
44
+ next unless self.send(opt)
44
45
  if opt == :colors
45
- _options << " options['#{opt.to_s.camelize(:lower)}'] = #{self.send(:formatted_colors)};\r" if self.send(opt)
46
+ _options << " options['#{opt.to_s.camelize(:lower)}'] = #{self.send(:formatted_colors)};\r"
46
47
  else
47
- _options << " options['#{opt.to_s.camelize(:lower)}'] = #{self.send(opt)};\r" if self.send(opt)
48
+ _options << " options['#{opt.to_s.camelize(:lower)}'] = #{self.send(opt)};\r"
48
49
  end
49
50
  end
50
51
  string_options.each do |opt|
51
- _options << " options['#{opt.to_s.camelize(:lower)}'] = '#{self.send(opt)}';\r" if self.send(opt)
52
+ next unless self.send(opt)
53
+ _options << " options['#{opt.to_s.camelize(:lower)}'] = '#{self.send(opt)}';\r"
52
54
  end
53
55
  _options
54
56
  end
@@ -9,7 +9,7 @@ module Seer
9
9
  #
10
10
  # In your view:
11
11
  #
12
- # <div id="chart" class="chart"></div>
12
+ # <div id="chart"></div>
13
13
  #
14
14
  # <%= Seer::visualize(
15
15
  # @widgets,
@@ -100,7 +100,7 @@ module Seer
100
100
  #{data_table.to_s}
101
101
  var options = {};
102
102
  #{options}
103
- var container = document.getElementById('chart');
103
+ var container = document.getElementById('#{self.chart_element}');
104
104
  var chart = new google.visualization.ColumnChart(container);
105
105
  chart.draw(data, options);
106
106
  }
data/lib/seer/gauge.rb CHANGED
@@ -9,7 +9,7 @@ module Seer
9
9
  #
10
10
  # In your view:
11
11
  #
12
- # <div id="chart" class="chart"></div>
12
+ # <div id="chart"></div>
13
13
  #
14
14
  # <%= Seer::visualize(
15
15
  # @data,
@@ -92,7 +92,7 @@ module Seer
92
92
  function drawChart() {
93
93
  var data = new google.visualization.DataTable();
94
94
  #{data_columns}
95
- #{data_table.to_s}
95
+ #{data_table.join}
96
96
  var options = {};
97
97
  #{options}
98
98
  var container = document.getElementById('#{self.chart_element}');
@@ -11,7 +11,7 @@ module Seer
11
11
  #
12
12
  # In your view:
13
13
  #
14
- # <div id="chart" class="chart"></div>
14
+ # <div id="chart"></div>
15
15
  #
16
16
  # <%= Seer::visualize(
17
17
  # @data,
@@ -66,7 +66,7 @@ module Seer
66
66
  end
67
67
 
68
68
  def data_columns #:nodoc:
69
- _data_columns = " data.addRows(#{data_series.first.map{|d| d.send(data_label)}.uniq.size});\r"
69
+ _data_columns = " data.addRows(#{data_rows.size});\r"
70
70
  _data_columns << " data.addColumn('string', 'Date');\r"
71
71
  data.each do |datum|
72
72
  _data_columns << " data.addColumn('number', '#{datum.send(series_label)}');\r"
@@ -75,7 +75,7 @@ module Seer
75
75
  end
76
76
 
77
77
  def data_table #:nodoc:
78
- _rows = data_series.first.map{|d| d.send(data_label)}.uniq
78
+ _rows = data_rows
79
79
  _rows.each_with_index do |r,i|
80
80
  @data_table << " data.setCell(#{i}, 0,'#{r}');\r"
81
81
  end
@@ -86,6 +86,12 @@ module Seer
86
86
  end
87
87
  @data_table
88
88
  end
89
+
90
+ def data_rows
91
+ data_series.inject([]) do |rows, element|
92
+ rows |= element.map { |e| e.send(data_label) }
93
+ end
94
+ end
89
95
 
90
96
  def nonstring_options #:nodoc:
91
97
  [ :axis_font_size, :colors, :enable_tooltip, :height, :legend_font_size, :line_size, :log_scale, :max, :min, :point_size, :reverse_axis, :show_categories, :smooth_line, :title_font_size, :tooltip_font_size, :tooltip_height, :tooltip_width, :width]
@@ -107,7 +113,7 @@ module Seer
107
113
  #{data_table.to_s}
108
114
  var options = {};
109
115
  #{options}
110
- var container = document.getElementById('chart');
116
+ var container = document.getElementById('#{self.chart_element}');
111
117
  var chart = new google.visualization.LineChart(container);
112
118
  chart.draw(data, options);
113
119
  }
@@ -9,7 +9,7 @@ module Seer
9
9
  #
10
10
  # In your view:
11
11
  #
12
- # <div id="chart" class="chart"></div>
12
+ # <div id="chart"></div>
13
13
  #
14
14
  # <%= Seer::visualize(
15
15
  # @data,
@@ -92,7 +92,7 @@ module Seer
92
92
  #{data_table.to_s}
93
93
  var options = {};
94
94
  #{options}
95
- var container = document.getElementById('chart');
95
+ var container = document.getElementById('#{self.chart_element}');
96
96
  var chart = new google.visualization.PieChart(container);
97
97
  chart.draw(data, options);
98
98
  }
@@ -14,34 +14,20 @@ describe "Seer::AreaChart" do
14
14
  )
15
15
  end
16
16
 
17
- describe 'defaults' do
18
-
19
- it 'colors' do
20
- @chart.colors.should == Seer::Chart::DEFAULT_COLORS
21
- end
22
-
23
- it 'legend' do
24
- @chart.legend.should == Seer::Chart::DEFAULT_LEGEND_LOCATION
25
- end
26
-
27
- it 'height' do
28
- @chart.height.should == Seer::Chart::DEFAULT_HEIGHT
29
- end
30
-
31
- it 'width' do
32
- @chart.width.should == Seer::Chart::DEFAULT_WIDTH
33
- end
34
-
17
+ describe 'defaults' do
18
+ it_should_behave_like 'it sets default values'
35
19
  end
36
20
 
37
21
  describe 'graph options' do
38
22
 
39
- [:axis_color, :axis_background_color, :axis_font_size, :background_color, :border_color, :colors, :enable_tooltip, :focus_border_color, :height, :is_stacked, :legend, :legend_background_color, :legend_font_size, :legend_text_color, :line_size, :log_scale, :max, :min, :point_size, :reverse_axis, :show_categories, :title, :title_x, :title_y, :title_color, :title_font_size, :tooltip_font_size, :tooltip_height, :number, :tooltip_width, :width].each do |accessor|
23
+ [:axis_color, :axis_background_color, :axis_font_size, :background_color, :border_color, :enable_tooltip, :focus_border_color, :height, :is_stacked, :legend, :legend_background_color, :legend_font_size, :legend_text_color, :line_size, :log_scale, :max, :min, :point_size, :reverse_axis, :show_categories, :title, :title_x, :title_y, :title_color, :title_font_size, :tooltip_font_size, :tooltip_height, :number, :tooltip_width, :width].each do |accessor|
40
24
  it "sets its #{accessor} value" do
41
25
  @chart.send("#{accessor}=", 'foo')
42
26
  @chart.send(accessor).should == 'foo'
43
27
  end
44
28
  end
29
+
30
+ it_should_behave_like 'it has colors attribute'
45
31
  end
46
32
 
47
33
  it 'renders as JavaScript' do
@@ -50,24 +36,73 @@ describe "Seer::AreaChart" do
50
36
  end
51
37
 
52
38
  it 'sets its data columns' do
53
- @chart.data_columns.should =~ /addRows\(3\)/
54
- @chart.data_columns.should =~ /addColumn\('string', 'Date'\)/
55
- @chart.data_columns.should =~ /addColumn\('string', 'Date'\)/
56
- @chart.data_columns.should =~ /addColumn\('number', '0'\)/
57
- @chart.data_columns.should =~ /addColumn\('number', '1'\)/
58
- @chart.data_columns.should =~ /addColumn\('number', '2'\)/
59
- @chart.data_columns.should =~ /addColumn\('number', '3'\)/
39
+ @chart.data_columns.should =~ /addRows\(5\)/
40
+ @chart.data_columns.should add_column('string', 'Date')
41
+ @chart.data_columns.should add_column('number', '0')
42
+ @chart.data_columns.should add_column('number', '1')
43
+ @chart.data_columns.should add_column('number', '2')
44
+ @chart.data_columns.should add_column('number', '3')
60
45
  end
61
46
 
62
47
  it 'sets its data table' do
63
- @chart.data_table.to_s.should =~ /data\.setCell\(0, 0,'1'\)/
64
- @chart.data_table.to_s.should =~ /data\.setCell\(1, 0,'2'\)/
65
- @chart.data_table.to_s.should =~ /data\.setCell\(2, 0,'3'\)/
66
- @chart.data_table.to_s.should =~ /data\.setCell\(0,1,8\)/
67
- @chart.data_table.to_s.should =~ /data\.setCell\(2,1,8\)/
68
- @chart.data_table.to_s.should =~ /data\.setCell\(0,2,8\)/
69
- @chart.data_table.to_s.should =~ /data\.setCell\(1,2,8\)/
70
- @chart.data_table.to_s.should =~ /data\.setCell\(2,2,8\)/
48
+ @chart.data_table.to_s.should set_cell(0, 0,'1')
49
+ @chart.data_table.to_s.should set_cell(1, 0,'2')
50
+ @chart.data_table.to_s.should set_cell(2, 0,'3')
51
+ @chart.data_table.to_s.should set_cell(3, 0,'4')
52
+ @chart.data_table.to_s.should set_cell(4, 0,'5')
53
+ @chart.data_table.to_s.should set_cell(0,1,8)
54
+ @chart.data_table.to_s.should set_cell(2,1,8)
55
+ @chart.data_table.to_s.should set_cell(0,2,8)
56
+ @chart.data_table.to_s.should set_cell(1,2,8)
57
+ @chart.data_table.to_s.should set_cell(2,2,8)
58
+ end
59
+
60
+ describe 'when data_series is an array of arrays of arrays/hashes' do
61
+ before(:each) do
62
+ data_series = Array.new(3) {|i| [[i, i+1], [i+1, i+2]]}
63
+ @chart = Seer::AreaChart.new(
64
+ :data => [0,1,2,3],
65
+ :series_label => 'to_s',
66
+ :data_series => data_series,
67
+ :data_label => 'first',
68
+ :data_method => 'size',
69
+ :chart_options => {},
70
+ :chart_element => 'chart'
71
+ )
72
+ end
73
+
74
+ it 'calculates number of rows' do
75
+ @chart.data_columns.should =~ /addRows\(4\)/
76
+ end
77
+
78
+ it 'sets its data table' do
79
+ @chart.data_table.to_s.should set_cell(0, 0,'0')
80
+ @chart.data_table.to_s.should set_cell(1, 0,'1')
81
+ @chart.data_table.to_s.should set_cell(2, 0,'2')
82
+ @chart.data_table.to_s.should set_cell(3, 0,'3')
83
+ end
71
84
  end
72
85
 
86
+ describe 'should receive options' do
87
+ before(:each) do
88
+ data_series = Array.new(3) {|i| [[i, i+1], [i+1, i+2]]}
89
+ @options = {
90
+ :data => [0,1,2,3],
91
+ :series_label => 'to_s',
92
+ :data_series => data_series,
93
+ :data_label => 'first',
94
+ :data_method => 'size',
95
+ :chart_options => {},
96
+ :chart_element => 'chart'
97
+ }
98
+ end
99
+
100
+ it 'should receive :is_stacked option' do
101
+ create_chart_with_option(:is_stacked => true).to_js.should =~ /options\['isStacked'\] = true/
102
+ end
103
+ end
104
+ end
105
+
106
+ def create_chart_with_option(option)
107
+ Seer::AreaChart.new(@options.merge(option))
73
108
  end
@@ -13,33 +13,19 @@ describe "Seer::BarChart" do
13
13
  end
14
14
 
15
15
  describe 'defaults' do
16
-
17
- it 'colors' do
18
- @chart.colors.should == Seer::Chart::DEFAULT_COLORS
19
- end
20
-
21
- it 'legend' do
22
- @chart.legend.should == Seer::Chart::DEFAULT_LEGEND_LOCATION
23
- end
24
-
25
- it 'height' do
26
- @chart.height.should == Seer::Chart::DEFAULT_HEIGHT
27
- end
28
-
29
- it 'width' do
30
- @chart.width.should == Seer::Chart::DEFAULT_WIDTH
31
- end
32
-
16
+ it_should_behave_like 'it sets default values'
33
17
  end
34
18
 
35
19
  describe 'graph options' do
36
20
 
37
- [:axis_color, :axis_background_color, :axis_font_size, :background_color, :border_color, :colors, :enable_tooltip, :focus_border_color, :height, :is_3_d, :is_stacked, :legend, :legend_background_color, :legend_font_size, :legend_text_color, :log_scale, :max, :min, :reverse_axis, :show_categories, :title, :title_x, :title_y, :title_color, :title_font_size, :tooltip_font_size, :tooltip_height, :tooltip_width, :width].each do |accessor|
21
+ [:axis_color, :axis_background_color, :axis_font_size, :background_color, :border_color, :enable_tooltip, :focus_border_color, :height, :is_3_d, :is_stacked, :legend, :legend_background_color, :legend_font_size, :legend_text_color, :log_scale, :max, :min, :reverse_axis, :show_categories, :title, :title_x, :title_y, :title_color, :title_font_size, :tooltip_font_size, :tooltip_height, :tooltip_width, :width].each do |accessor|
38
22
  it "sets its #{accessor} value" do
39
23
  @chart.send("#{accessor}=", 'foo')
40
24
  @chart.send(accessor).should == 'foo'
41
25
  end
42
26
  end
27
+
28
+ it_should_behave_like 'it has colors attribute'
43
29
  end
44
30
 
45
31
  it 'renders as JavaScript' do
@@ -52,14 +38,14 @@ describe "Seer::BarChart" do
52
38
  end
53
39
 
54
40
  it 'sets its data table' do
55
- @chart.data_table.to_s.should =~ /data\.setValue\(0, 0,'0'\)/
56
- @chart.data_table.to_s.should =~ /data\.setValue\(0, 1, 8\)/
57
- @chart.data_table.to_s.should =~ /data\.setValue\(1, 0,'1'\)/
58
- @chart.data_table.to_s.should =~ /data\.setValue\(1, 1, 8\)/
59
- @chart.data_table.to_s.should =~ /data\.setValue\(2, 0,'2'\)/
60
- @chart.data_table.to_s.should =~ /data\.setValue\(2, 1, 8\)/
61
- @chart.data_table.to_s.should =~ /data\.setValue\(3, 0,'3'\)/
62
- @chart.data_table.to_s.should =~ /data\.setValue\(3, 1, 8\)/
41
+ @chart.data_table.to_s.should set_value(0, 0,'0')
42
+ @chart.data_table.to_s.should set_value(0, 1, 8)
43
+ @chart.data_table.to_s.should set_value(1, 0,'1')
44
+ @chart.data_table.to_s.should set_value(1, 1, 8)
45
+ @chart.data_table.to_s.should set_value(2, 0,'2')
46
+ @chart.data_table.to_s.should set_value(2, 1, 8)
47
+ @chart.data_table.to_s.should set_value(3, 0,'3')
48
+ @chart.data_table.to_s.should set_value(3, 1, 8)
63
49
  end
64
50
 
65
51
  end
data/spec/chart_spec.rb CHANGED
@@ -46,8 +46,7 @@ describe "Seer::Chart" do
46
46
  end
47
47
 
48
48
  it 'sets its data columns' do
49
- @chart.data_columns.should =~ /addRows\(3\)/
50
- @chart.data_columns.should =~ /addColumn\('string', 'Date'\)/
49
+ @chart.data_columns.should =~ /addRows\(5\)/
51
50
  @chart.data_columns.should =~ /addColumn\('string', 'Date'\)/
52
51
  @chart.data_columns.should =~ /addColumn\('number', '0'\)/
53
52
  @chart.data_columns.should =~ /addColumn\('number', '1'\)/
@@ -56,7 +55,7 @@ describe "Seer::Chart" do
56
55
  end
57
56
 
58
57
  it 'sets its options' do
59
- puts @chart.options.should =~ /options\['titleX'\] = 'Something'/
58
+ @chart.options.should =~ /options\['titleX'\] = 'Something'/
60
59
  end
61
60
 
62
61
 
@@ -12,34 +12,20 @@ describe "Seer::ColumnChart" do
12
12
  )
13
13
  end
14
14
 
15
- describe 'defaults' do
16
-
17
- it 'colors' do
18
- @chart.colors.should == Seer::Chart::DEFAULT_COLORS
19
- end
20
-
21
- it 'legend' do
22
- @chart.legend.should == Seer::Chart::DEFAULT_LEGEND_LOCATION
23
- end
24
-
25
- it 'height' do
26
- @chart.height.should == Seer::Chart::DEFAULT_HEIGHT
27
- end
28
-
29
- it 'width' do
30
- @chart.width.should == Seer::Chart::DEFAULT_WIDTH
31
- end
32
-
15
+ describe 'defaults' do
16
+ it_should_behave_like 'it sets default values'
33
17
  end
34
18
 
35
19
  describe 'graph options' do
36
20
 
37
- [:axis_color, :axis_background_color, :axis_font_size, :background_color, :border_color, :colors, :enable_tooltip, :focus_border_color, :height, :is_3_d, :is_stacked, :legend, :legend_background_color, :legend_font_size, :legend_text_color, :log_scale, :max, :min, :reverse_axis, :show_categories, :title, :title_x, :title_y, :title_color, :title_font_size, :tooltip_font_size, :tooltip_height, :tooltip_width, :width].each do |accessor|
21
+ [:axis_color, :axis_background_color, :axis_font_size, :background_color, :border_color, :enable_tooltip, :focus_border_color, :height, :is_3_d, :is_stacked, :legend, :legend_background_color, :legend_font_size, :legend_text_color, :log_scale, :max, :min, :reverse_axis, :show_categories, :title, :title_x, :title_y, :title_color, :title_font_size, :tooltip_font_size, :tooltip_height, :tooltip_width, :width].each do |accessor|
38
22
  it "sets its #{accessor} value" do
39
23
  @chart.send("#{accessor}=", 'foo')
40
24
  @chart.send(accessor).should == 'foo'
41
25
  end
42
26
  end
27
+
28
+ it_should_behave_like 'it has colors attribute'
43
29
  end
44
30
 
45
31
  it 'renders as JavaScript' do
@@ -52,14 +38,14 @@ describe "Seer::ColumnChart" do
52
38
  end
53
39
 
54
40
  it 'sets its data table' do
55
- @chart.data_table.to_s.should =~ /data\.setValue\(0, 0,'0'\)/
56
- @chart.data_table.to_s.should =~ /data\.setValue\(0, 1, 8\)/
57
- @chart.data_table.to_s.should =~ /data\.setValue\(1, 0,'1'\)/
58
- @chart.data_table.to_s.should =~ /data\.setValue\(1, 1, 8\)/
59
- @chart.data_table.to_s.should =~ /data\.setValue\(2, 0,'2'\)/
60
- @chart.data_table.to_s.should =~ /data\.setValue\(2, 1, 8\)/
61
- @chart.data_table.to_s.should =~ /data\.setValue\(3, 0,'3'\)/
62
- @chart.data_table.to_s.should =~ /data\.setValue\(3, 1, 8\)/
41
+ @chart.data_table.to_s.should set_value(0, 0,'0')
42
+ @chart.data_table.to_s.should set_value(0, 1, 8)
43
+ @chart.data_table.to_s.should set_value(1, 0,'1')
44
+ @chart.data_table.to_s.should set_value(1, 1, 8)
45
+ @chart.data_table.to_s.should set_value(2, 0,'2')
46
+ @chart.data_table.to_s.should set_value(2, 1, 8)
47
+ @chart.data_table.to_s.should set_value(3, 0,'3')
48
+ @chart.data_table.to_s.should set_value(3, 1, 8)
63
49
  end
64
50
 
65
51
  end
@@ -0,0 +1,23 @@
1
+ module CustomMatcher
2
+ def set_cell(row, column, value)
3
+ value = "'#{value}'" if value.is_a?(String)
4
+
5
+ simple_matcher("setCell(#{row}, #{column}, #{value})") do |actual|
6
+ actual =~ /data\.setCell\(#{row},\s*#{column},\s*#{value}\)/
7
+ end
8
+ end
9
+
10
+ def set_value(row, column, value)
11
+ value = "'#{value}'" if value.is_a?(String)
12
+
13
+ simple_matcher("setValue(#{row}, #{column}, #{value})") do |actual|
14
+ actual =~ /data\.setValue\(#{row},\s*#{column},\s*#{value}\)/
15
+ end
16
+ end
17
+
18
+ def add_column(column_type, value)
19
+ simple_matcher("addColumn('#{column_type}', '#{value}')") do |actual|
20
+ actual =~ /data\.addColumn\('#{column_type}',\s*'#{value}'\)/
21
+ end
22
+ end
23
+ end
data/spec/gauge_spec.rb CHANGED
@@ -32,6 +32,8 @@ describe "Seer::Gauge" do
32
32
  @chart.send(accessor).should == 'foo'
33
33
  end
34
34
  end
35
+
36
+ it_should_behave_like 'it has colors attribute'
35
37
  end
36
38
 
37
39
  it 'renders as JavaScript' do
@@ -44,14 +46,14 @@ describe "Seer::Gauge" do
44
46
  end
45
47
 
46
48
  it 'sets its data table' do
47
- @chart.data_table.to_s.should =~ /data\.setValue\(0, 0,'0'\)/
48
- @chart.data_table.to_s.should =~ /data\.setValue\(0, 1, 8\)/
49
- @chart.data_table.to_s.should =~ /data\.setValue\(1, 0,'1'\)/
50
- @chart.data_table.to_s.should =~ /data\.setValue\(1, 1, 8\)/
51
- @chart.data_table.to_s.should =~ /data\.setValue\(2, 0,'2'\)/
52
- @chart.data_table.to_s.should =~ /data\.setValue\(2, 1, 8\)/
53
- @chart.data_table.to_s.should =~ /data\.setValue\(3, 0,'3'\)/
54
- @chart.data_table.to_s.should =~ /data\.setValue\(3, 1, 8\)/
49
+ @chart.data_table.to_s.should set_value(0, 0,'0')
50
+ @chart.data_table.to_s.should set_value(0, 1, 8)
51
+ @chart.data_table.to_s.should set_value(1, 0,'1')
52
+ @chart.data_table.to_s.should set_value(1, 1, 8)
53
+ @chart.data_table.to_s.should set_value(2, 0,'2')
54
+ @chart.data_table.to_s.should set_value(2, 1, 8)
55
+ @chart.data_table.to_s.should set_value(3, 0,'3')
56
+ @chart.data_table.to_s.should set_value(3, 1, 8)
55
57
  end
56
58
 
57
59
  end
data/spec/helpers.rb ADDED
@@ -0,0 +1,37 @@
1
+ describe "it has colors attribute", :shared => true do
2
+ it 'sets its colors value' do
3
+ color_list = ['#7e7587','#990000','#009900', '#3e5643', '#660000', '#003300']
4
+ @chart.colors = color_list
5
+ @chart.colors.should == color_list
6
+ end
7
+
8
+ it 'colors should be an array' do
9
+ lambda {
10
+ @chart.colors = '#000000'
11
+ }.should raise_error(ArgumentError)
12
+ end
13
+
14
+ it 'colors should be valid hex values' do
15
+ lambda {
16
+ @chart.colors = ['#000000', 'NOTHEX']
17
+ }.should raise_error(ArgumentError)
18
+ end
19
+ end
20
+
21
+ describe "it sets default values", :shared => true do
22
+ it 'colors' do
23
+ @chart.colors.should == Seer::Chart::DEFAULT_COLORS
24
+ end
25
+
26
+ it 'legend' do
27
+ @chart.legend.should == Seer::Chart::DEFAULT_LEGEND_LOCATION
28
+ end
29
+
30
+ it 'height' do
31
+ @chart.height.should == Seer::Chart::DEFAULT_HEIGHT
32
+ end
33
+
34
+ it 'width' do
35
+ @chart.width.should == Seer::Chart::DEFAULT_WIDTH
36
+ end
37
+ end
@@ -14,34 +14,20 @@ describe "Seer::LineChart" do
14
14
  )
15
15
  end
16
16
 
17
- describe 'defaults' do
18
-
19
- it 'colors' do
20
- @chart.colors.should == Seer::Chart::DEFAULT_COLORS
21
- end
22
-
23
- it 'legend' do
24
- @chart.legend.should == Seer::Chart::DEFAULT_LEGEND_LOCATION
25
- end
26
-
27
- it 'height' do
28
- @chart.height.should == Seer::Chart::DEFAULT_HEIGHT
29
- end
30
-
31
- it 'width' do
32
- @chart.width.should == Seer::Chart::DEFAULT_WIDTH
33
- end
34
-
17
+ describe 'defaults' do
18
+ it_should_behave_like 'it sets default values'
35
19
  end
36
20
 
37
21
  describe 'graph options' do
38
22
 
39
- [:axis_color, :axis_background_color, :axis_font_size, :background_color, :border_color, :colors, :enable_tooltip, :focus_border_color, :height, :legend, :legend_background_color, :legend_font_size, :legend_text_color, :line_size, :log_scale, :max, :min, :point_size, :reverse_axis, :show_categories, :smooth_line, :title, :title_x, :title_y, :title_color, :title_font_size, :tooltip_font_size, :tooltip_height, :number, :tooltip_width, :width].each do |accessor|
23
+ [:axis_color, :axis_background_color, :axis_font_size, :background_color, :border_color, :enable_tooltip, :focus_border_color, :height, :legend, :legend_background_color, :legend_font_size, :legend_text_color, :line_size, :log_scale, :max, :min, :point_size, :reverse_axis, :show_categories, :smooth_line, :title, :title_x, :title_y, :title_color, :title_font_size, :tooltip_font_size, :tooltip_height, :number, :tooltip_width, :width].each do |accessor|
40
24
  it "sets its #{accessor} value" do
41
25
  @chart.send("#{accessor}=", 'foo')
42
26
  @chart.send(accessor).should == 'foo'
43
27
  end
44
28
  end
29
+
30
+ it_should_behave_like 'it has colors attribute'
45
31
  end
46
32
 
47
33
  it 'renders as JavaScript' do
@@ -50,24 +36,51 @@ describe "Seer::LineChart" do
50
36
  end
51
37
 
52
38
  it 'sets its data columns' do
53
- @chart.data_columns.should =~ /addRows\(3\)/
54
- @chart.data_columns.should =~ /addColumn\('string', 'Date'\)/
55
- @chart.data_columns.should =~ /addColumn\('string', 'Date'\)/
56
- @chart.data_columns.should =~ /addColumn\('number', '0'\)/
57
- @chart.data_columns.should =~ /addColumn\('number', '1'\)/
58
- @chart.data_columns.should =~ /addColumn\('number', '2'\)/
59
- @chart.data_columns.should =~ /addColumn\('number', '3'\)/
39
+ @chart.data_columns.should =~ /addRows\(5\)/
40
+ @chart.data_columns.should add_column('string', 'Date')
41
+ @chart.data_columns.should add_column('number', '0')
42
+ @chart.data_columns.should add_column('number', '1')
43
+ @chart.data_columns.should add_column('number', '2')
44
+ @chart.data_columns.should add_column('number', '3')
60
45
  end
61
46
 
62
47
  it 'sets its data table' do
63
- @chart.data_table.to_s.should =~ /data\.setCell\(0, 0,'1'\)/
64
- @chart.data_table.to_s.should =~ /data\.setCell\(1, 0,'2'\)/
65
- @chart.data_table.to_s.should =~ /data\.setCell\(2, 0,'3'\)/
66
- @chart.data_table.to_s.should =~ /data\.setCell\(0,1,8\)/
67
- @chart.data_table.to_s.should =~ /data\.setCell\(2,1,8\)/
68
- @chart.data_table.to_s.should =~ /data\.setCell\(0,2,8\)/
69
- @chart.data_table.to_s.should =~ /data\.setCell\(1,2,8\)/
70
- @chart.data_table.to_s.should =~ /data\.setCell\(2,2,8\)/
48
+ @chart.data_table.to_s.should set_cell(0, 0,'1')
49
+ @chart.data_table.to_s.should set_cell(1, 0,'2')
50
+ @chart.data_table.to_s.should set_cell(2, 0,'3')
51
+ @chart.data_table.to_s.should set_cell(3, 0,'4')
52
+ @chart.data_table.to_s.should set_cell(4, 0,'5')
53
+ @chart.data_table.to_s.should set_cell(0,1,8)
54
+ @chart.data_table.to_s.should set_cell(2,1,8)
55
+ @chart.data_table.to_s.should set_cell(0,2,8)
56
+ @chart.data_table.to_s.should set_cell(1,2,8)
57
+ @chart.data_table.to_s.should set_cell(2,2,8)
58
+ end
59
+
60
+ describe 'when data_series is an array of arrays of arrays/hashes' do
61
+ before(:each) do
62
+ data_series = Array.new(3) {|i| [[i, i+1], [i+1, i+2]]}
63
+ @chart = Seer::LineChart.new(
64
+ :data => [0,1,2,3],
65
+ :series_label => 'to_s',
66
+ :data_series => data_series,
67
+ :data_label => 'first',
68
+ :data_method => 'size',
69
+ :chart_options => {},
70
+ :chart_element => 'chart'
71
+ )
72
+ end
73
+
74
+ it 'calculates number of rows' do
75
+ @chart.data_columns.should =~ /addRows\(4\)/
76
+ end
77
+
78
+ it 'sets its data table' do
79
+ @chart.data_table.to_s.should set_cell(0, 0,'0')
80
+ @chart.data_table.to_s.should set_cell(1, 0,'1')
81
+ @chart.data_table.to_s.should set_cell(2, 0,'2')
82
+ @chart.data_table.to_s.should set_cell(3, 0,'3')
83
+ end
71
84
  end
72
85
 
73
86
  end
@@ -12,34 +12,20 @@ describe "Seer::PieChart" do
12
12
  )
13
13
  end
14
14
 
15
- describe 'defaults' do
16
-
17
- it 'colors' do
18
- @chart.colors.should == Seer::Chart::DEFAULT_COLORS
19
- end
20
-
21
- it 'legend' do
22
- @chart.legend.should == Seer::Chart::DEFAULT_LEGEND_LOCATION
23
- end
24
-
25
- it 'height' do
26
- @chart.height.should == Seer::Chart::DEFAULT_HEIGHT
27
- end
28
-
29
- it 'width' do
30
- @chart.width.should == Seer::Chart::DEFAULT_WIDTH
31
- end
32
-
15
+ describe 'defaults' do
16
+ it_should_behave_like 'it sets default values'
33
17
  end
34
18
 
35
19
  describe 'graph options' do
36
20
 
37
- [:background_color, :border_color, :colors, :enable_tooltip, :focus_border_color, :height, :is_3_d, :legend, :legend_background_color, :legend_font_size, :legend_text_color, :pie_join_angle, :pie_minimal_angle, :title, :title_x, :title_y, :title_color, :title_font_size, :tooltip_font_size, :tooltip_height, :tooltip_width, :width].each do |accessor|
21
+ [:background_color, :border_color, :enable_tooltip, :focus_border_color, :height, :is_3_d, :legend, :legend_background_color, :legend_font_size, :legend_text_color, :pie_join_angle, :pie_minimal_angle, :title, :title_x, :title_y, :title_color, :title_font_size, :tooltip_font_size, :tooltip_height, :tooltip_width, :width].each do |accessor|
38
22
  it "sets its #{accessor} value" do
39
23
  @chart.send("#{accessor}=", 'foo')
40
24
  @chart.send(accessor).should == 'foo'
41
25
  end
42
26
  end
27
+
28
+ it_should_behave_like 'it has colors attribute'
43
29
  end
44
30
 
45
31
  it 'renders as JavaScript' do
@@ -52,14 +38,14 @@ describe "Seer::PieChart" do
52
38
  end
53
39
 
54
40
  it 'sets its data table' do
55
- @chart.data_table.to_s.should =~ /data\.setValue\(0, 0,'0'\)/
56
- @chart.data_table.to_s.should =~ /data\.setValue\(0, 1, 8\)/
57
- @chart.data_table.to_s.should =~ /data\.setValue\(1, 0,'1'\)/
58
- @chart.data_table.to_s.should =~ /data\.setValue\(1, 1, 8\)/
59
- @chart.data_table.to_s.should =~ /data\.setValue\(2, 0,'2'\)/
60
- @chart.data_table.to_s.should =~ /data\.setValue\(2, 1, 8\)/
61
- @chart.data_table.to_s.should =~ /data\.setValue\(3, 0,'3'\)/
62
- @chart.data_table.to_s.should =~ /data\.setValue\(3, 1, 8\)/
41
+ @chart.data_table.to_s.should set_value(0, 0,'0')
42
+ @chart.data_table.to_s.should set_value(0, 1, 8)
43
+ @chart.data_table.to_s.should set_value(1, 0,'1')
44
+ @chart.data_table.to_s.should set_value(1, 1, 8)
45
+ @chart.data_table.to_s.should set_value(2, 0,'2')
46
+ @chart.data_table.to_s.should set_value(2, 1, 8)
47
+ @chart.data_table.to_s.should set_value(3, 0,'3')
48
+ @chart.data_table.to_s.should set_value(3, 1, 8)
63
49
  end
64
50
 
65
51
  end
data/spec/seer_spec.rb CHANGED
@@ -68,8 +68,8 @@ describe "Seer" do
68
68
  :as => :bar_chart,
69
69
  :in_element => 'chart',
70
70
  :series => {
71
- :label => 'to_s',
72
- :data => 'size'
71
+ :series_label => 'to_s',
72
+ :data_method => 'size'
73
73
  },
74
74
  :chart_options => {}
75
75
  ) =~ /barchart/).should be_true
@@ -81,8 +81,8 @@ describe "Seer" do
81
81
  :as => :column_chart,
82
82
  :in_element => 'chart',
83
83
  :series => {
84
- :label => 'to_s',
85
- :data => 'size'
84
+ :series_label => 'to_s',
85
+ :data_method => 'size'
86
86
  },
87
87
  :chart_options => {}
88
88
  ) =~ /columnchart/).should be_true
@@ -94,8 +94,8 @@ describe "Seer" do
94
94
  :as => :gauge,
95
95
  :in_element => 'chart',
96
96
  :series => {
97
- :label => 'to_s',
98
- :data => 'size'
97
+ :series_label => 'to_s',
98
+ :data_method => 'size'
99
99
  },
100
100
  :chart_options => {}
101
101
  ) =~ /gauge/).should be_true
data/spec/spec_helper.rb CHANGED
@@ -1,11 +1,13 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'rubygems'
3
4
  require 'actionpack'
4
- require 'activesupport'
5
+ require 'active_support'
5
6
  require 'spec'
6
7
  require 'spec/autorun'
7
8
  require 'seer'
8
-
9
+ require File.dirname(__FILE__) + "/custom_matchers"
10
+ require File.dirname(__FILE__) + '/helpers'
9
11
  Spec::Runner.configure do |config|
10
-
12
+ config.include(CustomMatcher)
11
13
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Corey Ehmke / SEO Logic
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-17 00:00:00 -06:00
12
+ date: 2010-03-03 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -32,6 +32,7 @@ extra_rdoc_files:
32
32
  - LICENSE
33
33
  - README.rdoc
34
34
  files:
35
+ - CONTRIBUTORS
35
36
  - LICENSE
36
37
  - README.rdoc
37
38
  - Rakefile
@@ -80,7 +81,9 @@ test_files:
80
81
  - spec/bar_chart_spec.rb
81
82
  - spec/chart_spec.rb
82
83
  - spec/column_chart_spec.rb
84
+ - spec/custom_matchers.rb
83
85
  - spec/gauge_spec.rb
86
+ - spec/helpers.rb
84
87
  - spec/line_chart_spec.rb
85
88
  - spec/pie_chart_spec.rb
86
89
  - spec/seer_spec.rb