class OpenID::AX::FetchResponse
A fetch_response attribute exchange message
Attributes
aliases[RW]
Use the aliases variable to manually add alias names in the response. They'll be returned to the client in the format:
openid.ax.type.email=http://openid.net/schema/contact/internet/email openid.ax.value.email=guy@example.com
update_url[R]
Public Class Methods
from_success_response(success_response, signed=true)
click to toggle source
Construct a FetchResponse
object from an OpenID
library SuccessResponse object.
# File lib/openid/extensions/ax.rb, line 474 def self.from_success_response(success_response, signed=true) obj = self.new if signed ax_args = success_response.get_signed_ns(obj.ns_uri) else ax_args = success_response.message.get_args(obj.ns_uri) end begin obj.parse_extension_args(ax_args) return obj rescue Error return nil end end
new(update_url = nil)
click to toggle source
Calls superclass method
OpenID::AX::KeyValueMessage::new
# File lib/openid/extensions/ax.rb, line 405 def initialize(update_url = nil) super() @mode = 'fetch_response' @update_url = update_url @aliases = NamespaceMap.new end
Public Instance Methods
get_extension_args(request = nil)
click to toggle source
Serialize this object into arguments in the attribute exchange namespace Takes an optional FetchRequest
. If specified, the response will be validated against this request, and empty responses for requested fields with no data will be sent.
# File lib/openid/extensions/ax.rb, line 417 def get_extension_args(request = nil) zero_value_types = [] if request # Validate the data in the context of the request (the # same attributes should be present in each, and the # counts in the response must be no more than the counts # in the request) @data.keys.each{|type_uri| unless request.member? type_uri raise IndexError, "Response attribute not present in request: #{type_uri.inspect}" end } request.attributes.each{|attr_info| # Copy the aliases from the request so that reading # the response in light of the request is easier if attr_info.ns_alias.nil? @aliases.add(attr_info.type_uri) else @aliases.add_alias(attr_info.type_uri, attr_info.ns_alias) end values = @data[attr_info.type_uri] if values.empty? # @data defaults to [] zero_value_types << attr_info end if attr_info.count != UNLIMITED_VALUES and attr_info.count < values.size raise Error, "More than the number of requested values were specified for #{attr_info.type_uri.inspect}" end } end kv_args = _get_extension_kv_args(@aliases) # Add the KV args into the response with the args that are # unique to the fetch_response ax_args = new_args zero_value_types.each{|attr_info| name = @aliases.get_alias(attr_info.type_uri) kv_args['type.' + name] = attr_info.type_uri kv_args['count.' + name] = '0' } update_url = (request and request.update_url or @update_url) ax_args['update_url'] = update_url unless update_url.nil? ax_args.update(kv_args) return ax_args end
parse_extension_args(ax_args)
click to toggle source
Calls superclass method
OpenID::AX::KeyValueMessage#parse_extension_args
# File lib/openid/extensions/ax.rb, line 467 def parse_extension_args(ax_args) super @update_url = ax_args['update_url'] end