lights 0.8.18 → 0.8.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/lights/bridge.rb +0 -1
- data/lib/lights/bulb.rb +13 -6
- data/lib/lights/bulbstate.rb +3 -4
- data/lib/lights/command.rb +1 -2
- data/lib/lights/config.rb +45 -6
- data/lib/lights/datastore.rb +1 -2
- data/lib/lights/exception.rb +1 -1
- data/lib/lights/group.rb +5 -4
- data/lib/lights/hobject.rb +1 -2
- data/lib/lights/list.rb +1 -2
- data/lib/lights/rule.rb +18 -3
- data/lib/lights/scene.rb +1 -2
- data/lib/lights/schedule.rb +11 -4
- data/lib/lights/sensor.rb +12 -21
- data/lib/lights/user.rb +1 -2
- data/lib/lights/version.rb +1 -1
- data/spec/bulb_spec.rb +7 -0
- data/spec/datastore_spec.rb +36 -6
- data/spec/group_spec.rb +139 -9
- data/spec/rule_spec.rb +0 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjUyYjgwZTU5M2I1ZjhhMDNhYjQyN2ZiYmU1NmZjMGUxNjNlZjE0MQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MmY0YzRlMWQ3OTE0NjczYjk4NDhkN2E4YWE1NDI5OGMyNDBlNzA1Mg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MWM3ODk4ZDUyZGI1MWMyZGUyMWI3MjE0NTVmZGIzYjA1ZmJiODg2ZTc2NjZh
|
10
|
+
NWZiNzFkNzg4Njk1Nzk1YTBhYmI5MzQ2NjQ5NjQ5YzEwODhhNzEwZjM4ODJi
|
11
|
+
MDkwNjQ4ZjQwMWY2NTkyMzI2YTI5MjlhNjYyN2Y2ZDMyNWQzNmE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZjNkZThjYTg1YjBiOTQ2OWNmYTY5OTQyOTk2OGM4Mzg1M2YwZGUxNDkyYTdk
|
14
|
+
OTNmYWIyNGJlZmVlY2NkZDBlMWVmYWY5ZGFhNTA1ODc0OTBmNzI2MTRiOGM5
|
15
|
+
MDRmNTMzNWMxYmRhODMxYTBkYTg5OGQxMjM3MWFkMTNkZjk4OGI=
|
data/lib/lights/bridge.rb
CHANGED
data/lib/lights/bulb.rb
CHANGED
@@ -2,22 +2,29 @@ require 'lights/bulbstate'
|
|
2
2
|
require 'lights/hobject'
|
3
3
|
|
4
4
|
class Bulb < HObject
|
5
|
-
attr_reader :id, :name, :type, :
|
5
|
+
attr_reader :id, :name, :type, :sw_version, :state,
|
6
|
+
:point_symbol, :model_id, :unique_id
|
7
|
+
attr_writer :name, :state
|
6
8
|
def initialize(id,data = {})
|
7
|
-
super(data)
|
8
9
|
@id = id
|
9
10
|
@name = data["name"]
|
10
11
|
@type = data["type"]
|
11
|
-
@
|
12
|
+
@sw_version = data["swversion"]
|
13
|
+
@point_symbol = data["pointsymbol"]
|
14
|
+
@model_id = data["modelid"]
|
15
|
+
@unique_id = data["uniqueid"]
|
12
16
|
@state = BulbState.new data["state"]
|
13
17
|
end
|
14
18
|
|
15
19
|
def data
|
16
|
-
data =
|
20
|
+
data = {}
|
17
21
|
data["name"] = @name if @name
|
18
22
|
data["type"] = @type if @type
|
19
|
-
data["swversion"] = @
|
20
|
-
data["state"] = @state.data
|
23
|
+
data["swversion"] = @sw_version if @sw_version
|
24
|
+
data["state"] = @state.data unless @state.data.empty?
|
25
|
+
data["pointsymbol"] = @point_symbol if @point_symbol
|
26
|
+
data["modelid"] = @model_id if @model_id
|
27
|
+
data["uniqueid"] = @unique_id if @unique_id
|
21
28
|
data
|
22
29
|
end
|
23
30
|
end
|
data/lib/lights/bulbstate.rb
CHANGED
@@ -45,7 +45,6 @@ class BulbState < HObject
|
|
45
45
|
:reachable, :transition_time
|
46
46
|
def initialize( data = {} )
|
47
47
|
data = {} if data == nil
|
48
|
-
super
|
49
48
|
@on = data["on"]
|
50
49
|
set_bri data["bri"]
|
51
50
|
set_hue data["hue"]
|
@@ -172,8 +171,8 @@ class BulbState < HObject
|
|
172
171
|
end
|
173
172
|
|
174
173
|
def data
|
175
|
-
data =
|
176
|
-
data["on"] = @on
|
174
|
+
data = {}
|
175
|
+
data["on"] = @on unless @on.nil?
|
177
176
|
data["bri"] = @bri if @bri
|
178
177
|
data["hue"] = @hue if @hue
|
179
178
|
data["sat"] = @sat if @sat
|
@@ -182,7 +181,7 @@ class BulbState < HObject
|
|
182
181
|
data["alert"] = @alert if @alert
|
183
182
|
data["effect"] = @effect if @effect
|
184
183
|
data["colormode"] = @color_mode if @color_mode
|
185
|
-
data["reachable"] = @reachable
|
184
|
+
data["reachable"] = @reachable unless @reachable.nil?
|
186
185
|
data["transitiontime"] = @transition_time if @transition_time
|
187
186
|
data
|
188
187
|
end
|
data/lib/lights/command.rb
CHANGED
@@ -3,14 +3,13 @@ require 'lights/hobject'
|
|
3
3
|
class Command < HObject
|
4
4
|
attr_reader :address, :method, :body
|
5
5
|
def initialize(data = {})
|
6
|
-
super
|
7
6
|
@address = data["address"]
|
8
7
|
@body = data["body"]
|
9
8
|
@method = data["method"]
|
10
9
|
end
|
11
10
|
|
12
11
|
def data
|
13
|
-
data =
|
12
|
+
data = {}
|
14
13
|
data["address"] = @address if @address
|
15
14
|
data["body"] = @body if @body
|
16
15
|
data["method"] = @method if @method
|
data/lib/lights/config.rb
CHANGED
@@ -2,19 +2,58 @@ require 'lights/userlist'
|
|
2
2
|
require 'lights/hobject'
|
3
3
|
|
4
4
|
class HueConfig < HObject
|
5
|
-
attr_reader :name, :
|
5
|
+
attr_reader :name, :zigbee_channel, :mac, :dhcp,
|
6
|
+
:ip_address, :netmask, :gateway,
|
7
|
+
:proxy_address, :proxy_port, :utc,
|
8
|
+
:local_time, :time_zone, :whitelist,
|
9
|
+
:swversion, :api_version, :sw_update,
|
10
|
+
:link_button, :portal_services,
|
11
|
+
:portal_connection, :portal_state
|
6
12
|
def initialize(data = {})
|
7
|
-
super
|
8
13
|
@name = data["name"]
|
9
|
-
@
|
14
|
+
@zigbee_channel = data["zigbeechannel"]
|
15
|
+
@mac = data["mac"]
|
16
|
+
@dhcp = data["dhcp"]
|
17
|
+
@ip_address = data["ipaddress"]
|
18
|
+
@netmask = data["netmask"]
|
19
|
+
@gateway = data["gateway"]
|
20
|
+
@proxy_address = data["proxyaddress"]
|
21
|
+
@proxy_port = data["proxyport"]
|
22
|
+
@utc = data["UTC"]
|
23
|
+
@local_time = data["localtime"]
|
24
|
+
@time_zone = data["timezone"]
|
10
25
|
@whitelist = UserList.new(data["whitelist"])
|
26
|
+
@sw_version = data["swversion"]
|
27
|
+
@api_version = data["apiversion"]
|
28
|
+
@sw_update = data["swupdate"]
|
29
|
+
@link_button = data["linkbutton"]
|
30
|
+
@portal_services = data["portalservices"]
|
31
|
+
@portal_connection = data["portalconnection"]
|
32
|
+
@portal_state = data["portalstate"]
|
11
33
|
end
|
12
34
|
|
13
35
|
def data
|
14
|
-
data =
|
36
|
+
data = {}
|
15
37
|
data["name"] = @name if @name
|
16
|
-
data["
|
17
|
-
data["
|
38
|
+
data["zigbeechannel"] = @zigbee_channel if @zigbee_channel
|
39
|
+
data["mac"] = @mac if @mac
|
40
|
+
data["dhcp"] = @dhcp unless @dhcp.nil?
|
41
|
+
data["ipaddress"] = @ip_address if @ip_address
|
42
|
+
data["netmask"] = @netmask if @netmask
|
43
|
+
data["gateway"] = @gateway if @gateway
|
44
|
+
data["proxyaddress"] = @proxy_address if @proxy_address
|
45
|
+
data["proxyport"] = @proxy_port if @proxy_port
|
46
|
+
data["UTC"] = @utc if @utc
|
47
|
+
data["localtime"] = @local_time if @local_time
|
48
|
+
data["timezone"] = @time_zone if @time_zone
|
49
|
+
data["whitelist"] = @whitelist.data unless @whitelist.data.empty?
|
50
|
+
data["swversion"] = @sw_version if @sw_version
|
51
|
+
data["apiversion"] = @api_version if @api_version
|
52
|
+
data["swupdate"] = @sw_update unless @sw_update.nil?
|
53
|
+
data["linkbutton"] = @link_button unless @link_button.nil?
|
54
|
+
data["portalservices"] = @portal_services unless @portal_services.nil?
|
55
|
+
data["portalconnection"] = @portal_connection if @portal_connection
|
56
|
+
data["portalstate"] = @portal_state unless @portal_state.nil?
|
18
57
|
data
|
19
58
|
end
|
20
59
|
end
|
data/lib/lights/datastore.rb
CHANGED
@@ -11,7 +11,6 @@ class Datastore < HObject
|
|
11
11
|
attr_reader :lights, :groups, :config, :rules,
|
12
12
|
:scenes, :schedules, :sensors
|
13
13
|
def initialize(data = {})
|
14
|
-
super
|
15
14
|
@lights = BulbList.new(data["lights"])
|
16
15
|
@groups = GroupList.new(data["groups"])
|
17
16
|
@config = HueConfig.new(data["config"])
|
@@ -32,7 +31,7 @@ class Datastore < HObject
|
|
32
31
|
end
|
33
32
|
|
34
33
|
def data
|
35
|
-
data =
|
34
|
+
data = {}
|
36
35
|
data["lights"] = @lights.data if !@lights.data.empty?
|
37
36
|
data["groups"] = @groups.data if !@groups.data.empty?
|
38
37
|
data["config"] = @config.data if !@config.data.empty?
|
data/lib/lights/exception.rb
CHANGED
data/lib/lights/group.rb
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
require 'lights/hobject'
|
2
2
|
|
3
3
|
class Group < HObject
|
4
|
-
attr_reader :id, :data, :name, :lights, :action
|
4
|
+
attr_reader :id, :data, :name, :lights, :action, :type
|
5
5
|
attr_writer :name, :lights, :action
|
6
6
|
def initialize( id = nil, data = {} )
|
7
|
-
super(data)
|
8
7
|
@id = id
|
9
8
|
@action = BulbState.new(data["action"])
|
10
9
|
@name = data["name"]
|
11
10
|
@lights = data["lights"]
|
11
|
+
@type = data["type"]
|
12
12
|
end
|
13
13
|
|
14
14
|
def data
|
15
|
-
data =
|
15
|
+
data = {}
|
16
16
|
data["name"] = @name if @name
|
17
17
|
data["lights"] = @lights if @lights
|
18
|
-
data["
|
18
|
+
data["type"] = @type if @type
|
19
|
+
data["action"] = @action.data unless @action.data.empty?
|
19
20
|
data
|
20
21
|
end
|
21
22
|
end
|
data/lib/lights/hobject.rb
CHANGED
data/lib/lights/list.rb
CHANGED
data/lib/lights/rule.rb
CHANGED
@@ -1,16 +1,31 @@
|
|
1
1
|
require 'lights/hobject'
|
2
2
|
|
3
3
|
class Rule < HObject
|
4
|
-
attr_reader :id, :
|
4
|
+
attr_reader :id, :name, :owner, :created,
|
5
|
+
:last_triggered, :times_triggered,
|
6
|
+
:status, :conditions, :actions
|
5
7
|
def initialize( id = nil, data = {} )
|
6
|
-
super(data)
|
7
8
|
@id = id
|
8
9
|
@name = data["name"]
|
10
|
+
@owner = data["owner"]
|
11
|
+
@created = data["created"]
|
12
|
+
@last_triggered = data["lasttriggered"]
|
13
|
+
@times_triggered = data["timestriggered"]
|
14
|
+
@status = data["status"]
|
15
|
+
@conditions = data["conditions"]
|
16
|
+
@actions = data["actions"]
|
9
17
|
end
|
10
18
|
|
11
19
|
def data
|
12
|
-
data =
|
20
|
+
data = {}
|
13
21
|
data["name"] = @name if @name
|
22
|
+
data["owner"] = @owner if @owner
|
23
|
+
data["created"] = @created if @created
|
24
|
+
data["lasttriggered"] = @last_triggered if @last_triggered
|
25
|
+
data["timestriggered"] = @times_triggered if @times_triggered
|
26
|
+
data["status"] = @status if @status
|
27
|
+
data["conditions"] = @conditions if @conditions
|
28
|
+
data["actions"] = @actions if @actions
|
14
29
|
data
|
15
30
|
end
|
16
31
|
end
|
data/lib/lights/scene.rb
CHANGED
@@ -3,7 +3,6 @@ require 'lights/hobject'
|
|
3
3
|
class Scene < HObject
|
4
4
|
attr_accessor :id, :name, :active, :lights
|
5
5
|
def initialize(id,data = {})
|
6
|
-
super(data)
|
7
6
|
@id = id
|
8
7
|
@name = data["name"]
|
9
8
|
@active = data["active"]
|
@@ -13,7 +12,7 @@ class Scene < HObject
|
|
13
12
|
def data
|
14
13
|
data = {}
|
15
14
|
data["name"] = @name if @name
|
16
|
-
data["active"] = @active
|
15
|
+
data["active"] = @active unless @active.nil?
|
17
16
|
data["lights"] = @lights if @lights
|
18
17
|
data
|
19
18
|
end
|
data/lib/lights/schedule.rb
CHANGED
@@ -2,13 +2,17 @@ require 'lights/command'
|
|
2
2
|
require 'lights/hobject'
|
3
3
|
|
4
4
|
class Schedule < HObject
|
5
|
-
attr_reader :id, :name, :time, :status
|
5
|
+
attr_reader :id, :name, :time, :status,
|
6
|
+
:description, :local_time,
|
7
|
+
:created, :command
|
6
8
|
def initialize(id,data = {})
|
7
|
-
super(data)
|
8
9
|
@id = id
|
9
10
|
@name = data["name"]
|
10
11
|
@time = data["time"]
|
11
12
|
@status = data["status"]
|
13
|
+
@description = data["description"]
|
14
|
+
@local_time = data["localtime"]
|
15
|
+
@created = data["created"]
|
12
16
|
@command = Command.new(data["command"])
|
13
17
|
end
|
14
18
|
|
@@ -17,11 +21,14 @@ class Schedule < HObject
|
|
17
21
|
end
|
18
22
|
|
19
23
|
def data
|
20
|
-
data =
|
24
|
+
data = {}
|
21
25
|
data["name"] = @name if @name
|
22
26
|
data["time"] = @time if @time
|
23
27
|
data["status"] = @status if @status
|
24
|
-
data["
|
28
|
+
data["description"] = @description if @description
|
29
|
+
data["localtime"] = @local_time if @local_time
|
30
|
+
data["created"] = @created if @created
|
31
|
+
data["command"] = @command.data unless @command.data.empty?
|
25
32
|
data
|
26
33
|
end
|
27
34
|
end
|
data/lib/lights/sensor.rb
CHANGED
@@ -1,35 +1,25 @@
|
|
1
1
|
class SensorState < HObject
|
2
2
|
attr_reader :last_updated
|
3
3
|
def initialize(data)
|
4
|
-
super
|
5
4
|
@last_updated = data["lastupdated"]
|
5
|
+
@daylight = data["daylight"]
|
6
|
+
@button_event = data["buttonevent"]
|
6
7
|
end
|
7
8
|
|
8
9
|
def data
|
9
|
-
data =
|
10
|
+
data = {}
|
10
11
|
data["lastupdated"] = @last_updated if @last_updated
|
11
|
-
data
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
class TapState < SensorState
|
16
|
-
attr_reader :button_event
|
17
|
-
def initialize(data)
|
18
|
-
super
|
19
|
-
@button_event = data["button_event"]
|
20
|
-
end
|
21
|
-
|
22
|
-
def data
|
23
|
-
data = @data
|
24
|
-
data["button_event"] = @button_event if @button_event
|
12
|
+
data["daylight"] = @daylight unless @daylight.nil?
|
13
|
+
data["buttonevent"] = @button_event if @button_event
|
25
14
|
data
|
26
15
|
end
|
27
16
|
end
|
28
17
|
|
29
18
|
class Sensor < HObject
|
30
|
-
attr_reader :id, :data, :name, :type, :model_id,
|
19
|
+
attr_reader :id, :data, :name, :type, :model_id,
|
20
|
+
:manufacturer_name, :unique_id,
|
21
|
+
:sw_version, :state
|
31
22
|
def initialize( id, data = {} )
|
32
|
-
super(data)
|
33
23
|
@id = id
|
34
24
|
@name = data["name"]
|
35
25
|
@type = data["type"]
|
@@ -37,19 +27,20 @@ class Sensor < HObject
|
|
37
27
|
@manufacturer_name = data["manufacturername"]
|
38
28
|
@unique_id = data["uniqueid"]
|
39
29
|
@sw_version = data["swversion"]
|
30
|
+
@config = data["config"]
|
40
31
|
@state = SensorState.new(data["state"])
|
41
|
-
#@config = SensorConfig.new(data["config"])
|
42
32
|
end
|
43
33
|
|
44
34
|
def data
|
45
|
-
data =
|
35
|
+
data = {}
|
46
36
|
data["name"] = @name if @name
|
47
37
|
data["type"] = @type if @type
|
48
38
|
data["modelid"] = @model_id if @model_id
|
49
39
|
data["manufacturername"] = @manufacturer_name if @manufacturer_name
|
50
40
|
data["uniqueid"] = @unique_id if @unique_id
|
51
41
|
data["swversion"] = @sw_version if @sw_version
|
52
|
-
data["
|
42
|
+
data["config"] = @config if @config
|
43
|
+
data["state"] = @state.data unless @state.data.empty?
|
53
44
|
data
|
54
45
|
end
|
55
46
|
end
|
data/lib/lights/user.rb
CHANGED
@@ -3,7 +3,6 @@ require 'lights/hobject'
|
|
3
3
|
class User < HObject
|
4
4
|
attr_reader :id, :name, :create_date, :last_use_date
|
5
5
|
def initialize( id, data = {} )
|
6
|
-
super(data)
|
7
6
|
@id = id
|
8
7
|
@name = data["name"]
|
9
8
|
@create_date = data["create date"]
|
@@ -11,7 +10,7 @@ class User < HObject
|
|
11
10
|
end
|
12
11
|
|
13
12
|
def data
|
14
|
-
data =
|
13
|
+
data = {}
|
15
14
|
data["name"] = @name if @name
|
16
15
|
data["create date"] = @create_date if @create_date
|
17
16
|
data["last use date"] = @last_use_date if @last_use_date
|
data/lib/lights/version.rb
CHANGED
data/spec/bulb_spec.rb
CHANGED
@@ -7,6 +7,13 @@ describe Bulb do
|
|
7
7
|
bulb.name.should eql "test name"
|
8
8
|
end
|
9
9
|
|
10
|
+
it "properly set name parameter" do
|
11
|
+
data = { "name" => "test name" }
|
12
|
+
bulb = Bulb.new(1,data)
|
13
|
+
bulb.name = "new test name"
|
14
|
+
bulb.name.should eql "new test name"
|
15
|
+
end
|
16
|
+
|
10
17
|
it "properly creates state object" do
|
11
18
|
data = {
|
12
19
|
"name" => "test name",
|
data/spec/datastore_spec.rb
CHANGED
@@ -2,15 +2,45 @@ require 'lights'
|
|
2
2
|
|
3
3
|
describe Datastore do
|
4
4
|
it "properly reconstructs sub objects" do
|
5
|
+
data = JSON.parse(DATASTORE_JSON)
|
6
|
+
ds = Datastore.new data
|
7
|
+
ds.data.should eql data
|
8
|
+
end
|
9
|
+
|
10
|
+
it "properly reconstructs light objects" do
|
5
11
|
data = JSON.parse(DATASTORE_JSON)
|
6
12
|
ds = Datastore.new data
|
7
13
|
ds.lights.data.should eql data["lights"]
|
14
|
+
end
|
15
|
+
it "properly reconstructs group objects" do
|
16
|
+
data = JSON.parse(DATASTORE_JSON)
|
17
|
+
ds = Datastore.new data
|
8
18
|
ds.groups.data.should eql data["groups"]
|
19
|
+
end
|
20
|
+
it "properly reconstructs rule objects" do
|
21
|
+
data = JSON.parse(DATASTORE_JSON)
|
22
|
+
ds = Datastore.new data
|
9
23
|
ds.rules.data.should eql data["rules"]
|
24
|
+
end
|
25
|
+
it "properly reconstructs scene objects" do
|
26
|
+
data = JSON.parse(DATASTORE_JSON)
|
27
|
+
ds = Datastore.new data
|
10
28
|
ds.scenes.data.should eql data["scenes"]
|
29
|
+
end
|
30
|
+
it "properly reconstructs schedule objects" do
|
31
|
+
data = JSON.parse(DATASTORE_JSON)
|
32
|
+
ds = Datastore.new data
|
11
33
|
ds.schedules.data.should eql data["schedules"]
|
34
|
+
end
|
35
|
+
it "properly reconstructs sensor objects" do
|
36
|
+
data = JSON.parse(DATASTORE_JSON)
|
37
|
+
ds = Datastore.new data
|
12
38
|
ds.sensors.data.should eql data["sensors"]
|
13
|
-
|
39
|
+
end
|
40
|
+
it "properly reconstructs config object" do
|
41
|
+
data = JSON.parse(DATASTORE_JSON)
|
42
|
+
ds = Datastore.new data
|
43
|
+
ds.config.data.should eql data["config"]
|
14
44
|
end
|
15
45
|
end
|
16
46
|
|
@@ -19,7 +49,7 @@ DATASTORE_JSON = %Q{
|
|
19
49
|
"lights": {
|
20
50
|
"1": {
|
21
51
|
"state": {
|
22
|
-
"on":
|
52
|
+
"on": false,
|
23
53
|
"bri": 254,
|
24
54
|
"hue": 34495,
|
25
55
|
"sat": 232,
|
@@ -31,7 +61,7 @@ DATASTORE_JSON = %Q{
|
|
31
61
|
"ct": 155,
|
32
62
|
"alert": "none",
|
33
63
|
"colormode": "xy",
|
34
|
-
"reachable":
|
64
|
+
"reachable": false
|
35
65
|
},
|
36
66
|
"type": "Extended color light",
|
37
67
|
"name": "Hue Lamp 1",
|
@@ -227,7 +257,7 @@ DATASTORE_JSON = %Q{
|
|
227
257
|
"name": "Philips hue",
|
228
258
|
"zigbeechannel": 25,
|
229
259
|
"mac": "00:11:22:33:44:55",
|
230
|
-
"dhcp":
|
260
|
+
"dhcp": false,
|
231
261
|
"ipaddress": "192.168.1.27",
|
232
262
|
"netmask": "255.255.255.0",
|
233
263
|
"gateway": "192.168.1.1",
|
@@ -269,7 +299,7 @@ DATASTORE_JSON = %Q{
|
|
269
299
|
"notify": false
|
270
300
|
},
|
271
301
|
"linkbutton": false,
|
272
|
-
"portalservices":
|
302
|
+
"portalservices": false,
|
273
303
|
"portalconnection": "connected",
|
274
304
|
"portalstate": {
|
275
305
|
"signedon": true,
|
@@ -320,7 +350,7 @@ DATASTORE_JSON = %Q{
|
|
320
350
|
"4",
|
321
351
|
"5"
|
322
352
|
],
|
323
|
-
"active":
|
353
|
+
"active": false
|
324
354
|
},
|
325
355
|
"da01b1eaf-on-0": {
|
326
356
|
"name": "Purple on 0",
|
data/spec/group_spec.rb
CHANGED
@@ -2,22 +2,152 @@ require 'lights'
|
|
2
2
|
|
3
3
|
describe Group do
|
4
4
|
it "properly parses input parameters" do
|
5
|
-
data =
|
6
|
-
"key1" => "value 1",
|
7
|
-
"key2" => "value 2",
|
8
|
-
}
|
5
|
+
data = JSON.parse(GROUPS_JSON)["1"]
|
9
6
|
group = Group.new(1,data)
|
10
7
|
group.id.should eql 1
|
11
|
-
group.
|
8
|
+
group.name.should eql "Ceiling light"
|
9
|
+
group.type.should eql "LightGroup"
|
10
|
+
group.lights.should eql ["1","2","3","4"]
|
12
11
|
end
|
13
12
|
|
14
13
|
it "properly reconstucts object hash" do
|
15
|
-
data =
|
16
|
-
"key1" => "value 1",
|
17
|
-
"key2" => "value 2",
|
18
|
-
}
|
14
|
+
data = JSON.parse(GROUPS_JSON)["1"]
|
19
15
|
group = Group.new(1,data)
|
20
16
|
group.id.should eql 1
|
21
17
|
group.data.should eql data
|
22
18
|
end
|
23
19
|
end
|
20
|
+
|
21
|
+
GROUPS_JSON = %Q{
|
22
|
+
{
|
23
|
+
"1": {
|
24
|
+
"name": "Ceiling light",
|
25
|
+
"lights": [
|
26
|
+
"1",
|
27
|
+
"2",
|
28
|
+
"3",
|
29
|
+
"4"
|
30
|
+
],
|
31
|
+
"type": "LightGroup",
|
32
|
+
"action": {
|
33
|
+
"on": true,
|
34
|
+
"bri": 254,
|
35
|
+
"hue": 56100,
|
36
|
+
"sat": 232,
|
37
|
+
"effect": "none",
|
38
|
+
"xy": [
|
39
|
+
0.4119,
|
40
|
+
0.1949
|
41
|
+
],
|
42
|
+
"ct": 293,
|
43
|
+
"colormode": "xy"
|
44
|
+
}
|
45
|
+
},
|
46
|
+
"2": {
|
47
|
+
"name": "Lamp",
|
48
|
+
"lights": [
|
49
|
+
"5"
|
50
|
+
],
|
51
|
+
"type": "LightGroup",
|
52
|
+
"action": {
|
53
|
+
"on": true,
|
54
|
+
"bri": 254,
|
55
|
+
"hue": 56100,
|
56
|
+
"sat": 232,
|
57
|
+
"effect": "none",
|
58
|
+
"xy": [
|
59
|
+
0.4119,
|
60
|
+
0.1949
|
61
|
+
],
|
62
|
+
"ct": 293,
|
63
|
+
"colormode": "xy"
|
64
|
+
}
|
65
|
+
},
|
66
|
+
"3": {
|
67
|
+
"name": "HueCraft_Ambiance1",
|
68
|
+
"lights": [
|
69
|
+
"1",
|
70
|
+
"2"
|
71
|
+
],
|
72
|
+
"type": "LightGroup",
|
73
|
+
"action": {
|
74
|
+
"on": true,
|
75
|
+
"bri": 254,
|
76
|
+
"hue": 56100,
|
77
|
+
"sat": 232,
|
78
|
+
"effect": "none",
|
79
|
+
"xy": [
|
80
|
+
0.4119,
|
81
|
+
0.1949
|
82
|
+
],
|
83
|
+
"ct": 293,
|
84
|
+
"colormode": "xy"
|
85
|
+
}
|
86
|
+
},
|
87
|
+
"4": {
|
88
|
+
"name": "HueCraft_Ambiance2",
|
89
|
+
"lights": [
|
90
|
+
"3",
|
91
|
+
"4"
|
92
|
+
],
|
93
|
+
"type": "LightGroup",
|
94
|
+
"action": {
|
95
|
+
"on": true,
|
96
|
+
"bri": 254,
|
97
|
+
"hue": 56100,
|
98
|
+
"sat": 232,
|
99
|
+
"effect": "none",
|
100
|
+
"xy": [
|
101
|
+
0.4119,
|
102
|
+
0.1949
|
103
|
+
],
|
104
|
+
"ct": 293,
|
105
|
+
"colormode": "xy"
|
106
|
+
}
|
107
|
+
},
|
108
|
+
"5": {
|
109
|
+
"name": "HueCraft_Effect1",
|
110
|
+
"lights": [
|
111
|
+
"5"
|
112
|
+
],
|
113
|
+
"type": "LightGroup",
|
114
|
+
"action": {
|
115
|
+
"on": true,
|
116
|
+
"bri": 254,
|
117
|
+
"hue": 56100,
|
118
|
+
"sat": 232,
|
119
|
+
"effect": "none",
|
120
|
+
"xy": [
|
121
|
+
0.4119,
|
122
|
+
0.1949
|
123
|
+
],
|
124
|
+
"ct": 293,
|
125
|
+
"colormode": "xy"
|
126
|
+
}
|
127
|
+
},
|
128
|
+
"6": {
|
129
|
+
"name": "HueCraft_HueCraft",
|
130
|
+
"lights": [
|
131
|
+
"1",
|
132
|
+
"2",
|
133
|
+
"3",
|
134
|
+
"4",
|
135
|
+
"5"
|
136
|
+
],
|
137
|
+
"type": "LightGroup",
|
138
|
+
"action": {
|
139
|
+
"on": true,
|
140
|
+
"bri": 254,
|
141
|
+
"hue": 56100,
|
142
|
+
"sat": 232,
|
143
|
+
"effect": "none",
|
144
|
+
"xy": [
|
145
|
+
0.4119,
|
146
|
+
0.1949
|
147
|
+
],
|
148
|
+
"ct": 293,
|
149
|
+
"colormode": "xy"
|
150
|
+
}
|
151
|
+
}
|
152
|
+
}
|
153
|
+
}
|
data/spec/rule_spec.rb
CHANGED