require 'my_chart/rainbow' require 'json' require 'my_chart/xyz' module MyChart class Proto attr_reader :id, :name class << self def no_z_axis define_method :no_z_axis? do true end end def same_color_on_x define_method :styled_datasets do diff_color_on_z end end end def initialize grouped_data, opt={} raise Exception, "#{type} has no z axis" if grouped_data.kind_of? MyChart::XYZ and no_z_axis? @id = opt[:id] @grouped_data = grouped_data @width = opt[:w] @height = opt[:h] @name = opt[:name] end def labels @grouped_data.labels end def datasets @grouped_data.datasets end def json { type: type, data: { labels: labels, datasets: styled_datasets }, options: options }.to_json end def iife "(function(){ var ctx = document.getElementById('#{id}'); var myChart = new Chart(ctx, #{json}); })();" end def default_html "