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