class Polycom::Pusher

Attributes

ip_address[RW]
password[RW]
username[RW]

Public Class Methods

new(args) click to toggle source
# File lib/polycom/pusher.rb, line 10
def initialize(args)
  args.each do |k, v|
    instance_variable_set("@#{k}", v) unless v.nil?
  end
end

Public Instance Methods

send(h) click to toggle source
# File lib/polycom/pusher.rb, line 17
def send(h)
  priority = h.fetch(:priority, :critical).to_s.capitalize
  data = h.fetch(:data, nil)
  url = h.fetch(:url, nil)
  
  if data.nil? && url.nil?
    raise "Either :data or :url must be passed to this method"
  end
  
  push_data(priority, data) unless data.nil?
  push_url(priority, url) unless url.nil?
end

Private Instance Methods

push_data(priority, data) click to toggle source
# File lib/polycom/pusher.rb, line 33
def push_data(priority, data)
  resp = send_http "<PolycomIPPhone><Data priority=\"#{priority}\">#{data}</Data></PolycomIPPhone>"
  raise "Polycom phone at #{@ip_address} said: [#{resp.code}] #{resp.message}" unless resp.code == '200'
end
push_url(priority, url) click to toggle source
# File lib/polycom/pusher.rb, line 39
def push_url(priority, url)
  resp = send_http "<PolycomIPPhone><URL priority=\"#{priority}\">#{url}</URL></PolycomIPPhone>", true
  raise "Polycom phone at #{@ip_address} said: [#{resp.code}] #{resp.message}" unless resp.code == '200'
end
send_http(data, url = false) click to toggle source
# File lib/polycom/pusher.rb, line 45
def send_http(data, url = false)
  digest_auth = Net::HTTP::DigestAuth.new
    
  uri = URI.parse("http://#{@ip_address}/push")
  uri.user = @username
  uri.password = @password

  h = Net::HTTP.new uri.host, uri.port
  req = Net::HTTP::Post.new uri.request_uri
  res = h.request req

  auth = digest_auth.auth_header(uri, res['www-authenticate'], 'POST')
  req = Net::HTTP::Post.new(uri.request_uri)
  req.add_field 'Authorization', auth
  req.add_field 'Content-Type', 'application/x-com-polycom-spipx' if url
  req.body = data

  resp = h.request(req)
end