class XRI::ProxyResolver

Constants

DEFAULT_PROXY

Public Class Methods

new(proxy_url=nil) click to toggle source
# File lib/yadis/xrires.rb, line 14
def initialize(proxy_url=nil)
  if proxy_url
    @proxy_url = proxy_url
  else
    @proxy_url = DEFAULT_PROXY
  end

  @proxy_url += '/' unless @proxy_url.match('/$')
end

Public Instance Methods

query(xri, service_types) click to toggle source
# File lib/yadis/xrires.rb, line 42
def query(xri, service_types)
  # these can be query args or http headers, needn't be both.
  # headers = {'Accept' => 'application/xrds+xml;sep=true'}
  fetcher = NetHTTPFetcher.new
  services = service_types.collect { |service_type|
    url = self.query_url(xri, service_type)
    response = fetcher.get(url)
    raise XRIHTTPError, "Could not fetch #{xri}" if response.nil?
    xrds = XRDS.new(response[1].body)
    return xrds.services unless xrds.nil?
  }
  # TODO:
  #  * If we do get hits for multiple service_types, we're almost 
  #    certainly going to have duplicated service entries and 
  #    broken priority ordering.
  services = services.inject([]) { |flatter, some_services|
    flatter.concat(some_services) unless some_services.nil?
  }
end
query_url(xri, service_type=nil) click to toggle source
# File lib/yadis/xrires.rb, line 24
def query_url(xri, service_type=nil)
  # URI normal form has a leading xri://, but we need to strip
  # that off again for the QXRI.  This is under discussion for
  # XRI Resolution WD 11.
  # 
  qxri = XRI.to_uri_normal(xri)[6..-1]
  hxri = @proxy_url + qxri
  args = {'_xrd_r' => 'application/xrds+xml'}
  if service_type
    args['_xrd_t'] = service_type
  else
    # don't perform service endpoint selection 
    args['_xrd_r'] += ';sep=false'
  end

  return XRI.append_args(hxri, args)
end