rbgct 0.1.2 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,6 +7,8 @@ module Rbgct
7
7
  Charts::LineChart
8
8
  when :pie_chart
9
9
  Charts::PieChart
10
+ when :bar_chart
11
+ Charts::BarChart
10
12
  else
11
13
  raise NotImplementedError, "No ChartFactory class for type #{type || 'NULL'}"
12
14
  end
@@ -0,0 +1,44 @@
1
+ module Rbgct::Charts
2
+
3
+ class BarChart
4
+
5
+ include Chart
6
+
7
+ attr_accessor :name, :value, :name_label, :value_label, :is3D
8
+
9
+ def initialize(data, opts)
10
+ raise ArgumentError.new('name or value are not defined') unless opts[:name] && opts[:value]
11
+
12
+ @data = data
13
+
14
+ opts.each{ |method,arg| self.send("#{method}=",arg) if self.respond_to?(method)}
15
+
16
+ opts[:chart_options] ||= {}
17
+ opts[:chart_options].each{ |method,arg| self.send("#{method}=",arg) if self.respond_to?(method)}
18
+
19
+ set_default_values # in Chart
20
+ set_default_values_pie_chart
21
+ end
22
+
23
+ def data_columns
24
+ "data.addColumn('string', '#{name_label}');
25
+ data.addColumn('number', '#{value_label}');"
26
+ end
27
+
28
+ def data_rows
29
+ data.inject([]) do |ary, el|
30
+ ary << " data.setValue(#{ary.size}, 0, '#{el.send(name)}');\n data.setValue(#{ary.size}, 1, #{el.send(value)});"
31
+ end.unshift("data.addRows(#{data.size});").join("\n")
32
+ end
33
+
34
+ def options_for_chart
35
+ %(, is3D: "#{is3D}")
36
+ end
37
+
38
+ def set_default_values_pie_chart
39
+ @is3D ||= true
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -1,7 +1,7 @@
1
1
  module Rbgct::Charts
2
2
 
3
3
  module Chart
4
-
4
+
5
5
  DEFAULT_WIDTH = 600
6
6
  DEFAULT_HEIGHT = 400
7
7
 
@@ -13,51 +13,41 @@ module Rbgct::Charts
13
13
  return render_warning ? "<span class='rbgct-no-data'>Dataset <em>#{title}<em> contains no data.</span>" : nil
14
14
  end
15
15
  <<-EOL
16
- #{jsapi}
17
16
  #{draw_visualization_start}
18
17
  #{data_columns}
19
18
  #{data_rows}
20
19
  #{draw_visualization_end}
21
20
  EOL
22
21
  end
23
-
24
- def jsapi
25
- <<-EOL
26
- <script type="text/javascript" src="http://www.google.com/jsapi"></script>
27
- <script type="text/javascript">
28
- google.load('visualization', '1', {packages: ['#{package}']});
29
- </script>
30
- EOL
31
- end
32
22
 
33
23
  def draw_visualization_start
34
24
  <<-EOL
25
+ <div id="#{dom_id}" style="width: #{width}px; height: #{height}px;"></div>
35
26
  <script type="text/javascript">
36
- function drawVisualization() {
37
- // Create and populate the data table.
38
- var data = new google.visualization.DataTable();
27
+ rbgct.graphs['#{dom_id}'] = (function() {
28
+
29
+ if(document.getElementById('#{dom_id}')){
30
+ // Create and populate the data table.
31
+ var data = new google.visualization.DataTable();
39
32
  EOL
40
33
  end
41
34
 
42
35
  def draw_visualization_end
43
36
  <<-EOL
44
37
 
45
- // Create and draw the visualization.
46
- new google.visualization.#{class_name}(document.getElementById('#{dom_id}')).
47
- draw(data, {width: #{width}, height: #{height}, backgroundColor:{stroke:'#{bg_stroke_color}', strokeWidth:#{bg_stroke}, fill:'#{bg_color}'}, title: "#{title}", chartArea: {top: #{top}, left: #{left}} #{options_for_chart}});
48
- }
49
-
50
- google.setOnLoadCallback(drawVisualization);
38
+ // Create and draw the visualization.
39
+ new google.visualization.#{class_name}(document.getElementById('#{dom_id}')).
40
+ draw(data, {width: #{width}, height: #{height}, backgroundColor:{stroke:'#{bg_stroke_color}', strokeWidth:#{bg_stroke}, fill:'#{bg_color}'}, title: "#{title}", chartArea: {top: #{top}, left: #{left}} #{options_for_chart}});
41
+ }
42
+ })
43
+ rbgct.drawGraphs();
51
44
  </script>
52
- <div id="#{dom_id}" style="width: #{width}px; height: #{height}px;"></div>
53
45
  EOL
54
46
  end
55
47
 
56
48
  def package
57
49
  case type
58
- when :line_chart
59
- 'corechart'
60
- when :pie_chart
50
+ when :line_chart, :bar_chart, :pie_chart
61
51
  'corechart'
62
52
  end
63
53
  end
data/lib/rbgct/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rbgct
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2"
3
3
  end
data/lib/rbgct.rb CHANGED
@@ -4,9 +4,43 @@ module Rbgct
4
4
  require 'rbgct/charts/chart'
5
5
  require 'rbgct/charts/line_chart'
6
6
  require 'rbgct/charts/pie_chart'
7
+ require 'rbgct/charts/bar_chart'
7
8
 
8
9
  class NotImplementedError < StandardError; end
9
10
 
11
+ def self.include_javascript(packages=['corechart','table'])
12
+ <<-EOL
13
+ <script type="text/javascript" src="http://www.google.com/jsapi"></script>
14
+ <script type="text/javascript">
15
+ var rbgct = {
16
+
17
+ "graphs" : {},
18
+
19
+ "loadedPackages" : [],
20
+
21
+ "packages" : ['#{packages.join("\',\'")}'],
22
+
23
+ "drawGraphs" : (function(){
24
+ for(var i in rbgct.graphs){
25
+ rbgct.graphs[i]();
26
+ }
27
+ }),
28
+
29
+ "loadPackages" : (function(){
30
+ for(var i in rbgct.packages){
31
+ if( rbgct.loadedPackages.indexOf(rbgct.packages[i]) == -1 ){
32
+ google.load('visualization', '1', {packages: [rbgct.packages[i]]});
33
+ rbgct.loadedPackages.push(rbgct.packages[i]);
34
+ }
35
+ }
36
+ google.setOnLoadCallback(rbgct.drawGraphs)
37
+ })
38
+ };
39
+ rbgct.loadPackages();
40
+ </script>
41
+ EOL
42
+ end
43
+
10
44
  def self.render(data, opts={})
11
45
  raise ArgumentError.new('Dataset must respond to :each') unless data.respond_to?(:each)
12
46
  chart = ChartFactory[opts[:type]].new(data,opts)
metadata CHANGED
@@ -1,25 +1,28 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rbgct
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.2
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: "0.2"
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Emanuele Tozzato
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-21 00:00:00.000000000 -07:00
13
- default_executable:
12
+
13
+ date: 2012-07-23 00:00:00 Z
14
14
  dependencies: []
15
- description: ! 'Google Chart Tools provide a perfect way to visualize data on your
16
- website: now on Ruby'
17
- email:
15
+
16
+ description: "Google Chart Tools provide a perfect way to visualize data on your website: now on Ruby"
17
+ email:
18
18
  - etozzato@gmail.com
19
19
  executables: []
20
+
20
21
  extensions: []
22
+
21
23
  extra_rdoc_files: []
22
- files:
24
+
25
+ files:
23
26
  - .gitignore
24
27
  - Gemfile
25
28
  - LICENSE
@@ -29,34 +32,39 @@ files:
29
32
  - init.rb
30
33
  - lib/rbgct.rb
31
34
  - lib/rbgct/chart_factory.rb
35
+ - lib/rbgct/charts/bar_chart.rb
32
36
  - lib/rbgct/charts/chart.rb
33
37
  - lib/rbgct/charts/line_chart.rb
34
38
  - lib/rbgct/charts/pie_chart.rb
35
39
  - lib/rbgct/version.rb
36
40
  - rbgct.gemspec
37
- has_rdoc: true
38
41
  homepage: http://www.mekdigital.com
39
42
  licenses: []
43
+
40
44
  post_install_message:
41
45
  rdoc_options: []
42
- require_paths:
46
+
47
+ require_paths:
43
48
  - lib
44
- required_ruby_version: !ruby/object:Gem::Requirement
49
+ required_ruby_version: !ruby/object:Gem::Requirement
45
50
  none: false
46
- requirements:
47
- - - ! '>='
48
- - !ruby/object:Gem::Version
49
- version: '0'
50
- required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: "0"
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
56
  none: false
52
- requirements:
53
- - - ! '>='
54
- - !ruby/object:Gem::Version
55
- version: '0'
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: "0"
56
61
  requirements: []
62
+
57
63
  rubyforge_project: rbgct
58
- rubygems_version: 1.5.2
64
+ rubygems_version: 1.8.24
59
65
  signing_key:
60
66
  specification_version: 3
61
67
  summary: Ruby Google Chart Tools
62
68
  test_files: []
69
+
70
+ has_rdoc: