lights 0.8.16 → 0.8.17

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTdkYTA0Yzg4MzdkNjk4Nzc0YzkzMWI4ODQ2YWJmMWQ4MjhkMTRiMw==
4
+ ZDBiNzRiZTg2NjE1ZmI3ZmY1OTMwZmUzY2E2MmYwOWVjMTM1YWRjMA==
5
5
  data.tar.gz: !binary |-
6
- OTAwNTU4ZTM1NDAzZDkzNmI5NDA3MGVlMDllOGI4NzNhODM0YzY3Ng==
6
+ YzBmOGUyODgzNWIyMWNlYzc1MmM0YTllY2MyN2ExZWZhZTY0NmRiMA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- Mjk2MzZiN2M5ZGMzYjU4N2VmNmJkN2QzMDQ5NmMxMTVkNWM3NDUyMzFiY2Nj
10
- NmUwZDgxOGU3ODlhMzA4NjVhNmJhNzE4ZTI0MzVjMDBmNmNkZjBmYjVlNWU2
11
- ZmFiZDBkOGMwNDQ3MGVhMjJmMTFjOTVhY2ZiMmQ3Y2EyNTAwZTI=
9
+ MWM5ZTQ3OTllZTk1YmRjZDljN2I5ZmQxYTFmMGRiYTc1OTMzZDczZTlhOGFh
10
+ MDA2ZTRjYWI4ZWUxYTAzMzY2NWU1NWQ2YWFkZjA1MTU0OWZjOGZkNmViNTVk
11
+ NTIyMDdhMWI4MzhmY2E5ODFkZmQ2OGE3M2Q1YTgyYmRiN2M1YjE=
12
12
  data.tar.gz: !binary |-
13
- YmY3NWM5ZTk3MDM4YjFjODE5Zjk2NGRhYWQxY2RjZWQ3MDYyYjEyMDQ3OWIz
14
- MDZlODExMWEyNzc4ODliY2Q5YjlkMDk3OTM1NmY0NDA4MzlhZjRhMjMwZTkw
15
- OWI5NmUyNzNiZWYwNGExNzU4ZjI5MTNlYTkzM2RmNDI4NTBjYzM=
13
+ YWQ3ODQzNGM3NzQ4YzM5NzFjMGE4ZGM4NzBhMDgzNDUwYmMwNTgxNDc0NzNh
14
+ NGNmNmJkMDc2Y2FhYTllM2Y0MTEwZTAwZjk1ZGY4NDg4NDE1OTg1ZTM1YzBh
15
+ N2FkZGVhNTdhM2Y4MDdmMTlhNzY4YmJhYmYyZDY4ZThhMGYwMTc=
data/bin/lights CHANGED
@@ -293,6 +293,7 @@ class LightsCli
293
293
  opts.on("-z", "--xy x,y", Array, "Set xy"){|z| options[:xy]=z}
294
294
  opts.on("-l", "--lights 1,2,...N", Array, "Which lights to control"){|l| options[:lights]=l}
295
295
  opts.on("-g", "--groups 1,2,...N", Array, "Which groups to control"){|g| options[:groups]=g}
296
+ opts.on("-S", "--scene <id>", String, "Which scene to recall"){|s| options[:scene]=s}
296
297
  opts.on("-d", "--duration seconds", OptionParser::DecimalInteger, "Transition duration in seconds"){|d| options[:duration]=d}
297
298
  end.parse!
298
299
 
@@ -301,7 +302,8 @@ class LightsCli
301
302
  && !options[:ct] && !options[:brightness] \
302
303
  && !options[:hue] && !options[:saturation] \
303
304
  && !options[:effect] && !options[:alert] \
304
- && !options[:xy] && !options[:color]
305
+ && !options[:xy] && !options[:color] \
306
+ && !options[:scene]
305
307
  puts "Must specify a state to set."
306
308
  bad_args = true
307
309
  end
@@ -312,7 +314,7 @@ class LightsCli
312
314
  end
313
315
  exit 1 if bad_args
314
316
 
315
- s = BulbState.new
317
+ s = GroupState.new
316
318
  if options[:on]
317
319
  s.on = true
318
320
  elsif options[:off]
@@ -350,6 +352,9 @@ class LightsCli
350
352
  if options[:xy]
351
353
  s.xy = options[:xy]
352
354
  end
355
+ if options[:scene]
356
+ s.scene = options[:scene]
357
+ end
353
358
 
354
359
  if options[:lights]
355
360
  set_bulb_state(s,options[:lights])
@@ -442,6 +447,7 @@ begin
442
447
  rescue BridgeConnectException,
443
448
  UsernameException,
444
449
  ResourceUnavailableException,
450
+ ParameterUnavailableException,
445
451
  BulbStateValueOutOfRangeException,
446
452
  BulbStateValueTypeException => e
447
453
  puts e.message
@@ -7,6 +7,7 @@ require 'json'
7
7
  require 'lights/bridge'
8
8
  require 'lights/exception'
9
9
  require 'lights/datastore'
10
+ require 'lights/groupstate'
10
11
  require 'lights/loggerconfig'
11
12
 
12
13
  class Lights
@@ -156,6 +157,8 @@ private
156
157
  raise UsernameException
157
158
  when 3
158
159
  raise ResourceUnavailableException, result["error"]["description"]
160
+ when 6
161
+ raise ParameterUnavailableException, result["error"]["description"]
159
162
  when 101
160
163
  raise BridgeConnectException
161
164
  else
@@ -180,27 +183,39 @@ private
180
183
  @logger.debug "==> PUT: #{path}"
181
184
  @logger.debug data.to_json
182
185
  response = @http.put( "/api/#{@username}/#{path}", data.to_json )
186
+ result = JSON.parse( response.body )
183
187
  @logger.debug "<== #{response.code}"
184
188
  @logger.debug response.body
185
- JSON.parse response.body
189
+ if result.first.kind_of?(Hash) && result.first.has_key?("error")
190
+ process_error result.first
191
+ end
192
+ result
186
193
  end
187
194
 
188
195
  def post( path, data={} )
189
196
  @logger.debug "==> POST: #{path}"
190
197
  @logger.debug data.to_json
191
198
  response = @http.post( "/api/#{@username}/#{path}", data.to_json )
199
+ result = JSON.parse( response.body )
192
200
  @logger.debug "<== #{response.code}"
193
201
  @logger.debug response.body
194
- JSON.parse response.body
202
+ if result.first.kind_of?(Hash) && result.first.has_key?("error")
203
+ process_error result.first
204
+ end
205
+ result
195
206
  end
196
207
 
197
208
  def delete( path )
198
209
  @logger.debug "==> DELETE: #{path}"
199
210
  request = Net::HTTP::Delete.new( "/api/#{@username}/#{path}" )
200
211
  response = @http.request request
212
+ result = JSON.parse( response.body )
201
213
  @logger.debug "<== #{response.code}"
202
214
  @logger.debug response.body
203
- JSON.parse response.body
215
+ if result.first.kind_of?(Hash) && result.first.has_key?("error")
216
+ process_error result.first
217
+ end
218
+ result
204
219
  end
205
220
 
206
221
  end
@@ -27,3 +27,9 @@ class ResourceUnavailableException < Exception
27
27
  super
28
28
  end
29
29
  end
30
+
31
+ class ParameterUnavailableException < Exception
32
+ def intialize(msg = "Parameter unavailable")
33
+ super
34
+ end
35
+ end
@@ -0,0 +1,24 @@
1
+ require 'lights/bulbstate'
2
+
3
+ class GroupState < BulbState
4
+ attr_reader :scene
5
+ def initialize(data={})
6
+ super(data)
7
+ set_scene data["scene"] if data["scene"]
8
+ end
9
+
10
+ def scene=(value) set_scene(value) end
11
+ def set_scene(value)
12
+ if value.class == String
13
+ @scene = value
14
+ else
15
+ raise BulbStateValueTypeException, "Scene value has incorrect type. Requires String, got #{value.class}. Was #{value.inspect}"
16
+ end
17
+ end
18
+
19
+ def data
20
+ data = BulbState.instance_method(:data).bind(self).call
21
+ data["scene"] = @scene if @scene
22
+ data
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module LightsConst
2
- VERSION = "0.8.16"
2
+ VERSION = "0.8.17"
3
3
  end
@@ -0,0 +1,29 @@
1
+ require 'lights'
2
+
3
+ describe GroupState do
4
+
5
+ it "properly reconstructs object hash" do
6
+ data = { "scene" => "22978db88-on-0" }
7
+ s = GroupState.new(data)
8
+ s.data.should eql data
9
+ end
10
+
11
+ # SCENE
12
+ it "should properly set scene value in constructor" do
13
+ data = { "scene" => "22978db88-on-0" }
14
+ s = GroupState.new(data)
15
+ s.scene.should eql "22978db88-on-0"
16
+ s.data["scene"].should eql "22978db88-on-0"
17
+ end
18
+ it "should properly set scene value" do
19
+ s = GroupState.new
20
+ s.scene = "22978db88-on-0"
21
+ s.scene.should eq "22978db88-on-0"
22
+ s.data["scene"].should eq "22978db88-on-0"
23
+ end
24
+ it "should raise exception when scene has invalid type" do
25
+ s = GroupState.new
26
+ expect { s.scene = 124 }.to raise_error
27
+ end
28
+ end
29
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lights
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.16
4
+ version: 0.8.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brady Turner
@@ -118,6 +118,7 @@ files:
118
118
  - lib/lights/exception.rb
119
119
  - lib/lights/group.rb
120
120
  - lib/lights/grouplist.rb
121
+ - lib/lights/groupstate.rb
121
122
  - lib/lights/hobject.rb
122
123
  - lib/lights/list.rb
123
124
  - lib/lights/loggerconfig.rb
@@ -140,6 +141,7 @@ files:
140
141
  - spec/features/lights.feature
141
142
  - spec/features/support/setup.rb
142
143
  - spec/group_spec.rb
144
+ - spec/groupstate_spec.rb
143
145
  - spec/rule_spec.rb
144
146
  - spec/scene_spec.rb
145
147
  homepage: http://rubygems.org/gems/lights
@@ -174,5 +176,6 @@ test_files:
174
176
  - spec/features/lights.feature
175
177
  - spec/features/support/setup.rb
176
178
  - spec/group_spec.rb
179
+ - spec/groupstate_spec.rb
177
180
  - spec/rule_spec.rb
178
181
  - spec/scene_spec.rb