guh 0.0.3 → 0.0.4

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: fa6cbfff073870eabcc433d92c9f92d48cb8bd0e
4
- data.tar.gz: 34762aeabd46d3c0f8d7aa0aaaf6710d5f5c779f
3
+ metadata.gz: 4960d036bde4cfe611b3c45cbdff866a678ee12e
4
+ data.tar.gz: 74da9d4b1d55d32fb27894c106a0bd181a2220bb
5
5
  SHA512:
6
- metadata.gz: 476d41353de9a87a7ee4585d9317b005e5a837ceccd34f0341c929c1ed0942b7e152387ab35b8382e1db81bbb97fd66ddd6819f403e7ea3a3d622d0c5c7446cd
7
- data.tar.gz: 97c5ff55e9855e436e411905e4c628fee5e66193f214742f102380ec721347403e82df861884f248401dd61dbdeb55077ac588ddb50a5c3825af727385d01f54
6
+ metadata.gz: df55cfb07c687984a6b11991c24d93b0a238c2cd67553c8637ee388a0f078d184def691c387b9072e139dac036c4ae3b976b8d0589541d4148bfa924752a0628
7
+ data.tar.gz: 4d3ce2ff17641939e8e02b91fcd00774afd9bc869e206cc3de513ac4146f20b21ea62b8c5c97a68e7de6f6bd8c4153b831e96b10a97ffa18fe610783f39eb0be
data/Rakefile CHANGED
@@ -12,6 +12,12 @@ task :console do
12
12
  require 'irb/completion'
13
13
  require 'pp'
14
14
  require 'guh'
15
+
16
+ Guh::Base.configure do |c|
17
+ c.guh_ip_address = '192.168.178.31'
18
+ c.guh_port = 1234
19
+ end
20
+
15
21
  ARGV.clear
16
22
  IRB.start
17
23
  end
data/lib/guh/base.rb CHANGED
@@ -70,7 +70,7 @@ module Guh
70
70
  #
71
71
  # Example:
72
72
  #
73
- # Guh.configure do |config|
73
+ # Guh::Base.configure do |config|
74
74
  # config.guh_ip_address = 10.0.0.1
75
75
  # config.guh_port = 6789
76
76
  # end
data/lib/guh/device.rb CHANGED
@@ -2,11 +2,21 @@ module Guh
2
2
  ##
3
3
  # This class wraps everything related to configured Devices.
4
4
  #
5
+ # TODO write up the creation of a normal device
6
+ #
7
+ # TODO write up the creation of a discoverable device.
8
+ #
5
9
  class Device < Base
6
10
 
7
11
 
8
12
  ##
9
13
  #
14
+ # Returns a specific configured Device.
15
+ #
16
+ # Example:
17
+ #
18
+ # Guh::Device.find('{427a4a9a-c107-446f-aadf-f1b2abad607d1}')
19
+ #
10
20
  def self.find(id)
11
21
  device = self.all.detect{|d| d['id']==id}
12
22
 
@@ -30,6 +40,31 @@ module Guh
30
40
  return response['devices']
31
41
  end
32
42
 
43
+ ##
44
+ #
45
+ # Returns a list of recently discovered devices.
46
+ #
47
+ # Example:
48
+ #
49
+ # Guh::Device.discover("{985195aa-17ad-4530-88a4-cdd753d747d7}", [{name: 'location', value: 'Salzburg'}])
50
+ #
51
+ def self.discover(device_class_id, discovery_params = {})
52
+ response = get({
53
+ id: generate_request_id,
54
+ method: "Devices.GetDiscoveredDevices",
55
+ params: {
56
+ deviceClassId: device_class_id,
57
+ discoveryParams: discovery_params
58
+ }
59
+ })
60
+
61
+ if response['success'] == true
62
+ return response['deviceDescriptors']
63
+ else
64
+ raise Guh::ResponseError, response['errorMessage']
65
+ end
66
+ end
67
+
33
68
  ##
34
69
  #
35
70
  # Creates a configured device and returns it's ID.
@@ -49,17 +84,41 @@ module Guh
49
84
  # channel10: false
50
85
  # })
51
86
  #
87
+ # To create a discovered device you have to provide a descriptor ID in the params:
88
+ #
89
+ # Guh::Device.add("{985195aa-17ad-4530-88a4-cdd753d747d7}", {descriptorId: "{727a4a9a-c187-446f-aadf-f1b2220607d1}"})
90
+ #
52
91
  def self.add(device_class_id, params)
92
+ device_class = Guh::DeviceClass.find(device_class_id)
93
+
94
+ case device_class['createMethod']
95
+ when 'CreateMethodUser'
96
+ add_configured_device(device_class_id, params)
97
+ when 'CreateMethodDiscovery'
98
+ add_discovered_device(device_class_id, params[:descriptorId])
99
+ when 'CreateMethodAuto'
100
+ # Nothing to do here
101
+ # TODO should we raise an exception?
102
+ end
103
+ end
104
+
105
+ ##
106
+ #
107
+ # Finishes a pairing process with a device. The user might have to push a button on the device.
108
+ #
109
+ # The +pairing_transaction_id+ can be obtained with the +add_discovered_device()+ method.
110
+ #
111
+ def self.confirm_pairing(pairing_transaction_id)
53
112
  response = get({
54
113
  id: generate_request_id,
55
- method: "Devices.AddConfiguredDevice",
114
+ method: "Devices.PairDevice",
56
115
  params: {
57
- deviceClassId: device_class_id,
58
- deviceParams: params
116
+ pairingTransactionId: pairing_transaction_id
59
117
  }
60
118
  })
119
+
61
120
  if response['success']==true
62
- return response['deviceId']
121
+ return response
63
122
  else
64
123
  raise Guh::ArgumentError, response['errorMessage']
65
124
  end
@@ -100,5 +159,68 @@ module Guh
100
159
  self.all.length
101
160
  end
102
161
 
162
+ private
163
+
164
+ def self.add_configured_device(device_class_id, params)
165
+ response = get({
166
+ id: generate_request_id,
167
+ method: "Devices.AddConfiguredDevice",
168
+ params: {
169
+ deviceClassId: device_class_id,
170
+ deviceParams: params
171
+ }
172
+ })
173
+
174
+ if response['success']==true
175
+ return response['deviceId']
176
+ else
177
+ raise Guh::ArgumentError, response['errorMessage']
178
+ end
179
+ end
180
+
181
+ def self.add_discovered_device(device_class_id, descriptor_id)
182
+ device_class = Guh::DeviceClass.find(device_class_id)
183
+
184
+ if device_class['setupMethod'] == 'SetupMethodJustAdd'
185
+ add_discovered_device_just_add(device_class_id, descriptor_id)
186
+ else
187
+ add_discovered_device_pair(device_class_id, descriptor_id)
188
+ end
189
+ end
190
+
191
+ def self.add_discovered_device_just_add(device_class_id, descriptor_id)
192
+ response = get({
193
+ id: generate_request_id,
194
+ method: "Devices.AddConfiguredDevice",
195
+ params: {
196
+ deviceClassId: device_class_id,
197
+ deviceDescriptorId: descriptor_id
198
+ }
199
+ })
200
+
201
+ if response['success']==true
202
+ return response['deviceId']
203
+ else
204
+ raise Guh::ArgumentError, response['errorMessage']
205
+ end
206
+ end
207
+
208
+ def self.add_discovered_device_pair(device_class_id, descriptor_id)
209
+ response = get({
210
+ id: generate_request_id,
211
+ method: "Devices.PairDevice",
212
+ params: {
213
+ deviceClassId: device_class_id,
214
+ deviceDescriptorId: descriptor_id
215
+ }
216
+ })
217
+
218
+ if response['success']==true
219
+ return response
220
+ else
221
+ raise Guh::ArgumentError, response['errorMessage']
222
+ end
223
+ end
224
+
103
225
  end
104
226
  end
@@ -47,24 +47,5 @@ module Guh
47
47
  end
48
48
  end
49
49
 
50
- ##
51
- #
52
- def self.discover(id, options={})
53
- params = {deviceClassId: id}
54
- params['discoveryParams'] = options
55
-
56
- response = get({
57
- id: generate_request_id,
58
- method: "Devices.GetDiscoveredDevices",
59
- params: params
60
- })
61
-
62
- if response['success']
63
- return response['deviceDescriptors']
64
- else
65
- raise ResponseError, response['errorMessage']
66
- end
67
- end
68
-
69
50
  end
70
51
  end
data/lib/guh/vendor.rb CHANGED
@@ -3,6 +3,17 @@ module Guh
3
3
  # This class wraps everything related to Vendors.
4
4
  #
5
5
  class Vendor < Base
6
+ ##
7
+ #
8
+ # Retrieves a specific vendor
9
+ #
10
+ # Example:
11
+ #
12
+ # Guh::Vendor.find('{b241f7f5-8153-4a72-b260-f62beadc2d19}')
13
+ #
14
+ def self.find(vendor_id)
15
+ all.detect { |vendor| vendor['id'] == vendor_id }
16
+ end
6
17
 
7
18
  ##
8
19
  #
data/lib/guh/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Guh
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/spec/helper.rb CHANGED
@@ -9,7 +9,7 @@ RSpec.configure do |config|
9
9
 
10
10
  config.before(:all) do
11
11
  Guh::Base.configure do |c|
12
- c.guh_ip_address = "127.0.0.1"
12
+ c.guh_ip_address = '192.168.178.31'
13
13
  c.guh_port = 1234
14
14
  end
15
15
 
@@ -33,16 +33,4 @@ describe Guh::DeviceClass do
33
33
  end
34
34
  end
35
35
 
36
- it "should discover the openweathermap" do
37
-
38
- device_class_id = "{985195aa-17ad-4530-88a4-cdd753d747d7}"
39
-
40
- pending "TODO wait until issue #13 is fixed"
41
-
42
- # device_descriptors = Guh::DeviceClass.discover(device_class_id, [
43
- # {name: 'location', value: ''}
44
- # ])
45
-
46
- end
47
-
48
36
  end
@@ -19,15 +19,15 @@ describe Guh::Device do
19
19
 
20
20
  -> {
21
21
  response = Guh::Device.add("{308ae6e6-38b3-4b3a-a513-3199da2764f8}", [
22
- {name: 'channel1', value: true},
23
- {name: 'channel2', value: false},
24
- {name: 'channel3', value: false},
25
- {name: 'channel4', value: false},
26
- {name: 'channel5', value: false},
27
- {name: 'A', value: false},
28
- {name: 'B', value: false},
29
- {name: 'C', value: false},
30
- {name: 'D', value: false},
22
+ {name: 'channel1', value: true},
23
+ {name: 'channel2', value: false},
24
+ {name: 'channel3', value: false},
25
+ {name: 'channel4', value: false},
26
+ {name: 'channel5', value: false},
27
+ {name: 'A', value: false},
28
+ {name: 'B', value: false},
29
+ {name: 'C', value: false},
30
+ {name: 'D', value: false},
31
31
  {name: 'E', value: false}
32
32
  ])
33
33
  }.should_not raise_error
@@ -50,7 +50,7 @@ describe Guh::Device do
50
50
 
51
51
  device_id.should match(/^\{[a-z0-9\-]+\}$/i)
52
52
 
53
- Guh::Device.remove(device_id).should be_true
53
+ Guh::Device.remove(device_id).should be_truthy
54
54
 
55
55
  Guh::Device.find(device_id).should be_nil
56
56
  end
@@ -61,4 +61,12 @@ describe Guh::Device do
61
61
  }.should raise_error
62
62
  end
63
63
 
64
+ it "should discover the openweathermap" do
65
+ device_class_id = "{985195aa-17ad-4530-88a4-cdd753d747d7}"
66
+
67
+ device_descriptors = Guh::Device.discover(device_class_id, [{name: 'location', value: 'Salzburg'}])
68
+
69
+ response = Guh::Device.add(device_class_id, {descriptorId: device_descriptors.first['id']})
70
+ end
71
+
64
72
  end
@@ -11,7 +11,11 @@ describe Guh::Vendor do
11
11
  end
12
12
 
13
13
  it "should return information about a specific vendor" do
14
- pending "TODO: Implement Guh::Vendor.find('{abc}')"
14
+ vendor_id = '{b241f7f5-8153-4a72-b260-f62beadc2d19}'
15
+
16
+ vendor = Guh::Vendor.find(vendor_id)
17
+
18
+ vendor['id'].should eq(vendor_id)
15
19
  end
16
20
 
17
21
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christoph Edthofer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-03 00:00:00.000000000 Z
12
+ date: 2014-10-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json