Module: SimpleMetric::Helpers

Defined in:
lib/simple_metric.rb

Instance Method Summary collapse

Instance Method Details

#simple_metric_graph(*metrics) ⇒ Object

simple_metric_graph([[:metric_key, :title], [:metric_key_2, :title_2]]) OR

simple_metric_graph([:metric_key, :metric_key_2])


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 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) }


     :div do
      concat (: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