pulse_meter-dygraphs_visualizer 0.4.20 → 0.4.21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.ruby-version +1 -0
- data/pulse_meter-dygraphs_visualizer.gemspec +1 -1
- data/spec/pulse_meter/dygraphs_visualize/app_spec.rb +3 -3
- data/spec/pulse_meter/dygraphs_visualize/dsl/layout_spec.rb +19 -19
- data/spec/pulse_meter/dygraphs_visualize/dsl/page_spec.rb +18 -18
- data/spec/pulse_meter/dygraphs_visualize/dsl/sensor_spec.rb +6 -6
- data/spec/pulse_meter/dygraphs_visualize/dsl/widgets/line_spec.rb +9 -9
- data/spec/pulse_meter/dygraphs_visualize/dsl/widgets/stack_spec.rb +12 -12
- data/spec/pulse_meter/dygraphs_visualize/layout_spec.rb +11 -11
- data/spec/pulse_meter/dygraphs_visualize/page_spec.rb +17 -13
- data/spec/pulse_meter/dygraphs_visualize/sensor_spec.rb +24 -24
- data/spec/pulse_meter/dygraphs_visualize/series_extractor_spec.rb +15 -15
- data/spec/pulse_meter/dygraphs_visualizer_spec.rb +2 -2
- data/spec/shared_examples/dsl_widget.rb +30 -30
- data/spec/shared_examples/widget.rb +15 -14
- metadata +49 -49
- data/.rbenv-version +0 -1
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
YzQ3YjEzOTVkMjk3MGZjYWE1ZDRmZjU3ZGY3OGI3MjYzMThiNmZmZA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 59fa9a27bec80b059be63f171091f9eacfbe7560
|
4
|
+
data.tar.gz: bf82152b3b4e715124dbbf36846d2a5c5eb57b5f
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
Yzk5NDNhMGMyZjcwODQxN2MwZmFjNTRmYzg3OGMzNTFiNzQ2NTU5MDY5YjYw
|
11
|
-
ZTI1MTQ5ZTdmMTFhMTZhYzI4ZmY5ZmYyMTFiYzYzNTI2NWFmYjY=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MTFjYzgwNzA5NjE3MDY2MTUxNTdhZjgwZTdkYzVkZjQ5MjNkMzM2MmZiOGRj
|
14
|
-
Y2E3OWE3YTAxYzQxZDRkZjkwM2U4MDU1ZTdjMmMyNjJiZjIzM2Q5ZjM1YWEw
|
15
|
-
YTdkZDZkZTA3NTNlYjZjOTQ0NTAzZTk3NzZlNWVhYjBiOGEyZGQ=
|
6
|
+
metadata.gz: cae261915e613d9cb684ef1bde9afa69c26071bc9add6946695fff632e0e5cad30d8068d9bf3d01c5b0ed2aae2ebdd515c7764ca850a1da66ac003385ca2a4f9
|
7
|
+
data.tar.gz: 80798c35b1b368a2c885715d858cc44879c8f1ec42262c189be0edf2249b35edf12a1703e581f02d7cd91b4f4e8c397a3e0cdae421a6d2226e0d0e3ee23856fe
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.3.0
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
15
15
|
gem.name = "pulse_meter-dygraphs_visualizer"
|
16
16
|
gem.require_paths = ["lib"]
|
17
|
-
gem.version = "0.4.
|
17
|
+
gem.version = "0.4.21"
|
18
18
|
|
19
19
|
gem.add_runtime_dependency('pulse_meter_core')
|
20
20
|
gem.add_runtime_dependency('gon-sinatra')
|
@@ -16,12 +16,12 @@ describe PulseMeter::DygraphsVisualize::App do
|
|
16
16
|
|
17
17
|
it "responds to /" do
|
18
18
|
get '/'
|
19
|
-
last_response.
|
20
|
-
last_response.body.
|
19
|
+
expect(last_response).to be_ok
|
20
|
+
expect(last_response.body).to include("Foo meters")
|
21
21
|
end
|
22
22
|
|
23
23
|
it "responds to /application.js" do
|
24
24
|
get '/js/application.js'
|
25
|
-
last_response.
|
25
|
+
expect(last_response).to be_ok
|
26
26
|
end
|
27
27
|
end
|
@@ -7,17 +7,17 @@ describe PulseMeter::DygraphsVisualize::DSL::Layout do
|
|
7
7
|
let(:layout){ described_class.new }
|
8
8
|
|
9
9
|
describe '.new' do
|
10
|
-
it "
|
10
|
+
it "initializes pages, title, use_utc, dygraphs_options" do
|
11
11
|
l = layout.to_data
|
12
|
-
l.title.
|
13
|
-
l.pages.
|
14
|
-
l.use_utc.
|
15
|
-
l.dygraphs_options.
|
12
|
+
expect(l.title).to eq(PulseMeter::DygraphsVisualize::DSL::Layout::DEFAULT_TITLE)
|
13
|
+
expect(l.pages).to eq([])
|
14
|
+
expect(l.use_utc).to be_falsey
|
15
|
+
expect(l.dygraphs_options).to eq({})
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
describe "#page" do
|
20
|
-
it "
|
20
|
+
it "adds page constructed by block to pages" do
|
21
21
|
layout.page "My Foo Page" do |p|
|
22
22
|
p.stack "foo_widget", sensor: sensor_name
|
23
23
|
p.line "bar_widget" do |w|
|
@@ -25,39 +25,39 @@ describe PulseMeter::DygraphsVisualize::DSL::Layout do
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
l = layout.to_data
|
28
|
-
l.pages.size.
|
28
|
+
expect(l.pages.size).to eq(1)
|
29
29
|
p = l.pages.first
|
30
|
-
p.title.
|
31
|
-
p.widgets.size.
|
32
|
-
p.widgets.first.title.
|
33
|
-
p.widgets.last.title.
|
30
|
+
expect(p.title).to eq("My Foo Page")
|
31
|
+
expect(p.widgets.size).to eq(2)
|
32
|
+
expect(p.widgets.first.title).to eq("foo_widget")
|
33
|
+
expect(p.widgets.last.title).to eq("bar_widget")
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
describe "#title" do
|
38
|
-
it "
|
38
|
+
it "sets layout title" do
|
39
39
|
layout.title "Foo Title"
|
40
|
-
layout.to_data.title.
|
40
|
+
expect(layout.to_data.title).to eq('Foo Title')
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
describe "#use_utc" do
|
45
|
-
it "
|
45
|
+
it "sets use_utc" do
|
46
46
|
layout.use_utc false
|
47
|
-
layout.to_data.use_utc.
|
47
|
+
expect(layout.to_data.use_utc).to be_falsey
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
51
|
describe "#dygraphs_options" do
|
52
|
-
it "
|
52
|
+
it "sets dygraphs_options" do
|
53
53
|
layout.dygraphs_options({b: 1})
|
54
|
-
layout.to_data.dygraphs_options.
|
54
|
+
expect(layout.to_data.dygraphs_options).to eq({b: 1})
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
describe "#to_data" do
|
59
|
-
it "
|
60
|
-
layout.to_data.
|
59
|
+
it "converts layout dsl data to DygraphsVisualize::Layout" do
|
60
|
+
expect(layout.to_data).to be_kind_of(PulseMeter::DygraphsVisualize::Layout)
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
@@ -8,25 +8,25 @@ describe PulseMeter::DygraphsVisualize::DSL::Page do
|
|
8
8
|
let(:page){ PulseMeter::DygraphsVisualize::DSL::Page.new(title) }
|
9
9
|
|
10
10
|
describe '.new' do
|
11
|
-
it "
|
11
|
+
it "initializes title and widgets" do
|
12
12
|
p = page.to_data
|
13
|
-
p.title.
|
14
|
-
p.widgets.
|
13
|
+
expect(p.title).to eq(title)
|
14
|
+
expect(p.widgets).to eq([])
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
[:line, :stack].each do |widget_type|
|
19
19
|
|
20
20
|
describe "##{widget_type}" do
|
21
|
-
it "
|
21
|
+
it "adds #{widget_type} widget initialized by args to widgets" do
|
22
22
|
page.send(widget_type, :some_widget_name, sensor: sensor_name, width: 7)
|
23
23
|
w = page.to_data.widgets.first
|
24
|
-
w.width.
|
25
|
-
w.title.
|
26
|
-
w.sensors.first.name.
|
24
|
+
expect(w.width).to eq(7)
|
25
|
+
expect(w.title).to eq("some_widget_name")
|
26
|
+
expect(w.sensors.first.name).to eq(sensor_name)
|
27
27
|
end
|
28
28
|
|
29
|
-
it "
|
29
|
+
it "adds #{widget_type} widget initialized by block" do
|
30
30
|
page.send(widget_type, :some_widget_name) do |w|
|
31
31
|
w.sensor(sensor_name)
|
32
32
|
w.sensor(sensor_name)
|
@@ -34,27 +34,27 @@ describe PulseMeter::DygraphsVisualize::DSL::Page do
|
|
34
34
|
w.width 7
|
35
35
|
end
|
36
36
|
w = page.to_data.widgets.first
|
37
|
-
w.type.
|
38
|
-
w.width.
|
39
|
-
w.title.
|
40
|
-
w.sensors.size.
|
41
|
-
w.sensors.first.name.
|
42
|
-
w.sensors.last.name.
|
37
|
+
expect(w.type).to eq(widget_type.to_s)
|
38
|
+
expect(w.width).to eq(7)
|
39
|
+
expect(w.title).to eq("foo_widget")
|
40
|
+
expect(w.sensors.size).to eq(2)
|
41
|
+
expect(w.sensors.first.name).to eq(sensor_name)
|
42
|
+
expect(w.sensors.last.name).to eq(sensor_name)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
end
|
47
47
|
|
48
48
|
describe "#title" do
|
49
|
-
it "
|
49
|
+
it "sets page title" do
|
50
50
|
page.title "Foo Title"
|
51
|
-
page.to_data.title.
|
51
|
+
expect(page.to_data.title).to eq('Foo Title')
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
55
|
describe "#to_data" do
|
56
|
-
it "
|
57
|
-
page.to_data.
|
56
|
+
it "converts DSL data to DygraphsVisualize::Page" do
|
57
|
+
expect(page.to_data).to be_kind_of(PulseMeter::DygraphsVisualize::Page)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
@@ -6,23 +6,23 @@ describe PulseMeter::DygraphsVisualize::DSL::Sensor do
|
|
6
6
|
let!(:sensor){ PulseMeter::Sensor::Timelined::Max.new(name, :ttl => 1000, :interval => interval) }
|
7
7
|
|
8
8
|
describe '.new' do
|
9
|
-
it "
|
10
|
-
described_class.new(name).to_data.name.to_s.
|
9
|
+
it "saves passed name and create DygraphsVisualize::Sensor with it" do
|
10
|
+
expect(described_class.new(name).to_data.name.to_s).to eq(name)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
describe '#process_args' do
|
15
|
-
it "
|
15
|
+
it "passs args transparently to DygraphsVisualize::Sensor" do
|
16
16
|
s = described_class.new(name)
|
17
17
|
s.process_args color: :red
|
18
|
-
s.to_data.color.to_s.
|
18
|
+
expect(s.to_data.color.to_s).to eq('red')
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
describe '#to_data' do
|
23
23
|
# actually tested above
|
24
|
-
it "
|
25
|
-
described_class.new(name).to_data.
|
24
|
+
it "converts dsl data to sensor" do
|
25
|
+
expect(described_class.new(name).to_data).to be_kind_of(PulseMeter::DygraphsVisualize::Sensor)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -11,31 +11,31 @@ describe PulseMeter::DygraphsVisualize::DSL::Widgets::Line do
|
|
11
11
|
let(:w){ described_class.new(widget_name) }
|
12
12
|
|
13
13
|
describe "#to_data" do
|
14
|
-
it "
|
15
|
-
w.to_data.
|
14
|
+
it "produces PulseMeter::DygraphsVisualize::Widgets::Area class" do
|
15
|
+
expect(w.to_data).to be_kind_of(PulseMeter::DygraphsVisualize::Widgets::Line)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
describe "#values_label" do
|
20
|
-
it "
|
20
|
+
it "sets values_label" do
|
21
21
|
w.values_label "some y-axis legend"
|
22
|
-
w.to_data.values_label.
|
22
|
+
expect(w.to_data.values_label).to eq("some y-axis legend")
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
26
|
describe "#show_last_point" do
|
27
|
-
it "
|
27
|
+
it "sets show_last_point" do
|
28
28
|
w.show_last_point true
|
29
|
-
w.to_data.show_last_point.
|
29
|
+
expect(w.to_data.show_last_point).to be_truthy
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
33
|
describe "#timespan" do
|
34
|
-
it "
|
34
|
+
it "sets timespan" do
|
35
35
|
w.timespan 5
|
36
|
-
w.to_data.timespan.
|
36
|
+
expect(w.to_data.timespan).to eq(5)
|
37
37
|
end
|
38
|
-
it "
|
38
|
+
it "raises exception if timespan is negative" do
|
39
39
|
expect{ w.timespan(-1) }.to raise_exception(PulseMeter::DygraphsVisualize::DSL::BadWidgetTimeSpan)
|
40
40
|
end
|
41
41
|
end
|
@@ -13,40 +13,40 @@ describe PulseMeter::DygraphsVisualize::DSL::Widgets::Stack do
|
|
13
13
|
describe "#to_data" do
|
14
14
|
let(:data){ w.to_data }
|
15
15
|
|
16
|
-
it "
|
17
|
-
data.
|
16
|
+
it "produces PulseMeter::DygraphsVisualize::Widgets::Stack class" do
|
17
|
+
expect(data).to be_kind_of(PulseMeter::DygraphsVisualize::Widgets::Stack)
|
18
18
|
end
|
19
19
|
|
20
20
|
describe "dygraphs_options" do
|
21
21
|
let(:dygraphs_options){ data.dygraphs_options }
|
22
22
|
|
23
|
-
it "
|
24
|
-
dygraphs_options[:stacked_graph].
|
25
|
-
dygraphs_options[:stacked_graph_na_n_fill].
|
23
|
+
it "sets stack Dygraphs options" do
|
24
|
+
expect(dygraphs_options[:stacked_graph]).to be_truthy
|
25
|
+
expect(dygraphs_options[:stacked_graph_na_n_fill]).to eq('inside')
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
describe "#values_label" do
|
31
|
-
it "
|
31
|
+
it "sets values_label" do
|
32
32
|
w.values_label "some y-axis legend"
|
33
|
-
w.to_data.values_label.
|
33
|
+
expect(w.to_data.values_label).to eq("some y-axis legend")
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
describe "#show_last_point" do
|
38
|
-
it "
|
38
|
+
it "sets show_last_point" do
|
39
39
|
w.show_last_point true
|
40
|
-
w.to_data.show_last_point.
|
40
|
+
expect(w.to_data.show_last_point).to be_truthy
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
describe "#timespan" do
|
45
|
-
it "
|
45
|
+
it "sets timespan" do
|
46
46
|
w.timespan 5
|
47
|
-
w.to_data.timespan.
|
47
|
+
expect(w.to_data.timespan).to eq(5)
|
48
48
|
end
|
49
|
-
it "
|
49
|
+
it "raises exception if timespan is negative" do
|
50
50
|
expect{ w.timespan(-1) }.to raise_exception(PulseMeter::DygraphsVisualize::DSL::BadWidgetTimeSpan)
|
51
51
|
end
|
52
52
|
end
|
@@ -16,38 +16,38 @@ describe PulseMeter::DygraphsVisualize::Layout do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
describe "#page_infos" do
|
19
|
-
it "
|
20
|
-
layout.page_infos.
|
19
|
+
it "returns list of page infos with ids" do
|
20
|
+
expect(layout.page_infos).to eq([
|
21
21
|
{title: "page1", id: 1, dygraphs_options: {a: 1}},
|
22
22
|
{title: "page2", id: 2, dygraphs_options: {}}
|
23
|
-
]
|
23
|
+
])
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
describe "#options" do
|
28
|
-
it "
|
28
|
+
it "returns layout options" do
|
29
29
|
ldsl = PulseMeter::DygraphsVisualize::DSL::Layout.new
|
30
30
|
ldsl.use_utc true
|
31
31
|
ldsl.dygraphs_options({a: 1})
|
32
32
|
l = ldsl.to_data
|
33
|
-
l.options.
|
33
|
+
expect(l.options).to eq({use_utc: true, dygraphs_options: {a: 1}})
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
describe "#widget" do
|
38
|
-
it "
|
38
|
+
it "returns data for correct widget" do
|
39
39
|
w = layout.widget(1, 0)
|
40
|
-
w.
|
40
|
+
expect(w).to include(id: 1, title: "w3")
|
41
41
|
w = layout.widget(0, 1, timespan: 123)
|
42
|
-
w.
|
42
|
+
expect(w).to include(id: 2, title: "w2")
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
describe "#widgets" do
|
47
|
-
it "
|
47
|
+
it "returns data for correct widgets of a page" do
|
48
48
|
datas = layout.widgets(1)
|
49
|
-
datas[0].
|
50
|
-
datas[1].
|
49
|
+
expect(datas[0]).to include(id: 1, title: "w3")
|
50
|
+
expect(datas[1]).to include(id: 2, title: "w4")
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -57,16 +57,16 @@ describe PulseMeter::DygraphsVisualize::Page do
|
|
57
57
|
|
58
58
|
describe "#widget_data" do
|
59
59
|
|
60
|
-
it "
|
60
|
+
it "generates correct data of single widget" do
|
61
61
|
Timecop.freeze(interval_start + 2 * interval - 1) do
|
62
|
-
page.widget_data(0)[:id].
|
63
|
-
page.widget_data(1)[:id].
|
62
|
+
expect(page.widget_data(0)[:id]).to eq(1)
|
63
|
+
expect(page.widget_data(1)[:id]).to eq(2)
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
-
it "
|
67
|
+
it "generates correct data of single widget" do
|
68
68
|
Timecop.freeze(interval_start + 2 * interval - 1) do
|
69
|
-
page.widget_data(0)[:series].
|
69
|
+
expect(page.widget_data(0)[:series]).to eq(
|
70
70
|
{
|
71
71
|
titles: [a_sensor.annotation, b_sensor.annotation],
|
72
72
|
rows: [[interval_start.to_i * 1000, 12, 33]],
|
@@ -75,7 +75,8 @@ describe PulseMeter::DygraphsVisualize::Page do
|
|
75
75
|
{color: b_color}
|
76
76
|
]
|
77
77
|
}
|
78
|
-
|
78
|
+
)
|
79
|
+
expect(page.widget_data(1)[:series]).to eq(
|
79
80
|
{
|
80
81
|
titles: [a_sensor.annotation, b_sensor.annotation],
|
81
82
|
rows: [[interval_start.to_i * 1000, 12, 33]],
|
@@ -84,10 +85,11 @@ describe PulseMeter::DygraphsVisualize::Page do
|
|
84
85
|
{color: b_color}
|
85
86
|
]
|
86
87
|
}
|
88
|
+
)
|
87
89
|
end
|
88
90
|
|
89
91
|
Timecop.freeze(interval_start + 2 * interval - 1) do
|
90
|
-
page.widget_data(0, timespan: 0)[:series].
|
92
|
+
expect(page.widget_data(0, timespan: 0)[:series]).to eq(
|
91
93
|
{
|
92
94
|
titles: [a_sensor.annotation, b_sensor.annotation],
|
93
95
|
rows: [],
|
@@ -96,7 +98,8 @@ describe PulseMeter::DygraphsVisualize::Page do
|
|
96
98
|
{color: b_color}
|
97
99
|
]
|
98
100
|
}
|
99
|
-
|
101
|
+
)
|
102
|
+
expect(page.widget_data(1, timespan: 1)[:series]).to eq(
|
100
103
|
{
|
101
104
|
titles: [a_sensor.annotation, b_sensor.annotation],
|
102
105
|
rows: [],
|
@@ -105,22 +108,23 @@ describe PulseMeter::DygraphsVisualize::Page do
|
|
105
108
|
{color: b_color}
|
106
109
|
]
|
107
110
|
}
|
111
|
+
)
|
108
112
|
|
109
113
|
end
|
110
114
|
end
|
111
115
|
end
|
112
116
|
|
113
117
|
describe "#widget_datas" do
|
114
|
-
it "
|
118
|
+
it "generates correct ids for all widgets" do
|
115
119
|
Timecop.freeze(interval_start + 2 * interval - 1) do
|
116
|
-
page.widget_datas.map{|h| h[:id]}.
|
120
|
+
expect(page.widget_datas.map{|h| h[:id]}).to eq([1,2])
|
117
121
|
end
|
118
122
|
end
|
119
123
|
|
120
|
-
it "
|
124
|
+
it "generates correct series data of all widgets" do
|
121
125
|
Timecop.freeze(interval_start + 2 * interval - 1) do
|
122
126
|
|
123
|
-
page.widget_datas.map{|h| h[:series]}.
|
127
|
+
expect(page.widget_datas.map{|h| h[:series]}).to eq([
|
124
128
|
{
|
125
129
|
titles: [a_sensor.annotation, b_sensor.annotation],
|
126
130
|
rows: [[interval_start.to_i * 1000, 12, 33]],
|
@@ -137,7 +141,7 @@ describe PulseMeter::DygraphsVisualize::Page do
|
|
137
141
|
{color: b_color}
|
138
142
|
]
|
139
143
|
}
|
140
|
-
]
|
144
|
+
])
|
141
145
|
end
|
142
146
|
|
143
147
|
end
|
@@ -15,40 +15,40 @@ describe PulseMeter::DygraphsVisualize::Sensor do
|
|
15
15
|
|
16
16
|
describe '#last_value' do
|
17
17
|
context "when sensor does not exist" do
|
18
|
-
it "
|
18
|
+
it "raises RestoreError" do
|
19
19
|
expect{ bad_sensor.last_value(Time.now) }.to raise_exception(PulseMeter::RestoreError)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
|
24
24
|
context "when sensor has no data" do
|
25
|
-
it "
|
26
|
-
sensor.last_value(Time.now).
|
25
|
+
it "returns nil" do
|
26
|
+
expect(sensor.last_value(Time.now)).to be_nil
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
context "when sensor has data" do
|
31
31
|
context "when need_incomplete arg is true" do
|
32
|
-
it "
|
32
|
+
it "returns last value" do
|
33
33
|
Timecop.freeze(interval_start) do
|
34
34
|
real_sensor.event(101)
|
35
35
|
end
|
36
36
|
Timecop.freeze(interval_start+1) do
|
37
|
-
sensor.last_value(Time.now, true).
|
37
|
+
expect(sensor.last_value(Time.now, true)).to eq(101)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
42
|
context "when need_incomplete arg is false" do
|
43
|
-
it "
|
43
|
+
it "returns last complete value" do
|
44
44
|
Timecop.freeze(interval_start) do
|
45
45
|
real_sensor.event(101)
|
46
46
|
end
|
47
47
|
Timecop.freeze(interval_start + 1) do
|
48
|
-
sensor.last_value(Time.now).
|
48
|
+
expect(sensor.last_value(Time.now)).to be_nil
|
49
49
|
end
|
50
50
|
Timecop.freeze(interval_start + interval + 1) do
|
51
|
-
sensor.last_value(Time.now).
|
51
|
+
expect(sensor.last_value(Time.now)).to eq(101)
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -59,20 +59,20 @@ describe PulseMeter::DygraphsVisualize::Sensor do
|
|
59
59
|
describe "#last_point_data" do
|
60
60
|
|
61
61
|
context "when sensor does not exist" do
|
62
|
-
it "
|
62
|
+
it "raises RestoreError" do
|
63
63
|
expect{ bad_sensor.last_point_data(Time.now) }.to raise_exception(PulseMeter::RestoreError)
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
-
it "
|
67
|
+
it "returns last value with annotation (and color)" do
|
68
68
|
Timecop.freeze(interval_start) do
|
69
69
|
real_sensor.event(101)
|
70
70
|
end
|
71
71
|
Timecop.freeze(interval_start + 1) do
|
72
|
-
sensor.last_point_data(Time.now, true).
|
73
|
-
sensor.last_point_data(Time.now).
|
74
|
-
sensor_with_color.last_point_data(Time.now, true).
|
75
|
-
sensor_with_color.last_point_data(Time.now).
|
72
|
+
expect(sensor.last_point_data(Time.now, true)).to eq([{name: annotation, y: 101}])
|
73
|
+
expect(sensor.last_point_data(Time.now)).to eq([{name: annotation, y: nil}])
|
74
|
+
expect(sensor_with_color.last_point_data(Time.now, true)).to eq([{name: annotation, y: 101, color: color}])
|
75
|
+
expect(sensor_with_color.last_point_data(Time.now)).to eq([{name: annotation, y: nil, color: color}])
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -81,11 +81,11 @@ describe PulseMeter::DygraphsVisualize::Sensor do
|
|
81
81
|
subject{ checked_sensor.valid? }
|
82
82
|
context "when sensor exists" do
|
83
83
|
let(:checked_sensor){ sensor }
|
84
|
-
it{
|
84
|
+
it{ is_expected.to be_truthy }
|
85
85
|
end
|
86
86
|
context "when sensor does not exist" do
|
87
87
|
let(:checked_sensor){ bad_sensor }
|
88
|
-
it{
|
88
|
+
it{ is_expected.to be_falsey }
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
@@ -100,30 +100,30 @@ describe PulseMeter::DygraphsVisualize::Sensor do
|
|
100
100
|
end
|
101
101
|
|
102
102
|
context "when sensor does not exist" do
|
103
|
-
it "
|
103
|
+
it "raises RestoreError" do
|
104
104
|
expect{ bad_sensor.timeline_data(Time.now - interval, Time.now) }.to raise_exception(PulseMeter::RestoreError)
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
108
|
|
109
109
|
describe "returned value" do
|
110
|
-
it "
|
110
|
+
it "contains sensor annotation" do
|
111
111
|
Timecop.freeze(interval_start + interval + 1) do
|
112
|
-
sensor.timeline_data(Time.now - interval, Time.now).first[:name].
|
112
|
+
expect(sensor.timeline_data(Time.now - interval, Time.now).first[:name]).to eq(annotation)
|
113
113
|
end
|
114
114
|
end
|
115
|
-
it "
|
115
|
+
it "contains sensor color" do
|
116
116
|
Timecop.freeze(interval_start + interval + 1) do
|
117
|
-
sensor_with_color.timeline_data(Time.now - interval, Time.now).first[:color].
|
117
|
+
expect(sensor_with_color.timeline_data(Time.now - interval, Time.now).first[:color]).to eq(color)
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
|
-
it "
|
121
|
+
it "contains [interval_start, value] pairs for each interval" do
|
122
122
|
Timecop.freeze(interval_start + interval + 1) do
|
123
123
|
data = sensor.timeline_data(Time.now - interval * 2, Time.now)
|
124
|
-
data.first[:data].
|
124
|
+
expect(data.first[:data]).to eq([{x: interval_start.to_i * 1000, y: 101}])
|
125
125
|
data = sensor.timeline_data(Time.now - interval * 2, Time.now, true)
|
126
|
-
data.first[:data].
|
126
|
+
expect(data.first[:data]).to eq([{x: interval_start.to_i * 1000, y: 101}, {x: (interval_start + interval).to_i * 1000, y: 55}])
|
127
127
|
end
|
128
128
|
end
|
129
129
|
end
|
@@ -20,23 +20,23 @@ describe PulseMeter::DygraphsVisualize::SeriesExtractor do
|
|
20
20
|
|
21
21
|
let(:extractor) {PulseMeter::DygraphsVisualize.extractor(simple_sensor)}
|
22
22
|
|
23
|
-
it "
|
24
|
-
extractor.
|
23
|
+
it "bes created for simple sensors" do
|
24
|
+
expect(extractor).to be_kind_of(PulseMeter::DygraphsVisualize::SeriesExtractor::Simple)
|
25
25
|
end
|
26
26
|
|
27
|
-
it "
|
28
|
-
extractor.point_data(123).
|
27
|
+
it "creates point data correctly" do
|
28
|
+
expect(extractor.point_data(123)).to eq([{y: 123, name: 'simple sensor'}])
|
29
29
|
end
|
30
30
|
|
31
|
-
it "
|
31
|
+
it "creates timeline data correctly" do
|
32
32
|
tl_data = [
|
33
33
|
PulseMeter::SensorData.new(Time.at(1), 11),
|
34
34
|
PulseMeter::SensorData.new(Time.at(2), "22")
|
35
35
|
]
|
36
|
-
extractor.series_data(tl_data).
|
36
|
+
expect(extractor.series_data(tl_data)).to eq([{
|
37
37
|
name: 'simple sensor',
|
38
38
|
data: [{x: 1000, y: 11}, {x: 2000, y: 22}]
|
39
|
-
}]
|
39
|
+
}])
|
40
40
|
end
|
41
41
|
|
42
42
|
end
|
@@ -44,23 +44,23 @@ describe PulseMeter::DygraphsVisualize::SeriesExtractor do
|
|
44
44
|
describe "hash extractor" do
|
45
45
|
let(:extractor) {PulseMeter::DygraphsVisualize.extractor(hashed_sensor)}
|
46
46
|
|
47
|
-
it "
|
48
|
-
extractor.
|
47
|
+
it "bes created for hash sensors" do
|
48
|
+
expect(extractor).to be_kind_of(PulseMeter::DygraphsVisualize::SeriesExtractor::Hashed)
|
49
49
|
end
|
50
50
|
|
51
|
-
it "
|
52
|
-
extractor.point_data('{"x": 123, "y": 321}').
|
51
|
+
it "creates point data correctly" do
|
52
|
+
expect(extractor.point_data('{"x": 123, "y": 321}')).to eq([
|
53
53
|
{y: 123, name: 'hashed sensor: x'},
|
54
54
|
{y: 321, name: 'hashed sensor: y'}
|
55
|
-
]
|
55
|
+
])
|
56
56
|
end
|
57
57
|
|
58
|
-
it "
|
58
|
+
it "creates timeline data correctly" do
|
59
59
|
tl_data = [
|
60
60
|
PulseMeter::SensorData.new(Time.at(1), {"a" => 5, "b" => 6}),
|
61
61
|
PulseMeter::SensorData.new(Time.at(2), '{"c": 7, "b": 6}')
|
62
62
|
]
|
63
|
-
extractor.series_data(tl_data).
|
63
|
+
expect(extractor.series_data(tl_data)).to eq([
|
64
64
|
{
|
65
65
|
name: 'hashed sensor: a',
|
66
66
|
data: [{x: 1000, y: 5}, {x: 2000, y: nil}]
|
@@ -73,7 +73,7 @@ describe PulseMeter::DygraphsVisualize::SeriesExtractor do
|
|
73
73
|
name: 'hashed sensor: c',
|
74
74
|
data: [{x: 1000, y: nil}, {x: 2000, y: 7}]
|
75
75
|
}
|
76
|
-
]
|
76
|
+
])
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe PulseMeter::DygraphsVisualizer do
|
4
4
|
describe "::draw" do
|
5
|
-
it "
|
5
|
+
it "generates correct layout with passed block" do
|
6
6
|
layout = described_class.draw do |l|
|
7
7
|
|
8
8
|
l.title "My Gauges"
|
@@ -35,7 +35,7 @@ describe PulseMeter::DygraphsVisualizer do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
end
|
38
|
-
layout.
|
38
|
+
expect(layout).to be_kind_of(PulseMeter::DygraphsVisualize::Layout)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -8,33 +8,33 @@ shared_examples_for "dsl widget" do
|
|
8
8
|
let(:w){ described_class.new(widget_name) }
|
9
9
|
|
10
10
|
describe '.new' do
|
11
|
-
it "
|
11
|
+
it "sets default value for width papram" do
|
12
12
|
wid = w.to_data
|
13
|
-
wid.width.
|
13
|
+
expect(wid.width).to eq(PulseMeter::DygraphsVisualize::DSL::Widget::MAX_WIDTH)
|
14
14
|
end
|
15
15
|
|
16
|
-
it "
|
16
|
+
it "sets title param from .new argument" do
|
17
17
|
wid = w.to_data
|
18
|
-
wid.title.
|
18
|
+
expect(wid.title).to eq(widget_name)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
describe "#process_args" do
|
23
|
-
it "
|
23
|
+
it "sets sensor by :sensor param" do
|
24
24
|
w.process_args :sensor => :some_sensor
|
25
25
|
sensors = w.to_data.sensors
|
26
|
-
sensors.size.
|
27
|
-
sensors.first.name.to_s.
|
26
|
+
expect(sensors.size).to eq(1)
|
27
|
+
expect(sensors.first.name.to_s).to eq('some_sensor')
|
28
28
|
end
|
29
29
|
|
30
|
-
it "
|
30
|
+
it "sets title by :title param" do
|
31
31
|
w.process_args :title => 'Title XXX'
|
32
|
-
w.to_data.title.
|
32
|
+
expect(w.to_data.title).to eq('Title XXX')
|
33
33
|
end
|
34
34
|
|
35
|
-
it "
|
35
|
+
it "sets width by :width param" do
|
36
36
|
w.process_args :width => 5
|
37
|
-
w.to_data.width.
|
37
|
+
expect(w.to_data.width).to eq(5)
|
38
38
|
end
|
39
39
|
|
40
40
|
end
|
@@ -44,66 +44,66 @@ shared_examples_for "dsl widget" do
|
|
44
44
|
let!(:s2){ PulseMeter::Sensor::Timelined::Max.new('s2', :ttl => 1000, :interval => interval) }
|
45
45
|
|
46
46
|
|
47
|
-
it "
|
47
|
+
it "adds sensor" do
|
48
48
|
w.sensor :s1
|
49
49
|
w.sensor :s2
|
50
50
|
sensors = w.to_data.sensors
|
51
|
-
sensors.size.
|
52
|
-
sensors.first.name.to_s.
|
53
|
-
sensors.last.name.to_s.
|
51
|
+
expect(sensors.size).to eq(2)
|
52
|
+
expect(sensors.first.name.to_s).to eq('s1')
|
53
|
+
expect(sensors.last.name.to_s).to eq('s2')
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
57
|
describe "#title" do
|
58
|
-
it "
|
58
|
+
it "sets title" do
|
59
59
|
w.title 'Title XXX'
|
60
|
-
w.to_data.title.
|
60
|
+
expect(w.to_data.title).to eq('Title XXX')
|
61
61
|
w.title 'Title YYY'
|
62
|
-
w.to_data.title.
|
62
|
+
expect(w.to_data.title).to eq('Title YYY')
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
66
|
describe "#width" do
|
67
|
-
it "
|
67
|
+
it "sets width" do
|
68
68
|
w.width 6
|
69
|
-
w.to_data.width.
|
69
|
+
expect(w.to_data.width).to eq(6)
|
70
70
|
end
|
71
71
|
|
72
|
-
it "
|
72
|
+
it "raises exception if width is invalid" do
|
73
73
|
expect { w.width -1 }.to raise_exception(PulseMeter::DygraphsVisualize::DSL::BadWidgetWidth)
|
74
74
|
expect { w.width 13 }.to raise_exception(PulseMeter::DygraphsVisualize::DSL::BadWidgetWidth)
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
78
|
describe "#redraw_interval" do
|
79
|
-
it "
|
79
|
+
it "sets redraw_interval" do
|
80
80
|
w.redraw_interval 5
|
81
|
-
w.to_data.redraw_interval.
|
81
|
+
expect(w.to_data.redraw_interval).to eq(5)
|
82
82
|
end
|
83
|
-
it "
|
83
|
+
it "raises exception if redraw_interval is negative" do
|
84
84
|
expect{ w.redraw_interval(-1) }.to raise_exception(PulseMeter::DygraphsVisualize::DSL::BadWidgetRedrawInterval)
|
85
85
|
end
|
86
86
|
|
87
87
|
end
|
88
88
|
|
89
89
|
describe "#to_data" do
|
90
|
-
it "
|
91
|
-
w.to_data.
|
90
|
+
it "converts dsl data to widget" do
|
91
|
+
expect(w.to_data).to be_kind_of(PulseMeter::DygraphsVisualize::Widget)
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
95
|
describe "#dygraphs_options" do
|
96
|
-
it "
|
96
|
+
it "adds options to dygraphs_options hash" do
|
97
97
|
w.dygraphs_options a: 1
|
98
98
|
w.dygraphs_options b: 2
|
99
|
-
w.to_data.dygraphs_options.
|
99
|
+
expect(w.to_data.dygraphs_options).to include(a: 1, b: 2)
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
103
|
describe "any anknown method" do
|
104
|
-
it "
|
104
|
+
it "adds options to dygraphs_options hash" do
|
105
105
|
w.foobar 123
|
106
|
-
w.to_data.dygraphs_options[:foobar].
|
106
|
+
expect(w.to_data.dygraphs_options[:foobar]).to eq(123)
|
107
107
|
end
|
108
108
|
end
|
109
109
|
end
|
@@ -50,15 +50,15 @@ shared_examples_for "widget" do
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
it "
|
53
|
+
it "contains type, title, redraw_interval, width, dygraphs_options, timespan attriutes" do
|
54
54
|
wdata = widget.data
|
55
|
-
wdata[:type].
|
56
|
-
wdata[:title].
|
57
|
-
wdata[:redraw_interval].
|
58
|
-
wdata[:width].
|
59
|
-
wdata[:dygraphs_options][:a].
|
60
|
-
wdata[:timespan].
|
61
|
-
wdata[:interval].
|
55
|
+
expect(wdata[:type]).to eq(class_name.downcase)
|
56
|
+
expect(wdata[:title]).to eq(widget_name)
|
57
|
+
expect(wdata[:redraw_interval]).to eq(redraw_interval)
|
58
|
+
expect(wdata[:width]).to eq(width)
|
59
|
+
expect(wdata[:dygraphs_options][:a]).to eq(1)
|
60
|
+
expect(wdata[:timespan]).to eq(timespan)
|
61
|
+
expect(wdata[:interval]).to eq(interval)
|
62
62
|
end
|
63
63
|
|
64
64
|
describe "series attribute" do
|
@@ -75,7 +75,7 @@ shared_examples_for "widget" do
|
|
75
75
|
|
76
76
|
it "contains valid series" do
|
77
77
|
Timecop.freeze(@current_time) do
|
78
|
-
widget.data[:series].
|
78
|
+
expect(widget.data[:series]).to eq(
|
79
79
|
{
|
80
80
|
titles: [a_sensor.annotation, b_sensor.annotation],
|
81
81
|
rows: [[interval_start.to_i * 1000, 12, 33]],
|
@@ -84,23 +84,24 @@ shared_examples_for "widget" do
|
|
84
84
|
{color: b_color}
|
85
85
|
]
|
86
86
|
}
|
87
|
+
)
|
87
88
|
end
|
88
89
|
end
|
89
90
|
|
90
91
|
it "accepts custom timespan" do
|
91
92
|
Timecop.freeze(@current_time + interval) do
|
92
|
-
widget.data(timespan: timespan)[:series][:rows].size.
|
93
|
-
widget.data(timespan: timespan + interval)[:series][:rows].size.
|
93
|
+
expect(widget.data(timespan: timespan)[:series][:rows].size).to eq(1)
|
94
|
+
expect(widget.data(timespan: timespan + interval)[:series][:rows].size).to eq(2)
|
94
95
|
end
|
95
96
|
end
|
96
97
|
|
97
98
|
it "accepts start_time and end_time" do
|
98
99
|
Timecop.freeze(@current_time + interval) do
|
99
|
-
widget.data(start_time: (Time.now - timespan).to_i)[:series][:rows].size.
|
100
|
-
widget.data(
|
100
|
+
expect(widget.data(start_time: (Time.now - timespan).to_i)[:series][:rows].size).to eq(1)
|
101
|
+
expect(widget.data(
|
101
102
|
start_time: (Time.now - interval - timespan).to_i,
|
102
103
|
end_time: Time.now.to_i
|
103
|
-
)[:series][:rows].size.
|
104
|
+
)[:series][:rows].size).to eq(2)
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pulse_meter-dygraphs_visualizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Averyanov
|
@@ -15,280 +15,280 @@ dependencies:
|
|
15
15
|
name: pulse_meter_core
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: gon-sinatra
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: haml
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '0'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- -
|
53
|
+
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: sinatra
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- -
|
60
|
+
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '0'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: sinatra-partial
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: aquarium
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: coffee-script
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- -
|
102
|
+
- - ">="
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- -
|
109
|
+
- - ">="
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: foreman
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- -
|
116
|
+
- - ">="
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- -
|
123
|
+
- - ">="
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: hashie
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
|
-
- -
|
130
|
+
- - ">="
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '0'
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
|
-
- -
|
137
|
+
- - ">="
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0'
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
141
|
name: listen
|
142
142
|
requirement: !ruby/object:Gem::Requirement
|
143
143
|
requirements:
|
144
|
-
- -
|
144
|
+
- - ">="
|
145
145
|
- !ruby/object:Gem::Version
|
146
146
|
version: '0'
|
147
147
|
type: :development
|
148
148
|
prerelease: false
|
149
149
|
version_requirements: !ruby/object:Gem::Requirement
|
150
150
|
requirements:
|
151
|
-
- -
|
151
|
+
- - ">="
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0'
|
154
154
|
- !ruby/object:Gem::Dependency
|
155
155
|
name: mock_redis
|
156
156
|
requirement: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
|
-
- -
|
158
|
+
- - ">="
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: '0'
|
161
161
|
type: :development
|
162
162
|
prerelease: false
|
163
163
|
version_requirements: !ruby/object:Gem::Requirement
|
164
164
|
requirements:
|
165
|
-
- -
|
165
|
+
- - ">="
|
166
166
|
- !ruby/object:Gem::Version
|
167
167
|
version: '0'
|
168
168
|
- !ruby/object:Gem::Dependency
|
169
169
|
name: rack-test
|
170
170
|
requirement: !ruby/object:Gem::Requirement
|
171
171
|
requirements:
|
172
|
-
- -
|
172
|
+
- - ">="
|
173
173
|
- !ruby/object:Gem::Version
|
174
174
|
version: '0'
|
175
175
|
type: :development
|
176
176
|
prerelease: false
|
177
177
|
version_requirements: !ruby/object:Gem::Requirement
|
178
178
|
requirements:
|
179
|
-
- -
|
179
|
+
- - ">="
|
180
180
|
- !ruby/object:Gem::Version
|
181
181
|
version: '0'
|
182
182
|
- !ruby/object:Gem::Dependency
|
183
183
|
name: rake
|
184
184
|
requirement: !ruby/object:Gem::Requirement
|
185
185
|
requirements:
|
186
|
-
- -
|
186
|
+
- - ">="
|
187
187
|
- !ruby/object:Gem::Version
|
188
188
|
version: '0'
|
189
189
|
type: :development
|
190
190
|
prerelease: false
|
191
191
|
version_requirements: !ruby/object:Gem::Requirement
|
192
192
|
requirements:
|
193
|
-
- -
|
193
|
+
- - ">="
|
194
194
|
- !ruby/object:Gem::Version
|
195
195
|
version: '0'
|
196
196
|
- !ruby/object:Gem::Dependency
|
197
197
|
name: rb-fsevent
|
198
198
|
requirement: !ruby/object:Gem::Requirement
|
199
199
|
requirements:
|
200
|
-
- -
|
200
|
+
- - ">="
|
201
201
|
- !ruby/object:Gem::Version
|
202
202
|
version: '0'
|
203
203
|
type: :development
|
204
204
|
prerelease: false
|
205
205
|
version_requirements: !ruby/object:Gem::Requirement
|
206
206
|
requirements:
|
207
|
-
- -
|
207
|
+
- - ">="
|
208
208
|
- !ruby/object:Gem::Version
|
209
209
|
version: '0'
|
210
210
|
- !ruby/object:Gem::Dependency
|
211
211
|
name: redcarpet
|
212
212
|
requirement: !ruby/object:Gem::Requirement
|
213
213
|
requirements:
|
214
|
-
- -
|
214
|
+
- - ">="
|
215
215
|
- !ruby/object:Gem::Version
|
216
216
|
version: '0'
|
217
217
|
type: :development
|
218
218
|
prerelease: false
|
219
219
|
version_requirements: !ruby/object:Gem::Requirement
|
220
220
|
requirements:
|
221
|
-
- -
|
221
|
+
- - ">="
|
222
222
|
- !ruby/object:Gem::Version
|
223
223
|
version: '0'
|
224
224
|
- !ruby/object:Gem::Dependency
|
225
225
|
name: rspec
|
226
226
|
requirement: !ruby/object:Gem::Requirement
|
227
227
|
requirements:
|
228
|
-
- -
|
228
|
+
- - ">="
|
229
229
|
- !ruby/object:Gem::Version
|
230
230
|
version: '0'
|
231
231
|
type: :development
|
232
232
|
prerelease: false
|
233
233
|
version_requirements: !ruby/object:Gem::Requirement
|
234
234
|
requirements:
|
235
|
-
- -
|
235
|
+
- - ">="
|
236
236
|
- !ruby/object:Gem::Version
|
237
237
|
version: '0'
|
238
238
|
- !ruby/object:Gem::Dependency
|
239
239
|
name: simplecov
|
240
240
|
requirement: !ruby/object:Gem::Requirement
|
241
241
|
requirements:
|
242
|
-
- -
|
242
|
+
- - ">="
|
243
243
|
- !ruby/object:Gem::Version
|
244
244
|
version: '0'
|
245
245
|
type: :development
|
246
246
|
prerelease: false
|
247
247
|
version_requirements: !ruby/object:Gem::Requirement
|
248
248
|
requirements:
|
249
|
-
- -
|
249
|
+
- - ">="
|
250
250
|
- !ruby/object:Gem::Version
|
251
251
|
version: '0'
|
252
252
|
- !ruby/object:Gem::Dependency
|
253
253
|
name: sprockets
|
254
254
|
requirement: !ruby/object:Gem::Requirement
|
255
255
|
requirements:
|
256
|
-
- -
|
256
|
+
- - ">="
|
257
257
|
- !ruby/object:Gem::Version
|
258
258
|
version: '0'
|
259
259
|
type: :development
|
260
260
|
prerelease: false
|
261
261
|
version_requirements: !ruby/object:Gem::Requirement
|
262
262
|
requirements:
|
263
|
-
- -
|
263
|
+
- - ">="
|
264
264
|
- !ruby/object:Gem::Version
|
265
265
|
version: '0'
|
266
266
|
- !ruby/object:Gem::Dependency
|
267
267
|
name: timecop
|
268
268
|
requirement: !ruby/object:Gem::Requirement
|
269
269
|
requirements:
|
270
|
-
- -
|
270
|
+
- - ">="
|
271
271
|
- !ruby/object:Gem::Version
|
272
272
|
version: '0'
|
273
273
|
type: :development
|
274
274
|
prerelease: false
|
275
275
|
version_requirements: !ruby/object:Gem::Requirement
|
276
276
|
requirements:
|
277
|
-
- -
|
277
|
+
- - ">="
|
278
278
|
- !ruby/object:Gem::Version
|
279
279
|
version: '0'
|
280
280
|
- !ruby/object:Gem::Dependency
|
281
281
|
name: yard
|
282
282
|
requirement: !ruby/object:Gem::Requirement
|
283
283
|
requirements:
|
284
|
-
- -
|
284
|
+
- - ">="
|
285
285
|
- !ruby/object:Gem::Version
|
286
286
|
version: '0'
|
287
287
|
type: :development
|
288
288
|
prerelease: false
|
289
289
|
version_requirements: !ruby/object:Gem::Requirement
|
290
290
|
requirements:
|
291
|
-
- -
|
291
|
+
- - ">="
|
292
292
|
- !ruby/object:Gem::Version
|
293
293
|
version: '0'
|
294
294
|
description: Customizable web interface for PulseMeter gem
|
@@ -299,11 +299,11 @@ executables: []
|
|
299
299
|
extensions: []
|
300
300
|
extra_rdoc_files: []
|
301
301
|
files:
|
302
|
-
- .gitignore
|
303
|
-
- .
|
304
|
-
- .
|
305
|
-
- .rvmrc
|
306
|
-
- .travis.yml
|
302
|
+
- ".gitignore"
|
303
|
+
- ".rspec"
|
304
|
+
- ".ruby-version"
|
305
|
+
- ".rvmrc"
|
306
|
+
- ".travis.yml"
|
307
307
|
- Gemfile
|
308
308
|
- LICENSE
|
309
309
|
- Procfile
|
@@ -416,17 +416,17 @@ require_paths:
|
|
416
416
|
- lib
|
417
417
|
required_ruby_version: !ruby/object:Gem::Requirement
|
418
418
|
requirements:
|
419
|
-
- -
|
419
|
+
- - ">="
|
420
420
|
- !ruby/object:Gem::Version
|
421
421
|
version: 1.9.2
|
422
422
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
423
423
|
requirements:
|
424
|
-
- -
|
424
|
+
- - ">="
|
425
425
|
- !ruby/object:Gem::Version
|
426
426
|
version: '0'
|
427
427
|
requirements: []
|
428
428
|
rubyforge_project:
|
429
|
-
rubygems_version: 2.5.
|
429
|
+
rubygems_version: 2.5.1
|
430
430
|
signing_key:
|
431
431
|
specification_version: 4
|
432
432
|
summary: Customizable Dygraphs-based web interface for lightweight metrics aggregator
|
data/.rbenv-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.9.3-p125
|