module OpenID::Yadis::XRI
Constants
- XRI_AUTHORITIES
-
The ‘(’ is for cross-reference authorities, and hopefully has a matching ‘)’ somewhere.
Public Class Methods
Source
# File lib/openid/yadis/xrires.rb, line 77 def self.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
Source
# File lib/openid/yadis/xri.rb, line 33 def self.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
Note this is not not idempotent, so do not apply this more than once. XRI Syntax section 2.3.2
Source
# File lib/openid/yadis/xri.rb, line 11 def self.identifier_scheme(identifier) if (!identifier.nil? and identifier.length > 0 and (identifier.match('^xri://') or XRI_AUTHORITIES.member?(identifier[0].chr))) return :xri else return :uri end end
Source
# File lib/openid/yadis/xri.rb, line 53 def self.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
RFC 3987 section 3.1
Source
# File lib/openid/yadis/xri.rb, line 81 def self.make_xri(xri) if xri.index('xri://') != 0 xri = 'xri://' + xri end return xri end
Source
# File lib/openid/yadis/xri.rb, line 25 def self.to_iri_normal(xri) iri = xri.dup iri.insert(0, 'xri://') if not iri.match('^xri://') return escape_for_iri(iri) end
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
Source
Source
# File lib/openid/yadis/xrires.rb, line 69 def self.urlencode(args) a = [] args.each do |key, val| a << (CGI::escape(key) + "=" + CGI::escape(val)) end a.join("&") end