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.
Files changed (62) hide show
  1. data/.gitignore +3 -0
  2. data/.rspec +2 -0
  3. data/.rvmrc +1 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +25 -0
  6. data/MIT-LICENSE +15 -14
  7. data/README.rdoc +59 -48
  8. data/Rakefile +9 -30
  9. data/google_visualr.gemspec +24 -0
  10. data/lib/google_visualr.rb +39 -0
  11. data/lib/google_visualr/base_chart.rb +40 -0
  12. data/lib/google_visualr/data_table.rb +277 -0
  13. data/lib/google_visualr/formatters.rb +78 -0
  14. data/lib/google_visualr/image/spark_line.rb +13 -0
  15. data/lib/google_visualr/interactive/annotated_time_line.rb +11 -0
  16. data/lib/google_visualr/interactive/area_chart.rb +13 -0
  17. data/lib/google_visualr/interactive/bar_chart.rb +13 -0
  18. data/lib/google_visualr/interactive/candlestick_chart.rb +13 -0
  19. data/lib/google_visualr/interactive/column_chart.rb +13 -0
  20. data/lib/google_visualr/interactive/combo_chart.rb +13 -0
  21. data/lib/google_visualr/interactive/gauge.rb +11 -0
  22. data/lib/google_visualr/interactive/geo_chart.rb +11 -0
  23. data/lib/google_visualr/interactive/intensity_map.rb +11 -0
  24. data/lib/google_visualr/interactive/line_chart.rb +13 -0
  25. data/lib/google_visualr/interactive/map.rb +11 -0
  26. data/lib/google_visualr/interactive/motion_chart.rb +11 -0
  27. data/lib/google_visualr/interactive/org_chart.rb +11 -0
  28. data/lib/google_visualr/interactive/pie_chart.rb +13 -0
  29. data/lib/google_visualr/interactive/scatter_chart.rb +13 -0
  30. data/lib/google_visualr/interactive/table.rb +11 -0
  31. data/lib/google_visualr/interactive/treemap.rb +11 -0
  32. data/lib/google_visualr/packages.rb +30 -0
  33. data/lib/google_visualr/param_helpers.rb +50 -0
  34. data/lib/google_visualr/version.rb +3 -0
  35. data/spec/google_visualr/base_chart_spec.rb +55 -0
  36. data/spec/google_visualr/data_table_spec.rb +251 -0
  37. data/spec/google_visualr/formatters_spec.rb +104 -0
  38. data/spec/spec_helper.rb +8 -0
  39. data/test/google_visualr_spec.rb +7 -0
  40. data/test/helper.rb +18 -0
  41. metadata +73 -36
  42. data/VERSION +0 -1
  43. data/init.rb +0 -17
  44. data/install.rb +0 -1
  45. data/lib/annotated_time_line.rb +0 -50
  46. data/lib/area_chart.rb +0 -54
  47. data/lib/bar_chart.rb +0 -53
  48. data/lib/base_chart.rb +0 -285
  49. data/lib/column_chart.rb +0 -53
  50. data/lib/formatters.rb +0 -184
  51. data/lib/gauge.rb +0 -36
  52. data/lib/geo_map.rb +0 -32
  53. data/lib/image_spark_line.rb +0 -36
  54. data/lib/intensity_map.rb +0 -29
  55. data/lib/line_chart.rb +0 -54
  56. data/lib/map.rb +0 -31
  57. data/lib/motion_chart.rb +0 -36
  58. data/lib/org_chart.rb +0 -29
  59. data/lib/pie_chart.rb +0 -44
  60. data/lib/scatter_chart.rb +0 -52
  61. data/lib/table.rb +0 -39
  62. data/uninstall.rb +0 -1
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.6
data/init.rb DELETED
@@ -1,17 +0,0 @@
1
- require File.dirname(__FILE__) + '/lib/base_chart'
2
- require File.dirname(__FILE__) + '/lib/annotated_time_line'
3
- require File.dirname(__FILE__) + '/lib/area_chart'
4
- require File.dirname(__FILE__) + '/lib/bar_chart'
5
- require File.dirname(__FILE__) + '/lib/column_chart'
6
- require File.dirname(__FILE__) + '/lib/gauge'
7
- require File.dirname(__FILE__) + '/lib/geo_map'
8
- require File.dirname(__FILE__) + '/lib/image_spark_line'
9
- require File.dirname(__FILE__) + '/lib/intensity_map'
10
- require File.dirname(__FILE__) + '/lib/line_chart'
11
- require File.dirname(__FILE__) + '/lib/map'
12
- require File.dirname(__FILE__) + '/lib/motion_chart'
13
- require File.dirname(__FILE__) + '/lib/org_chart'
14
- require File.dirname(__FILE__) + '/lib/pie_chart'
15
- require File.dirname(__FILE__) + '/lib/scatter_chart'
16
- require File.dirname(__FILE__) + '/lib/table'
17
- require File.dirname(__FILE__) + '/lib/formatters'
data/install.rb DELETED
@@ -1 +0,0 @@
1
- # Install Hook
@@ -1,50 +0,0 @@
1
- module GoogleVisualr
2
-
3
- # http://code.google.com/apis/visualization/documentation/gallery/annotatedtimeline.html
4
- class AnnotatedTimeLine < BaseChart
5
-
6
- attr_accessor :element_id
7
-
8
- # http://code.google.com/apis/visualization/documentation/gallery/annotatedtimeline.html#Configuration_Options
9
- attr_accessor :allowHtml
10
- attr_accessor :allowRedraw
11
- attr_accessor :allValuesSuffix
12
- attr_accessor :annotationsWidth
13
- attr_accessor :colors
14
- attr_accessor :dateFormat
15
- attr_accessor :displayAnnotations
16
- attr_accessor :displayAnnotationsFilter
17
- attr_accessor :displayDateBarSeparator
18
- attr_accessor :displayExactValues
19
- attr_accessor :displayLegendDots
20
- attr_accessor :displayLegendValues
21
- attr_accessor :displayRangeSelector
22
- attr_accessor :displayZoomButtons
23
- attr_accessor :fill
24
- attr_accessor :highlightDot
25
- attr_accessor :legendPosition
26
- attr_accessor :max
27
- attr_accessor :min
28
- attr_accessor :numberFormats
29
- attr_accessor :scaleColumns
30
- attr_accessor :scaleType
31
- attr_accessor :thickness
32
- attr_accessor :wmode
33
- attr_accessor :zoomEndTime
34
- attr_accessor :zoomStartTime
35
-
36
- def render (element_id)
37
-
38
- options = Hash.new
39
-
40
- options[:package] = self.class.to_s.split('::').last
41
- options[:element_id] = element_id
42
- options[:chart_style] = collect_parameters
43
-
44
- super(options)
45
-
46
- end
47
-
48
- end
49
-
50
- end
data/lib/area_chart.rb DELETED
@@ -1,54 +0,0 @@
1
- module GoogleVisualr
2
-
3
- # http://code.google.com/apis/visualization/documentation/gallery/areachart.html
4
- class AreaChart < BaseChart
5
-
6
- attr_accessor :element_id
7
-
8
- # http://code.google.com/apis/visualization/documentation/gallery/areachart.html#Configuration_Options
9
- attr_accessor :axisColor
10
- attr_accessor :axisBackgroundColor
11
- attr_accessor :axisFontSize
12
- attr_accessor :backgroundColor
13
- attr_accessor :borderColor
14
- attr_accessor :colors
15
- attr_accessor :enableTooltip
16
- attr_accessor :focusBorderColor
17
- attr_accessor :height
18
- attr_accessor :isStacked
19
- attr_accessor :legend
20
- attr_accessor :legendBackgroundColor
21
- attr_accessor :legendFontSize
22
- attr_accessor :legendTextColor
23
- attr_accessor :lineSize
24
- attr_accessor :logScale
25
- attr_accessor :max
26
- attr_accessor :min
27
- attr_accessor :pointSize
28
- attr_accessor :reverseAxis
29
- attr_accessor :showCategories
30
- attr_accessor :title
31
- attr_accessor :titleX
32
- attr_accessor :titleY
33
- attr_accessor :titleColor
34
- attr_accessor :titleFontSize
35
- attr_accessor :tooltipFontSize
36
- attr_accessor :tooltipHeight
37
- attr_accessor :tooltipWidth
38
- attr_accessor :width
39
-
40
- def render (element_id)
41
-
42
- options = Hash.new
43
-
44
- options[:package] = self.class.to_s.split('::').last
45
- options[:element_id] = element_id
46
- options[:chart_style] = collect_parameters
47
-
48
- super(options)
49
-
50
- end
51
-
52
- end
53
-
54
- end
data/lib/bar_chart.rb DELETED
@@ -1,53 +0,0 @@
1
- module GoogleVisualr
2
-
3
- # http://code.google.com/apis/visualization/documentation/gallery/barchart.html
4
- class BarChart < BaseChart
5
-
6
- attr_accessor :element_id
7
-
8
- # http://code.google.com/apis/visualization/documentation/gallery/barchart.html#Configuration_Options
9
- attr_accessor :axisColor
10
- attr_accessor :axisBackgroundColor
11
- attr_accessor :axisFontSize
12
- attr_accessor :backgroundColor
13
- attr_accessor :borderColor
14
- attr_accessor :colors
15
- attr_accessor :enableTooltip
16
- attr_accessor :focusBorderColor
17
- attr_accessor :height
18
- attr_accessor :is3D
19
- attr_accessor :isStacked
20
- attr_accessor :legend
21
- attr_accessor :legendBackgroundColor
22
- attr_accessor :legendFontSize
23
- attr_accessor :legendTextColor
24
- attr_accessor :logScale
25
- attr_accessor :max
26
- attr_accessor :min
27
- attr_accessor :reverseAxis
28
- attr_accessor :showCategories
29
- attr_accessor :title
30
- attr_accessor :titleX
31
- attr_accessor :titleY
32
- attr_accessor :titleColor
33
- attr_accessor :titleFontSize
34
- attr_accessor :tooltipFontSize
35
- attr_accessor :tooltipHeight
36
- attr_accessor :tooltipWidth
37
- attr_accessor :width
38
-
39
- def render (element_id)
40
-
41
- options = Hash.new
42
-
43
- options[:package] = self.class.to_s.split('::').last
44
- options[:element_id] = element_id
45
- options[:chart_style] = collect_parameters
46
-
47
- super(options)
48
-
49
- end
50
-
51
- end
52
-
53
- end
data/lib/base_chart.rb DELETED
@@ -1,285 +0,0 @@
1
- module GoogleVisualr
2
-
3
- class BaseChart
4
-
5
- attr_accessor :chart_data
6
- attr_accessor :formatters
7
-
8
- ##############################
9
- # Constructors
10
- ##############################
11
- #
12
- # GoogleVisualr::visualization.new:
13
- # Creates an empty visualization instance. Use add_columns, add_rows and set_value or set_cell methods to populate the visualization.
14
- #
15
- # GoogleVisualr::visualization.new(data object):
16
- # reates a visualization by passing a JavaScript-string-literal like data object into the data parameter. This object can contain formatting options.
17
- #
18
- ##############################
19
- # Syntax Description of Data Object
20
- ##############################
21
- #
22
- # The data object consists of two required top-level properties, cols and rows.
23
- #
24
- # * cols property
25
- #
26
- # cols is an array of objects describing the ID and type of each column. Each property is an object with the following properties (case-sensitive):
27
- #
28
- # * type [Required] The data type of the data in the column. Supports the following string values:
29
- # - 'string' : String value. Example values: v:'foo', :v:'bar'
30
- # - 'number' : Number value. Example values: v:7, v:3.14, v:-55
31
- # - 'boolean' : Boolean value ('true' or 'false'). Example values: v:true, v:false
32
- # - 'date' : Date object, with the time truncated. Example value: v:Date.parse('2010-01-01')
33
- # - 'datetime' : DateTime/Time object, time inclusive. Example value: v:DateTime.parse('2010-01-01 14:20:25')
34
- # - 'timeofday' : Array of 3 numbers or 4 numbers, [Hour,Minute,Second,(Optional) Milliseconds]. Example value: v:[8, 15, 0]
35
- # * label [Optional] A string value that some visualizations display for this column. Example: label:'Height'
36
- # * id [Optional] A unique (basic alphanumeric) string ID of the column. Be careful not to choose a JavaScript keyword. Example: id:'col_1'
37
- #
38
- # * rows property
39
- #
40
- # The rows property holds an array of row objects. Each row object has one required property called c, which is an array of cells in that row.
41
- #
42
- # Each cell in the table is described by an object with the following properties:
43
- #
44
- # * v [Optional] The cell value. The data type should match the column data type.
45
- # * f [Optional] A string version of the v value, formatted strictly for display only. If omitted, a string version of v will be used.
46
- #
47
- # Cells in the row array should be in the same order as their column descriptions in cols.
48
- #
49
- # To indicate a null cell, you can either specify null, or set empty string for a cell in an array, or omit trailing array members.
50
- # So, to indicate a row with null for the first two cells, you could specify [ '', '', {cell_val}] or [null, null, {cell_val}].
51
- def initialize(options={})
52
-
53
- @chart_data = "var chart_data = new google.visualization.DataTable();"
54
-
55
- if !options.empty?
56
-
57
- cols = options[:cols]
58
- add_columns(cols)
59
-
60
- rows = options[:rows]
61
- rows.each do |row|
62
- add_row(row[:c])
63
- end
64
-
65
- end
66
-
67
- end
68
-
69
- # Adds a new column to the visualization.
70
- #
71
- # Parameters:
72
- # * type [Required] The data type of the data in the column. Supports the following string values:
73
- # - 'string' : String value. Example values: v:'hello'
74
- # - 'number' : Number value. Example values: v:7 , v:3.14, v:-55
75
- # - 'date' : Date object, with the time truncated. Example values: v:Date.parse('2010-01-01')
76
- # - 'datetime' : Date object including the time. Example values: v:Date.parse('2010-01-01 14:20:25')
77
- # - 'boolean' : Boolean value ('true' or 'false'). Example values: v: true
78
- # * label [Optional] A string value that some visualizations display for this column. Example: label:'Height'
79
- # * id [Optional] A unique (basic alphanumeric) string ID of the column. Be careful not to choose a JavaScript keyword. Example: id:'col_1'
80
- def add_column (type, label="", id="")
81
- @chart_data << "chart_data.addColumn('#{type}', '#{label}', '#{id}');"
82
- end
83
-
84
- # Adds multiple columns to the visualization.
85
- #
86
- # Parameters:
87
- # * columns [Required] An array of column objects {:type, :label, :id}. Calls add_column for each column object.
88
- def add_columns(columns)
89
-
90
- columns.each do |column|
91
- add_column(column[:type], column[:label], column[:id])
92
- end
93
-
94
- end
95
-
96
- # Adds a new row to the visualization.
97
- # Call method without any parameters to add an empty row, otherwise, call method with a row object.
98
- #
99
- # Parameters:
100
- # * row [Optional] An array of cell values specifying the data for the new row.
101
- # - You can specify a value for a cell (e.g. 'hi') or specify a formatted value using cell objects (e.g. {v:55, f:'Fifty-five'}) as described in the constructor section.
102
- # - You can mix simple values and cell objects in the same method call.
103
- # - To create an empty cell, use nil or empty string.
104
- def add_row(row)
105
-
106
- if row.empty?
107
- @chart_data << "chart_data.addRow();" # Empty Row
108
- else
109
-
110
- attributes = Array.new
111
- row.each do |cell|
112
- attributes << add_row_cell(cell)
113
- end
114
-
115
- @chart_data << "chart_data.addRow( [" + attributes.join(",") + "] );"
116
-
117
- end
118
-
119
- end
120
-
121
- # Adds multiple rows to the visualization. You can call this method with data to populate a set of new rows or create new empty rows.
122
- #
123
- # Parameters:
124
- # * array_or_num [Required] Either an array or a number.
125
- # - Array: An array of row objects used to populate a set of new rows. Each row is an object as described in add_row().
126
- # - Number: A number specifying the number of new empty rows to create.
127
- def add_rows(array_or_num)
128
-
129
- if array_or_num.is_a?(Array)
130
- array_or_num.each do |row|
131
- add_row(row)
132
- end
133
- else
134
- @chart_data << "chart_data.addRows(#{array_or_num});"
135
- end
136
-
137
- end
138
-
139
- # Sets the value and/or formatted value of a cell.
140
- #
141
- # Parameters:
142
- # * row_index [Required] A number greater than or equal to zero, but smaller than the total number of rows.
143
- # * column_index [Required] A number greater than or equal to zero, but smaller than the total number of columns.
144
- # * value [Required] The cell value. The data type should match the column data type.
145
- # * formatted_value [Optional] A string version of value, formatted strictly for display only. If omitted, a string version of value will be used.
146
- def set_cell (row_index, column_index, value, formatted_value=nil, properties=nil)
147
-
148
- @chart_data << "chart_data.setCell("
149
- @chart_data << "#{row_index}, #{column_index}, #{typecast(value)}"
150
- @chart_data << ", '#{formatted_value}'" unless formatted_value.blank?
151
- @chart_data << ", '#{properties}'" unless properties.blank?
152
- @chart_data << ");"
153
-
154
- end
155
-
156
- # Sets the value of a cell. Overwrites any existing cell value, and clear out any formatted value for the cell.
157
- #
158
- # Parameters:
159
- # * row_index [Required] A number greater than or equal to zero, but smaller than the total number of rows.
160
- # * column_index [Required] A number greater than or equal to zero, but smaller than the total number of columns.
161
- # * value [Required] The cell value. The data type should match the column data type.
162
- def set_value (row_index, column_index, value)
163
-
164
- @chart_data << "chart_data.setCell(#{row_index}, #{column_index}, #{typecast(value)});"
165
-
166
- end
167
-
168
- # Applies one or more formatters to the visualization to format the columns as specified by the formatter/s.
169
- #
170
- # Parameters:
171
- # * formatter/s [Required] One, or an array of formatters.
172
- def format(*formatters)
173
-
174
- @formatters ||= Array.new
175
- @formatters += formatters
176
-
177
- end
178
-
179
- # Sets chart configuration options with a hash.
180
- #
181
- # Parameters:
182
- # *options [Required] A hash of configuration options.
183
- def set_options(options)
184
-
185
- options.each_pair do | key, value |
186
- send "#{key}=", value
187
- end
188
-
189
- end
190
-
191
- # Generates JavaScript and renders the visualization in the final HTML output.
192
- #
193
- # Parameters:
194
- # *div_id [Required] The ID of the DIV element that the visualization should be rendered in.
195
- #
196
- # Note: This is the super method.
197
- def render(options)
198
-
199
- script = "\n<script type='text/javascript'>"
200
- script << "\n google.load('visualization','1', {packages: ['#{options[:package].downcase}'], callback: function() {"
201
- script << "\n #{@chart_data}"
202
- if @formatters
203
- @formatters.each do |formatter|
204
- script << formatter.script
205
- end
206
- end
207
- script << "\n var chart = new google.visualization.#{options[:package]}(document.getElementById('#{options[:element_id]}'));"
208
- script << "\n chart.draw(chart_data, #{options[:chart_style]});"
209
- script << "\n }});"
210
- script << "\n</script>"
211
-
212
- return script
213
-
214
- end
215
-
216
- private
217
-
218
- def add_row_cell(cell)
219
-
220
- if cell.is_a?(Hash)
221
-
222
- attributes = Array.new
223
- cell.each_pair do |key, value|
224
- attributes << "#{key}: #{typecast(value)}"
225
- end
226
-
227
- return "{" + attributes.join(",") + "}"
228
-
229
- else
230
- return "#{typecast(cell)}"
231
- end
232
-
233
- end
234
-
235
- # If the column type is 'string' , the value should be a string.
236
- # If the column type is 'number' , the value should be a number.
237
- # If the column type is 'boolean' , the value should be a boolean.
238
- # If the column type is 'date' , the value should be a Date object.
239
- # If the column type is 'datetime' , the value should be a DateTime or Time object.
240
- # If the column type is 'timeofday' , the value should be an array of three or four numbers: [hour, minute, second, optional milliseconds].
241
- def typecast(value)
242
-
243
- case
244
- when value.is_a?(String)
245
- return "'#{escape_single_quotes(value)}'"
246
- when value.is_a?(Integer) || value.is_a?(Float)
247
- return value
248
- when value.is_a?(TrueClass) || value.is_a?(FalseClass)
249
- return "#{value}"
250
- when value.is_a?(Date)
251
- return "new Date(#{value.year}, #{value.month-1}, #{value.day})"
252
- when value.is_a?(DateTime) || value.is_a?(Time)
253
- return "new Date(#{value.year}, #{value.month-1}, #{value.day}, #{value.hour}, #{value.min}, #{value.sec})"
254
- when value.is_a?(Array)
255
- return "[" + value.collect { |item| typecast(item) }.join(",") + "]"
256
- else
257
- return value
258
- end
259
-
260
- end
261
-
262
- def collect_parameters
263
-
264
- attributes = Array.new
265
- instance_variable_names.each do |instance_variable|
266
- next if instance_variable == "@chart_data" || instance_variable == "@formatters"
267
- key = instance_variable.gsub("@", "")
268
- value = instance_variable_get(instance_variable)
269
- attribute = "#{key}:#{typecast(value)}"
270
- attributes << attribute
271
- end
272
-
273
- return "{" + attributes.join(",") + "}"
274
-
275
- end
276
-
277
- def escape_single_quotes(str)
278
-
279
- str.gsub(/[']/, '\\\\\'')
280
-
281
- end
282
-
283
- end
284
-
285
- end