Class: GoogleVisualr::BaseChart

Inherits:
Object
  • Object
show all
Includes:
Packages, ParamHelpers
Defined in:
lib/google_visualr/base_chart.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ParamHelpers

#js_parameters, #stringify_keys!, #typecast

Methods included from Packages

#class_name, #package_name

Constructor Details

#initialize(data_table, options = {}) ⇒ BaseChart

Returns a new instance of BaseChart.



9
10
11
12
13
# File 'lib/google_visualr/base_chart.rb', line 9

def initialize(data_table, options={})
  @data_table = data_table
  send(:options=, options)
  @listeners  = []
end

Instance Attribute Details

#data_tableObject

Returns the value of attribute data_table.



7
8
9
# File 'lib/google_visualr/base_chart.rb', line 7

def data_table
  @data_table
end

#listenersObject

Returns the value of attribute listeners.



7
8
9
# File 'lib/google_visualr/base_chart.rb', line 7

def listeners
  @listeners
end

Instance Method Details

#add_listener(event, callback) ⇒ Object



31
32
33
# File 'lib/google_visualr/base_chart.rb', line 31

def add_listener(event, callback)
  @listeners << { :event => event.to_s, :callback => callback }
end

#chart_function_name(element_id) ⇒ Object



19
20
21
# File 'lib/google_visualr/base_chart.rb', line 19

def chart_function_name(element_id)
  "draw_#{element_id.gsub('-', '_')}"
end

#chart_nameObject



15
16
17
# File 'lib/google_visualr/base_chart.rb', line 15

def chart_name
  class_name
end

#optionsObject



23
24
25
# File 'lib/google_visualr/base_chart.rb', line 23

def options
  @options
end

#options=(options) ⇒ Object



27
28
29
# File 'lib/google_visualr/base_chart.rb', line 27

def options=(options)
  @options = stringify_keys!(options)
end

#to_js(element_id) ⇒ Object

Generates JavaScript and renders the Google Chart in the final HTML output.

Parameters:

*div_id            [Required] The ID of the DIV element that the Google Chart should be rendered in.


40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/google_visualr/base_chart.rb', line 40

def to_js(element_id)
  js  = "\n<script type='text/javascript'>"
  js << "\n  google.load('visualization','1', {packages: ['#{package_name}'], callback: #{chart_function_name(element_id)}});"
  js << "\n  function #{chart_function_name(element_id)}() {"
  js << "\n    #{@data_table.to_js}"
  js << "\n    var chart = new google.visualization.#{chart_name}(document.getElementById('#{element_id}'));"
  @listeners.each do |listener|
    js << "\n    google.visualization.events.addListener(chart, '#{listener[:event]}', #{listener[:callback]});"
  end
  js << "\n    chart.draw(data_table, #{js_parameters(@options)});"
  js << "\n  };"
  js << "\n</script>"
  js
end