require "json" require "erb" module Chartkick module Helper def line_chart(data_source, options = {}) chartkick_chart "LineChart", data_source, options end def pie_chart(data_source, options = {}) chartkick_chart "PieChart", data_source, options end def column_chart(data_source, options = {}) chartkick_chart "ColumnChart", data_source, options end def bar_chart(data_source, options = {}) chartkick_chart "BarChart", data_source, options end def area_chart(data_source, options = {}) chartkick_chart "AreaChart", data_source, options end def scatter_chart(data_source, options = {}) chartkick_chart "ScatterChart", data_source, options end def geo_chart(data_source, options = {}) chartkick_chart "GeoChart", data_source, options end def timeline(data_source, options = {}) chartkick_chart "Timeline", data_source, options end private def chartkick_chart(klass, data_source, options) @chartkick_chart_id ||= 0 options = chartkick_deep_merge(Chartkick.options, options) element_id = options.delete(:id) || "chart-#{@chartkick_chart_id += 1}" height = options.delete(:height) || "300px" width = options.delete(:width) || "100%" defer = !!options.delete(:defer) # content_for: nil must override default content_for = options.key?(:content_for) ? options.delete(:content_for) : Chartkick.content_for nonce = options.key?(:nonce) ? " nonce=\"#{ERB::Util.html_escape(options.delete(:nonce))}\"" : nil html = (options.delete(:html) || %(