class OpenID::NamespaceMap

Maintains a bidirectional map between namespace URIs and aliases.

Public Class Methods

new() click to toggle source
# File lib/openid/message.rb, line 460
def initialize
  @alias_to_namespace = {}
  @namespace_to_alias = {}
  @implicit_namespaces = []
end

Public Instance Methods

add(namespace_uri) click to toggle source

Add this namespace URI to the mapping, without caring what alias it ends up with.

# File lib/openid/message.rb, line 510
def add(namespace_uri)
  # see if this namepace is already mapped to an alias
  _alias = @namespace_to_alias[namespace_uri]
  return _alias if _alias

  # Fall back to generating a numberical alias
  i = 0
  while true
    _alias = 'ext' + i.to_s
    begin
      add_alias(namespace_uri, _alias)
    rescue IndexError
      i += 1
    else
      return _alias
    end
  end

  raise StandardError, 'Unreachable'
end
add_alias(namespace_uri, desired_alias, implicit=false) click to toggle source

Add an alias from this namespace URI to the alias.

# File lib/openid/message.rb, line 475
def add_alias(namespace_uri, desired_alias, implicit=false)
  # Check that desired_alias is not an openid protocol field as
  # per the spec.
  Util.assert(!OPENID_PROTOCOL_FIELDS.include?(desired_alias),
         "#{desired_alias} is not an allowed namespace alias")

  # check that there is not a namespace already defined for the
  # desired alias
  current_namespace_uri = @alias_to_namespace.fetch(desired_alias, nil)
  if current_namespace_uri and current_namespace_uri != namespace_uri
    raise IndexError, "Cannot map #{namespace_uri} to alias #{desired_alias}. #{current_namespace_uri} is already mapped to alias #{desired_alias}"
  end

  # Check that desired_alias does not contain a period as per the
  # spec.
  if desired_alias.is_a?(String)
      Util.assert(desired_alias.index('.').nil?,
             "#{desired_alias} must not contain a dot")
  end

  # check that there is not already a (different) alias for this
  # namespace URI.
  _alias = @namespace_to_alias[namespace_uri]
  if _alias and _alias != desired_alias
    raise IndexError, "Cannot map #{namespace_uri} to alias #{desired_alias}. It is already mapped to alias #{_alias}"
  end

  @alias_to_namespace[desired_alias] = namespace_uri
  @namespace_to_alias[namespace_uri] = desired_alias
  @implicit_namespaces << namespace_uri if implicit
  return desired_alias
end
aliases() click to toggle source
# File lib/openid/message.rb, line 548
def aliases
  # Return an iterator over the aliases
  return @alias_to_namespace.keys()
end
each() { |k,v| ... } click to toggle source
# File lib/openid/message.rb, line 535
def each
  @namespace_to_alias.each {|k,v| yield k,v}
end
get_alias(namespace_uri) click to toggle source
# File lib/openid/message.rb, line 466
def get_alias(namespace_uri)
  @namespace_to_alias[namespace_uri]
end
get_namespace_uri(namespace_alias) click to toggle source
# File lib/openid/message.rb, line 470
def get_namespace_uri(namespace_alias)
  @alias_to_namespace[namespace_alias]
end
implicit?(namespace_uri) click to toggle source
# File lib/openid/message.rb, line 544
def implicit?(namespace_uri)
  return @implicit_namespaces.member?(namespace_uri)
end
member?(namespace_uri) click to toggle source
# File lib/openid/message.rb, line 531
def member?(namespace_uri)
  @namespace_to_alias.has_key?(namespace_uri)
end
namespace_uris() click to toggle source
# File lib/openid/message.rb, line 539
def namespace_uris
  # Return an iterator over the namespace URIs
  return @namespace_to_alias.keys()
end