google_visualr 0.0.1 → 2.0.0
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/.gitignore +3 -0
- data/.rspec +2 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +25 -0
- data/MIT-LICENSE +15 -14
- data/README.rdoc +59 -48
- data/Rakefile +9 -30
- data/google_visualr.gemspec +24 -0
- data/lib/google_visualr.rb +39 -0
- data/lib/google_visualr/base_chart.rb +40 -0
- data/lib/google_visualr/data_table.rb +277 -0
- data/lib/google_visualr/formatters.rb +78 -0
- data/lib/google_visualr/image/spark_line.rb +13 -0
- data/lib/google_visualr/interactive/annotated_time_line.rb +11 -0
- data/lib/google_visualr/interactive/area_chart.rb +13 -0
- data/lib/google_visualr/interactive/bar_chart.rb +13 -0
- data/lib/google_visualr/interactive/candlestick_chart.rb +13 -0
- data/lib/google_visualr/interactive/column_chart.rb +13 -0
- data/lib/google_visualr/interactive/combo_chart.rb +13 -0
- data/lib/google_visualr/interactive/gauge.rb +11 -0
- data/lib/google_visualr/interactive/geo_chart.rb +11 -0
- data/lib/google_visualr/interactive/intensity_map.rb +11 -0
- data/lib/google_visualr/interactive/line_chart.rb +13 -0
- data/lib/google_visualr/interactive/map.rb +11 -0
- data/lib/google_visualr/interactive/motion_chart.rb +11 -0
- data/lib/google_visualr/interactive/org_chart.rb +11 -0
- data/lib/google_visualr/interactive/pie_chart.rb +13 -0
- data/lib/google_visualr/interactive/scatter_chart.rb +13 -0
- data/lib/google_visualr/interactive/table.rb +11 -0
- data/lib/google_visualr/interactive/treemap.rb +11 -0
- data/lib/google_visualr/packages.rb +30 -0
- data/lib/google_visualr/param_helpers.rb +50 -0
- data/lib/google_visualr/version.rb +3 -0
- data/spec/google_visualr/base_chart_spec.rb +55 -0
- data/spec/google_visualr/data_table_spec.rb +251 -0
- data/spec/google_visualr/formatters_spec.rb +104 -0
- data/spec/spec_helper.rb +8 -0
- data/test/google_visualr_spec.rb +7 -0
- data/test/helper.rb +18 -0
- metadata +73 -36
- data/VERSION +0 -1
- data/init.rb +0 -17
- data/install.rb +0 -1
- data/lib/annotated_time_line.rb +0 -50
- data/lib/area_chart.rb +0 -54
- data/lib/bar_chart.rb +0 -53
- data/lib/base_chart.rb +0 -285
- data/lib/column_chart.rb +0 -53
- data/lib/formatters.rb +0 -184
- data/lib/gauge.rb +0 -36
- data/lib/geo_map.rb +0 -32
- data/lib/image_spark_line.rb +0 -36
- data/lib/intensity_map.rb +0 -29
- data/lib/line_chart.rb +0 -54
- data/lib/map.rb +0 -31
- data/lib/motion_chart.rb +0 -36
- data/lib/org_chart.rb +0 -29
- data/lib/pie_chart.rb +0 -44
- data/lib/scatter_chart.rb +0 -52
- data/lib/table.rb +0 -39
- data/uninstall.rb +0 -1
@@ -0,0 +1,78 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
|
3
|
+
# http://code.google.com/apis/chart/interactive/docs/reference.html#formatters
|
4
|
+
class Formatter
|
5
|
+
include GoogleVisualr::ParamHelpers
|
6
|
+
|
7
|
+
def initialize(options={})
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
def columns(*columns)
|
13
|
+
@columns = columns.flatten
|
14
|
+
end
|
15
|
+
|
16
|
+
def options(*options)
|
17
|
+
@options = stringify_keys!(options.pop)
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_js(&block)
|
21
|
+
js = "\nvar formatter = new google.visualization.#{self.class.to_s.split('::').last}("
|
22
|
+
js << js_parameters(@options)
|
23
|
+
js << ");"
|
24
|
+
|
25
|
+
yield js if block_given?
|
26
|
+
|
27
|
+
@columns.each do |column|
|
28
|
+
js << "\nformatter.format(data_table, #{column});"
|
29
|
+
end
|
30
|
+
|
31
|
+
js
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
class ArrowFormat < Formatter
|
37
|
+
end
|
38
|
+
|
39
|
+
class BarFormat < Formatter
|
40
|
+
end
|
41
|
+
|
42
|
+
class ColorFormat < Formatter
|
43
|
+
|
44
|
+
attr_accessor :ranges
|
45
|
+
attr_accessor :gradient_ranges
|
46
|
+
|
47
|
+
def initialize
|
48
|
+
@ranges = Array.new
|
49
|
+
@gradient_ranges = Array.new
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_range(from, to, color, bgcolor)
|
53
|
+
@ranges << { :from => from, :to => to, :color => color, :bgcolor => bgcolor }
|
54
|
+
end
|
55
|
+
|
56
|
+
def add_gradient_range(from, to, color, fromBgColor, toBgColor)
|
57
|
+
@gradient_ranges << { :from => from, :to => to, :color => color, :fromBgColor => fromBgColor, :toBgColor => toBgColor }
|
58
|
+
end
|
59
|
+
|
60
|
+
def to_js
|
61
|
+
super do |js|
|
62
|
+
@ranges.each do |r|
|
63
|
+
js << "\nformatter.addRange(#{typecast(r[:from])}, #{typecast(r[:to])}, '#{r[:color]}', '#{r[:bgcolor]}');"
|
64
|
+
end
|
65
|
+
@gradient_ranges.each do |r|
|
66
|
+
js << "\nformatter.addGradientRange(#{typecast(r[:from])}, #{typecast(r[:to])}, '#{r[:color]}', '#{r[:fromBgColor]}', '#{r[:toBgColor]}');"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class DateFormat < Formatter
|
73
|
+
end
|
74
|
+
|
75
|
+
class NumberFormat < Formatter
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Image
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/imagesparkline.html
|
5
|
+
class SparkLine < BaseChart
|
6
|
+
include GoogleVisualr::Packages::ImageChart
|
7
|
+
|
8
|
+
# For Configuration Options, please refer to:
|
9
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/imagesparkline.html#Configuration_Options
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/annotatedtimeline.html
|
5
|
+
class AnnotatedTimeLine < BaseChart
|
6
|
+
# For Configuration Options, please refer to:
|
7
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/annotatedtimeline.html#Configuration_Options
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/areachart.html
|
5
|
+
class AreaChart < BaseChart
|
6
|
+
include GoogleVisualr::Packages::CoreChart
|
7
|
+
|
8
|
+
# For Configuration Options, please refer to:
|
9
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/areachart.html#Configuration_Options
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/barchart.html
|
5
|
+
class BarChart < BaseChart
|
6
|
+
include GoogleVisualr::Packages::CoreChart
|
7
|
+
|
8
|
+
# For Configuration Options, please refer to:
|
9
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/barchart.html#Configuration_Options
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/candlestickchart.html
|
5
|
+
class CandlestickChart < BaseChart
|
6
|
+
include GoogleVisualr::Packages::CoreChart
|
7
|
+
|
8
|
+
# For Configuration Options, please refer to:
|
9
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/candlestickchart.html#Configuration_Options
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/columnchart.html
|
5
|
+
class ColumnChart < BaseChart
|
6
|
+
include GoogleVisualr::Packages::CoreChart
|
7
|
+
|
8
|
+
# For Configuration Options, please refer to:
|
9
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/columnchart.html#Configuration_Options
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/combochart.html
|
5
|
+
class ComboChart < BaseChart
|
6
|
+
include GoogleVisualr::Packages::CoreChart
|
7
|
+
|
8
|
+
# For Configuration Options, please refer to:
|
9
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/combochart.html#Configuration_Options
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/gauge.html
|
5
|
+
class Gauge < BaseChart
|
6
|
+
# For Configuration Options, please refer to:
|
7
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/gauge.html#Configuration_Options
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/geochart.html
|
5
|
+
class GeoChart < BaseChart
|
6
|
+
# For Configuration Options, please refer to:
|
7
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/geochart.html#Configuration_Options
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/intensitymap.html
|
5
|
+
class IntensityMap < BaseChart
|
6
|
+
# For Configuration Options, please refer to:
|
7
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/intensitymap.html#Configuration_Options
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/linechart.html
|
5
|
+
class LineChart < BaseChart
|
6
|
+
include GoogleVisualr::Packages::CoreChart
|
7
|
+
|
8
|
+
# For Configuration Options, please refer to:
|
9
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/linechart.html#Configuration_Options
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/map.html
|
5
|
+
class Map < BaseChart
|
6
|
+
# For Configuration Options, please refer to:
|
7
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/map.html#Configuration_Options
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/motionchart.html
|
5
|
+
class MotionChart < BaseChart
|
6
|
+
# For Configuration Options, please refer to:
|
7
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/motionchart.html#Configuration_Options
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/orgchart.html
|
5
|
+
class OrgChart < BaseChart
|
6
|
+
# For Configuration Options, please refer to:
|
7
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/orgchart.html#Configuration_Options
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/piechart.html
|
5
|
+
class PieChart < BaseChart
|
6
|
+
include GoogleVisualr::Packages::CoreChart
|
7
|
+
|
8
|
+
# For Configuration Options, please refer to:
|
9
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/piechart.html#Configuration_Options
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/scatterchart.html
|
5
|
+
class ScatterChart < BaseChart
|
6
|
+
include GoogleVisualr::Packages::CoreChart
|
7
|
+
|
8
|
+
# For Configuration Options, please refer to:
|
9
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/scatterchart.html#Configuration_Options
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/table.html
|
5
|
+
class Table < BaseChart
|
6
|
+
# For Configuration Options, please refer to:
|
7
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/table.html#Configuration_Options
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
module Interactive
|
3
|
+
|
4
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/treemap.html
|
5
|
+
class Treemap < BaseChart
|
6
|
+
# For Configuration Options, please refer to:
|
7
|
+
# http://code.google.com/apis/chart/interactive/docs/gallery/treemap.html#Configuration_Options
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
|
3
|
+
module Packages
|
4
|
+
|
5
|
+
def package_name
|
6
|
+
self.class.to_s.split("::").last.downcase
|
7
|
+
end
|
8
|
+
|
9
|
+
def class_name
|
10
|
+
self.class.to_s.split('::').last
|
11
|
+
end
|
12
|
+
|
13
|
+
module CoreChart
|
14
|
+
def package_name
|
15
|
+
"corechart"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module ImageChart
|
20
|
+
def package_name
|
21
|
+
"image#{self.class.to_s.split("::").last.downcase}"
|
22
|
+
end
|
23
|
+
def class_name
|
24
|
+
"Image#{self.class.to_s.split('::').last}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module GoogleVisualr
|
2
|
+
|
3
|
+
module ParamHelpers
|
4
|
+
|
5
|
+
def stringify_keys!(options)
|
6
|
+
options.keys.each do |key|
|
7
|
+
options[key.to_s] = options.delete(key)
|
8
|
+
end
|
9
|
+
options
|
10
|
+
end
|
11
|
+
|
12
|
+
def js_parameters(options)
|
13
|
+
return "" if options.nil?
|
14
|
+
|
15
|
+
attributes = options.collect { |(key, value)| "#{key}: #{typecast(value)}" }
|
16
|
+
"{" + attributes.join(", ") + "}"
|
17
|
+
end
|
18
|
+
|
19
|
+
# If the column type is 'string' , the value should be a string.
|
20
|
+
# If the column type is 'number' , the value should be a number.
|
21
|
+
# If the column type is 'boolean' , the value should be a boolean.
|
22
|
+
# If the column type is 'date' , the value should be a Date object.
|
23
|
+
# If the column type is 'datetime' , the value should be a DateTime or Time object.
|
24
|
+
# If the column type is 'timeofday' , the value should be an array of three or four numbers: [hour, minute, second, optional milliseconds].
|
25
|
+
# Returns 'null' when value is nil.
|
26
|
+
# Recursive typecasting when value is a hash.
|
27
|
+
def typecast(value)
|
28
|
+
case
|
29
|
+
when value.is_a?(String)
|
30
|
+
return "'#{value.gsub(/[']/, '\\\\\'')}'"
|
31
|
+
when value.is_a?(Integer) || value.is_a?(Float)
|
32
|
+
return value
|
33
|
+
when value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
34
|
+
return "#{value}"
|
35
|
+
when value.is_a?(Date)
|
36
|
+
return "new Date(#{value.year}, #{value.month-1}, #{value.day})"
|
37
|
+
when value.is_a?(DateTime) || value.is_a?(Time)
|
38
|
+
return "new Date(#{value.year}, #{value.month-1}, #{value.day}, #{value.hour}, #{value.min}, #{value.sec})"
|
39
|
+
when value.nil?
|
40
|
+
return "null"
|
41
|
+
when value.is_a?(Hash)
|
42
|
+
return js_parameters(value)
|
43
|
+
else
|
44
|
+
return value
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GoogleVisualr::BaseChart do
|
4
|
+
|
5
|
+
def data_table
|
6
|
+
|
7
|
+
@cols = [
|
8
|
+
{ :type => "string", :label => "Year" },
|
9
|
+
{ :type => "number", :label => "Sales" },
|
10
|
+
{ :type => "number", :label => "Expenses" }
|
11
|
+
]
|
12
|
+
@rows = [
|
13
|
+
{ :c => [ {:v => "2004"}, {:v => 1000}, {:v => 400} ] },
|
14
|
+
{ :c => [ {:v => "2005"}, {:v => 1200}, {:v => 450} ] },
|
15
|
+
{ :c => [ {:v => "2006"}, {:v => 1500}, {:v => 600} ] },
|
16
|
+
{ :c => [ {:v => "2007"}, {:v => 800 }, {:v => 500} ] }
|
17
|
+
]
|
18
|
+
GoogleVisualr::DataTable.new(:cols => @cols, :rows => @rows)
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
before do
|
23
|
+
@dt = data_table
|
24
|
+
@chart = GoogleVisualr::BaseChart.new( @dt, { :legend => "Test Chart", :width => 800, :is3D => true } )
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#initialize" do
|
28
|
+
it "works" do
|
29
|
+
@chart.data_table.should == @dt
|
30
|
+
@chart.options.should == { "legend" => "Test Chart", "width" => 800, "is3D" => true }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#options=" do
|
35
|
+
it "works" do
|
36
|
+
@chart.options = { :legend => "Awesome Chart", :width => 1000, :is3D => false }
|
37
|
+
@chart.options.should == { "legend" => "Awesome Chart", "width" => 1000, "is3D" => false }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#to_js" do
|
42
|
+
it "generates JS" do
|
43
|
+
js = @chart.to_js("#body")
|
44
|
+
js.should_not be_nil
|
45
|
+
js.should match /DataTable/i
|
46
|
+
js.should match /addColumn/i
|
47
|
+
js.should match /addRow/i
|
48
|
+
js.should match /legend/i
|
49
|
+
js.should match /Test Chart/i
|
50
|
+
js.should match /width/i
|
51
|
+
js.should match /800/i
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|