pulse-meter-client-backport 0.1.1 → 0.1.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.
@@ -0,0 +1,47 @@
|
|
1
|
+
module PulseMeter
|
2
|
+
module Sensor
|
3
|
+
class Configuration
|
4
|
+
include PulseMeter::Mixins::Utils
|
5
|
+
|
6
|
+
def initialize(opts = {})
|
7
|
+
@sensors = {}
|
8
|
+
opts.each do |name, opts|
|
9
|
+
add_sensor(name, opts)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_sensor(name, opts)
|
14
|
+
sensor_type = opts.respond_to?(:sensor_type) ? opts.sensor_type : opts[:sensor_type]
|
15
|
+
klass_s = sensor_class(sensor_type)
|
16
|
+
klass = constantize(klass_s)
|
17
|
+
raise ArgumentError, "#{klass_s} is not a valid class for a sensor" unless klass
|
18
|
+
args = (opts.respond_to?(:args) ? opts.args : opts[:args]) || {}
|
19
|
+
@sensors[name.to_s] = klass.new(name, symbolize_keys(args.to_hash))
|
20
|
+
end
|
21
|
+
|
22
|
+
def sensor(name)
|
23
|
+
@sensors[name.to_s]
|
24
|
+
end
|
25
|
+
|
26
|
+
def method_missing(name, *args)
|
27
|
+
name = name.to_s
|
28
|
+
if @sensors.has_key?(name)
|
29
|
+
@sensors[name].event(*args)
|
30
|
+
else
|
31
|
+
raise ArgumentError, "Unknown sensor: `#{name}'"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def sensor_class(sensor_type)
|
38
|
+
entries = sensor_type.to_s.split('/').map do |entry|
|
39
|
+
entry.split('_').map(&:capitalize).join
|
40
|
+
end
|
41
|
+
entries.unshift('PulseMeter::Sensor').join('::')
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/pulse-meter/version.rb
CHANGED
@@ -0,0 +1,83 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe PulseMeter::Sensor::Configuration do
|
4
|
+
describe "#add_sensor" do
|
5
|
+
let(:cfg) {described_class.new}
|
6
|
+
|
7
|
+
it "should create sensor available under passed name" do
|
8
|
+
cfg.sensor(:foo).should be_nil
|
9
|
+
cfg.add_sensor(:foo, :sensor_type =>'counter')
|
10
|
+
cfg.sensor(:foo).should_not be_nil
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should event shortcut for the sensor" do
|
14
|
+
cfg.add_sensor(:foo, :sensor_type =>'counter')
|
15
|
+
sensor = cfg.sensor(:foo)
|
16
|
+
sensor.should_receive(:event).with(321)
|
17
|
+
cfg.foo(321)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should create sensor with correct type" do
|
21
|
+
cfg.add_sensor(:foo, :sensor_type =>'counter')
|
22
|
+
cfg.sensor(:foo).should be_kind_of(PulseMeter::Sensor::Counter)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should raise exception if sensor type is bad" do
|
26
|
+
expect{ cfg.add_sensor(:foo, :sensor_type =>'baaaar') }.to raise_exception(ArgumentError)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should pass args to created sensor" do
|
30
|
+
cfg.add_sensor(:foo, :sensor_type =>'counter', :args =>{:annotation => "My Foo Counter"} )
|
31
|
+
cfg.sensor(:foo).annotation.should == "My Foo Counter"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should accept hashie-objects" do
|
35
|
+
class Dummy
|
36
|
+
def sensor_type
|
37
|
+
'counter'
|
38
|
+
end
|
39
|
+
def args
|
40
|
+
Hashie::Mash.new(:annotation =>"My Foo Counter")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
cfg.add_sensor(:foo, Dummy.new)
|
45
|
+
cfg.sensor(:foo).annotation.should == "My Foo Counter"
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
describe ".new" do
|
52
|
+
it "should add passed sensor setting hash using keys as names" do
|
53
|
+
opts = {
|
54
|
+
:cnt => {
|
55
|
+
:sensor_type => 'counter'
|
56
|
+
},
|
57
|
+
:ind => {
|
58
|
+
:sensor_type => 'indicator'
|
59
|
+
}
|
60
|
+
}
|
61
|
+
cfg1 = described_class.new(opts)
|
62
|
+
cfg2 = described_class.new
|
63
|
+
opts.each{|k,v| cfg2.add_sensor(k, v)}
|
64
|
+
cfg1.to_yaml.should == cfg2.to_yaml
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#sensor" do
|
69
|
+
it "should give access to added sensors" do
|
70
|
+
opts = {
|
71
|
+
:cnt => {
|
72
|
+
:sensor_type => 'counter',
|
73
|
+
:args => {
|
74
|
+
:annotation => "MySensor"
|
75
|
+
}
|
76
|
+
}
|
77
|
+
}
|
78
|
+
cfg = described_class.new(opts)
|
79
|
+
cfg.sensor(:cnt).annotation.should == "MySensor"
|
80
|
+
cfg.sensor("cnt").annotation.should == "MySensor"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pulse-meter-client-backport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ilya Averyanov
|
@@ -200,6 +200,7 @@ files:
|
|
200
200
|
- lib/pulse-meter/mixins/utils.rb
|
201
201
|
- lib/pulse-meter/sensor.rb
|
202
202
|
- lib/pulse-meter/sensor/base.rb
|
203
|
+
- lib/pulse-meter/sensor/configuration.rb
|
203
204
|
- lib/pulse-meter/sensor/counter.rb
|
204
205
|
- lib/pulse-meter/sensor/hashed_counter.rb
|
205
206
|
- lib/pulse-meter/sensor/indicator.rb
|
@@ -216,6 +217,7 @@ files:
|
|
216
217
|
- spec/pulse_meter/mixins/dumper_spec.rb
|
217
218
|
- spec/pulse_meter/mixins/utils_spec.rb
|
218
219
|
- spec/pulse_meter/sensor/base_spec.rb
|
220
|
+
- spec/pulse_meter/sensor/configuration_spec.rb
|
219
221
|
- spec/pulse_meter/sensor/counter_spec.rb
|
220
222
|
- spec/pulse_meter/sensor/hashed_counter_spec.rb
|
221
223
|
- spec/pulse_meter/sensor/indicator_spec.rb
|
@@ -271,6 +273,7 @@ test_files:
|
|
271
273
|
- spec/pulse_meter/mixins/dumper_spec.rb
|
272
274
|
- spec/pulse_meter/mixins/utils_spec.rb
|
273
275
|
- spec/pulse_meter/sensor/base_spec.rb
|
276
|
+
- spec/pulse_meter/sensor/configuration_spec.rb
|
274
277
|
- spec/pulse_meter/sensor/counter_spec.rb
|
275
278
|
- spec/pulse_meter/sensor/hashed_counter_spec.rb
|
276
279
|
- spec/pulse_meter/sensor/indicator_spec.rb
|