class Sonos::Device::Base
Attributes
group[R]
group_master[RW]
hardware_version[R]
icon[R]
ip[R]
mac_address[R]
model_number[R]
name[R]
serial_number[R]
services[R]
software_version[R]
uid[R]
zone_type[R]
Public Class Methods
detect(ip)
click to toggle source
# File lib/sonos/device/base.rb, line 11 def self.detect(ip) data = retrieve_information(ip) model_number = data[:model_number] # TODO: Clean up if Accessory.models.keys.include?(model_number.to_sym) Accessory.new(ip, data) elsif Speaker.models.keys.include?(model_number.to_sym) Speaker.new(ip, data) else raise ArgumentError.new("#{data[:model_number]} not supported") end end
new(ip, data = nil)
click to toggle source
# File lib/sonos/device/base.rb, line 25 def initialize(ip, data = nil) @ip = ip if data.nil? self.data = Base.retrieve_information(ip) else self.data = data end end
Protected Class Methods
parse_description(doc)
click to toggle source
Get information about the device
# File lib/sonos/device/base.rb, line 83 def self.parse_description(doc) { name: doc.xpath('/xmlns:root/xmlns:device/xmlns:roomName').inner_text, uid: doc.xpath('/xmlns:root/xmlns:device/xmlns:UDN').inner_text, serial_number: doc.xpath('/xmlns:root/xmlns:device/xmlns:serialNum').inner_text, software_version: doc.xpath('/xmlns:root/xmlns:device/xmlns:hardwareVersion').inner_text, hardware_version: doc.xpath('/xmlns:root/xmlns:device/xmlns:softwareVersion').inner_text, zone_type: doc.xpath('/xmlns:root/xmlns:device/xmlns:zoneType').inner_text, model_number: doc.xpath('/xmlns:root/xmlns:device/xmlns:modelNumber').inner_text, services: doc.xpath('/xmlns:root/xmlns:device/xmlns:serviceList/xmlns:service/xmlns:serviceId'). collect(&:inner_text) } end
retrieve_information(ip)
click to toggle source
# File lib/sonos/device/base.rb, line 77 def self.retrieve_information(ip) url = "http://#{ip}:#{Sonos::PORT}/xml/device_description.xml" parse_description(Nokogiri::XML(open(url))) end
Public Instance Methods
data()
click to toggle source
# File lib/sonos/device/base.rb, line 46 def data { name: @name, uid: @uid, serial_number: @serial_number, software_version: @software_version, hardware_version: @hardware_version, zone_type: @zone_type, model_number: @model_number, services: @services } end
data=(data)
click to toggle source
# File lib/sonos/device/base.rb, line 35 def data=(data) @name = data[:name] @uid = data[:uid] @serial_number = data[:serial_number] @software_version = data[:software_version] @hardware_version = data[:hardware_version] @zone_type = data[:zone_type] @model_number = data[:model_number] @services = data[:services] end
model()
click to toggle source
Get the device’s model @return [String] a string representation of the device’s model
# File lib/sonos/device/base.rb, line 61 def model self.class.models[@model_number.to_sym] end
speaker?()
click to toggle source
Can this device play music? @return [Boolean] a boolean indicating if it can play music
# File lib/sonos/device/base.rb, line 67 def speaker? false end
Protected Instance Methods
parse_response(response)
click to toggle source
# File lib/sonos/device/base.rb, line 73 def parse_response(response) response.success? ? :success : :failed end