module SimpleMetric::Helpers

Public Instance Methods

simple_metric_graph(*metrics) click to toggle source
simple_metric_graph([[:metric_key, :title], [:metric_key_2, :title_2]])

OR

simple_metric_graph([:metric_key, :metric_key_2])
# File lib/simple_metric.rb, line 16
    def simple_metric_graph(*metrics)
      if metrics.blank?
        ""
      else
        titles = {}

        metrics = metrics.map do |m|
          metric, title = m

          metric = metric.is_a?(Metric) ? metric : Metric.find_by(key: metric)

          next if metric.blank?

          titles[metric.id] = title || metric.key.mb_chars.titleize.to_s

          metric
        end.compact

        dates = metrics.map(&:data_set_object).map(&:data_points).flatten.map(&:x).uniq.sort.map { |x| Time.at(x) }


        content_tag :div do
          concat content_tag(:div, nil, :id => "metric_graph_#{metrics.map(&:id).join("_")}", :style => "width: 100%", :class => "dygraph_container")

          concat javascript_tag <<-JS
          var container_id = "metric_graph_#{metrics.map(&:id).join("_")}";
          g = new Dygraph(

            // containing div
            document.getElementById(container_id),

            // CSV or path to a CSV file.
            "Date,#{metrics.map{ |m| titles[m.id] }.join(',')}\\n" +
            "#{dates.map { |date| [date.strftime("%Y-%m-%d %H:%M"), metrics.map { |m| m.get_value(date) }].flatten.join(", ") + "\\n" }.join("")}"

          );

          $("#" + container_id).data("dygraph", g);
          JS
        end
      end
    end