simple_metric 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0f6f75cb8943bae8a9d877c695a1c4f3eda18ac9
4
- data.tar.gz: be811fb88b4a172592f053c057ad51b0e98e8995
3
+ metadata.gz: e62345627aa093f653d23f6176846c9ca9fd1422
4
+ data.tar.gz: 39758f3e78dc1b576ffee430ac15e829a92836f0
5
5
  SHA512:
6
- metadata.gz: f2bf88aca4fefa0147b49a5f62c589669ebdafd7b1e629b7fa87c86ac9bfc84c1714284d6e15ed608098ab41536fafdabfd7d9c336c7b8583edfdd4615fcc1be
7
- data.tar.gz: 157b0a294b8c42b13f171ea5c0318a077aba555cdfc0cc5999fd76ac5ae4670ac6fdb10418bda13d19035010f5cd3c0d52edd8a22404b3ab156cf5ce246e39e6
6
+ metadata.gz: 2c2b6899e9413f53a386536f11122d09c62dd8a127d7c357a1fda5fdf6244899048c4c5cc60d7c8a0a2447795de6dbb2cd9686206eb18bd94fc74ac9c5b3b481
7
+ data.tar.gz: f08871d0a55002806076f457cb0edabb5b2de0c40ea8a06ec0bf67f360ee8c5a7f482da2ee1db0acffd380c32c13bdcf00c918ecd8018c9c17fdb04bca8b33e1
data/lib/simple_metric.rb CHANGED
@@ -1,13 +1,14 @@
1
1
  require "simple_metric/version"
2
2
  require "ostruct"
3
+ require 'spliner'
3
4
 
4
5
  module SimpleMetric
5
- module Helpers
6
- module Rails
7
- class Engine < ::Rails::Engine
8
- end
6
+ module Rails
7
+ class Engine < ::Rails::Engine
9
8
  end
9
+ end
10
10
 
11
+ module Helpers
11
12
 
12
13
  # simple_metric_graph([[:metric_key, :title], [:metric_key_2, :title_2]])
13
14
  # OR
@@ -30,31 +31,8 @@ module SimpleMetric
30
31
  metric
31
32
  end.compact
32
33
 
33
- # values[date][metric_id]
34
- values = {}
35
-
36
- metrics.each do |metric|
37
- metric.data_points.each do |point|
38
- values[point.date.strftime("%Y-%m-%d %H:%M")] ||= {}
39
- values[point.date.strftime("%Y-%m-%d %H:%M")][metric.id] = point.value
40
- end
41
- end
42
-
43
- dates = values.keys.sort
34
+ dates = metrics.map(&:data_set_object).map(&:data_points).flatten.map(&:x).uniq.sort.map { |x| Time.at(x) }
44
35
 
45
- get_value = lambda do |date, metric_id|
46
- value = values[date][metric_id]
47
-
48
- if value.blank?
49
- if dates.first == date
50
- value = nil
51
- else
52
- value = get_value.call(dates[dates.index(date) - 1], metric_id)
53
- end
54
- end
55
-
56
- value
57
- end
58
36
 
59
37
  content_tag :div do
60
38
  concat content_tag(:div, nil, :id => "metric_graph_#{metrics.map(&:id).join("_")}", :style => "width: 100%", :class => "dygraph_container")
@@ -68,7 +46,7 @@ module SimpleMetric
68
46
 
69
47
  // CSV or path to a CSV file.
70
48
  "Date,#{metrics.map{ |m| titles[m.id] }.join(',')}\\n" +
71
- "#{dates.map { |date| [date, metrics.map { |m| get_value.call(date, m.id) }].flatten.join(", ") + "\\n" }.join("")}"
49
+ "#{dates.map { |date| [date.strftime("%Y-%m-%d %H:%M"), metrics.map { |m| m.get_value(date) }].flatten.join(", ") + "\\n" }.join("")}"
72
50
 
73
51
  );
74
52
 
@@ -79,6 +57,27 @@ module SimpleMetric
79
57
  end
80
58
  end
81
59
 
60
+ class DataSet
61
+ attr_reader :data_points
62
+
63
+ def initialize(data_points)
64
+ @data_points = data_points.sort_by { |point| point.x }
65
+ @spliner = Spliner::Spliner.new(@data_points.map(&:x), @data_points.map(&:y))
66
+ end
67
+
68
+ def get_value(x)
69
+ @spliner[x.to_f]
70
+ end
71
+ end
72
+
73
+ class DataPoint
74
+ attr_reader :x, :y
75
+
76
+ def initialize(x, y)
77
+ @x, @y = x.to_f, y.to_f
78
+ end
79
+ end
80
+
82
81
  class Metric < ActiveRecord::Base
83
82
  serialize :data_set
84
83
  validates :key, :presence => true, :uniqueness => true
@@ -97,17 +96,22 @@ module SimpleMetric
97
96
  save!
98
97
  end
99
98
 
100
- class DataPoint < OpenStruct
99
+ def get_value(date)
100
+ @data_set_object ||= data_set_object
101
+
102
+ @data_set_object.get_value(date.to_f)
101
103
  end
102
104
 
103
- def data_points
105
+ def data_set_object
104
106
  if data_set.present?
105
- data_set.map { |row| DataPoint.new({ :date => row[0], :value => row[1] }) }
107
+ DataSet.new(data_points)
106
108
  end
107
109
  end
108
110
 
109
- def title
110
- self[:title] || "Metric ##{id}"
111
+ def data_points
112
+ if data_set.present?
113
+ data_set.map { |row| DataPoint.new(row[0], row[1]) }
114
+ end
111
115
  end
112
116
  end
113
117
  end
@@ -1,5 +1,5 @@
1
1
  module Simple
2
2
  module Metric
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "railties", ">= 3.1"
22
22
  spec.add_dependency "activesupport", ">= 3.1"
23
+ spec.add_dependency "spliner", "~> 1.0.5"
23
24
 
24
25
  spec.add_development_dependency "bundler", "~> 1.6"
25
26
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_metric
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergei O. Udalov
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: spliner
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.5
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.5
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement