rbgct 0.1.2 → 0.2

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.
@@ -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: