Namespace

XRI

Public Class Methods

append_args(url, args) click to toggle source
# File lib/yadis/xrires.rb, line 71
def XRI.append_args(url, args)
  return url if args.length == 0
  
  # rstrip question marks
  rstripped = url.dup
  while rstripped[-1].chr == '?'
    rstripped = rstripped[0...rstripped.length-1]
  end
  
  if rstripped.index('?')
    sep = '&'
  else
    sep = '?'
  end
  
  return url + sep + XRI.urlencode(args)
end
escape_for_iri(xri) click to toggle source

Note this is not not idempotent, so do not apply this more than once. XRI Syntax section 2.3.2

# File lib/yadis/xri.rb, line 30
def XRI.escape_for_iri(xri)
  esc = xri.dup
  # encode all %
  esc.gsub!(/%/, '%25')
  esc.gsub!(/\((.*?)\)/) { |xref_match|
    xref_match.gsub(/[\/\?\#]/) { |char_match|
      CGI::escape(char_match)
    }
  }
  return esc
end
identifier_scheme(identifier) click to toggle source
# File lib/yadis/xri.rb, line 10
def XRI.identifier_scheme(identifier)
  if identifier.match('^xri://') or XRI_AUTHORITIES.member?(identifier[0].chr)
    return :xri
  else
    return :uri
  end
end
iri_to_uri(iri) click to toggle source

RFC 3987 section 3.1

# File lib/yadis/xri.rb, line 51
def XRI.iri_to_uri(iri)
  uri = iri.dup
  # for char in ucschar or iprivate
  # convert each char to %HH%HH%HH (as many %HH as octets)
  return uri
end
to_iri_normal(xri) click to toggle source

Transform an XRI reference to an IRI reference. Note this is not not idempotent, so do not apply this to an identifier more than once. XRI Syntax section 2.3.1

# File lib/yadis/xri.rb, line 22
def XRI.to_iri_normal(xri)
  iri = xri.dup
  iri.insert(0, 'xri://') if not iri.match('^xri://')
  return escape_for_iri(iri)
end
to_uri_normal(xri) click to toggle source

Transform an XRI reference to a URI reference. Note this is not not idempotent, so do not apply this to an identifier more than once. XRI Syntax section 2.3.1

# File lib/yadis/xri.rb, line 46
def XRI.to_uri_normal(xri)
  return iri_to_uri(to_iri_normal(xri))
end
urlencode(args) click to toggle source
# File lib/yadis/xrires.rb, line 63
def XRI.urlencode(args)
  a = []
  args.each do |key, val|
    a << (CGI::escape(key) + "=" + CGI::escape(val))
  end
  a.join("&")
end

Public Instance Methods

make_xri(xri) click to toggle source
# File lib/yadis/xri.rb, line 80
def make_xri(xri)
  if xri.index('xri://') != 0
    xri = 'xri://' + xri
  end
  return xri
end
provider_is_authoritative(provider_id, canonical_id) click to toggle source
# File lib/yadis/xri.rb, line 58
def provider_is_authoritative(provider_id, canonical_id)
  lastbang = canonical_id.rindex('!')
  return false unless lastbang
  parent = canonical_id[0...lastbang]
  return parent == provider_id
end
root_authority(xri) click to toggle source
# File lib/yadis/xri.rb, line 65
def root_authority(xri)
  xri = xri[6..-1] if xri.index('xri://') == 0
  authority = xri.split('/', 2)[0]
  if authority[0].chr == '('
    root = authority[0...authority.index(')')+1]
  elsif XRI_AUTHORITIES.member?(authority[0].chr)
    root = authority[0].chr
  else
    root = authority.split(/[!*]/)[0]
  end
  
  make_xri(root)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.