rbgct 0.1.2 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rbgct/chart_factory.rb +2 -0
- data/lib/rbgct/charts/bar_chart.rb +44 -0
- data/lib/rbgct/charts/chart.rb +14 -24
- data/lib/rbgct/version.rb +1 -1
- data/lib/rbgct.rb +34 -0
- metadata +31 -23
data/lib/rbgct/chart_factory.rb
CHANGED
@@ -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
|
data/lib/rbgct/charts/chart.rb
CHANGED
@@ -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
|
-
|
37
|
-
|
38
|
-
|
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
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
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
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
|
-
|
13
|
-
|
12
|
+
|
13
|
+
date: 2012-07-23 00:00:00 Z
|
14
14
|
dependencies: []
|
15
|
-
|
16
|
-
|
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
|
-
|
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
|
-
|
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:
|
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:
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "0"
|
56
61
|
requirements: []
|
62
|
+
|
57
63
|
rubyforge_project: rbgct
|
58
|
-
rubygems_version: 1.
|
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:
|