/
haunted_house.rb
45 lines (37 loc) · 1.02 KB
/
haunted_house.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
require "openssl"
require "open-uri"
require "rexml/document"
require "haunted_house/device"
# FIXME: this is dangerous
OpenSSL::SSL.send(:remove_const, :VERIFY_PEER)
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
class HauntedHouse
def initialize(address, user, password)
@address = address
@user = user
@password = password
@devices = [ ]
lookup_devices
end
def request(url)
open( "#{@address}/rest/#{url}",
:http_basic_authentication => [@user, @password] ) do |data|
yield data if block_given?
end
end
def device(name)
@devices.find { |device| device.name == name }
end
private
def lookup_devices
request("nodes") do |data|
xml = REXML::Document.new(data)
xml.elements.each("nodes/node") do |node|
if (name = node.elements["name"].text rescue nil) and
(address = node.elements["address"].text rescue nil)
@devices << Device.new(self, name, address)
end
end
end
end
end