Class: OpenID::AX::KeyValueMessage
- Defined in:
- lib/openid/extensions/ax.rb
Overview
Abstract class that implements a message that has attribute keys and values. It contains the common code between fetch_response and store_request.
Direct Known Subclasses
Constant Summary
Constants inherited from AXMessage
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
Returns the value of attribute data.
Attributes inherited from AXMessage
Instance Method Summary collapse
-
#[](type_uri) ⇒ Object
retrieve the list of values for this attribute.
-
#_get_extension_kv_args(aliases = nil) ⇒ Object
Get the extension arguments for the key/value pairs contained in this message.
-
#add_value(type_uri, value) ⇒ Object
Add a single value for the given attribute type to the message.
-
#count(type_uri) ⇒ Object
get the number of responses for this attribute.
-
#get(type_uri) ⇒ Object
retrieve the list of values for this attribute.
-
#get_single(type_uri, default = nil) ⇒ Object
Get a single value for an attribute.
-
#initialize ⇒ KeyValueMessage
constructor
A new instance of KeyValueMessage.
-
#parse_extension_args(ax_args) ⇒ Object
Parse attribute exchange key/value arguments into this object.
-
#set_values(type_uri, values) ⇒ Object
Set the values for the given attribute type.
Methods inherited from Extension
#get_extension_args, #to_message
Constructor Details
#initialize ⇒ KeyValueMessage
Returns a new instance of KeyValueMessage.
266 267 268 269 270 271 |
# File 'lib/openid/extensions/ax.rb', line 266 def initialize super() @mode = nil @data = {} @data.default = [] end |
Instance Attribute Details
#data ⇒ Object (readonly)
Returns the value of attribute data.
265 266 267 |
# File 'lib/openid/extensions/ax.rb', line 265 def data @data end |
Instance Method Details
#[](type_uri) ⇒ Object
retrieve the list of values for this attribute
368 369 370 |
# File 'lib/openid/extensions/ax.rb', line 368 def [](type_uri) @data[type_uri] end |
#_get_extension_kv_args(aliases = nil) ⇒ Object
Get the extension arguments for the key/value pairs contained in this message.
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 |
# File 'lib/openid/extensions/ax.rb', line 289 def _get_extension_kv_args(aliases = nil) aliases = NamespaceMap.new if aliases.nil? ax_args = new_args @data.each{|type_uri, values| name = aliases.add(type_uri) ax_args['type.'+name] = type_uri ax_args['count.'+name] = values.size.to_s values.each_with_index{|value, i| key = "value.#{name}.#{i+1}" ax_args[key] = value } } return ax_args end |
#add_value(type_uri, value) ⇒ Object
Add a single value for the given attribute type to the message. If there are already values specified for this type, this value will be sent in addition to the values already specified.
277 278 279 |
# File 'lib/openid/extensions/ax.rb', line 277 def add_value(type_uri, value) @data[type_uri] = @data[type_uri] << value end |
#count(type_uri) ⇒ Object
get the number of responses for this attribute
373 374 375 |
# File 'lib/openid/extensions/ax.rb', line 373 def count(type_uri) @data[type_uri].size end |
#get(type_uri) ⇒ Object
retrieve the list of values for this attribute
363 364 365 |
# File 'lib/openid/extensions/ax.rb', line 363 def get(type_uri) @data[type_uri] end |
#get_single(type_uri, default = nil) ⇒ Object
Get a single value for an attribute. If no value was sent for this attribute, use the supplied default. If there is more than one value for this attribute, this method will fail.
352 353 354 355 356 357 358 359 360 |
# File 'lib/openid/extensions/ax.rb', line 352 def get_single(type_uri, default = nil) values = @data[type_uri] return default if values.empty? if values.size != 1 raise Error, "More than one value present for #{type_uri.inspect}" else return values[0] end end |
#parse_extension_args(ax_args) ⇒ Object
Parse attribute exchange key/value arguments into this object.
309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 |
# File 'lib/openid/extensions/ax.rb', line 309 def parse_extension_args(ax_args) check_mode(ax_args) aliases = NamespaceMap.new ax_args.each{|k, v| if k.index('type.') == 0 type_uri = v name = k[5..-1] AX.check_alias(name) aliases.add_alias(type_uri,name) end } aliases.each{|type_uri, name| count_s = ax_args['count.'+name] count = count_s.to_i if count_s.nil? value = ax_args['value.'+name] if value.nil? raise IndexError, "Missing #{'value.'+name} in FetchResponse" elsif value.empty? values = [] else values = [value] end elsif count_s.to_i == 0 values = [] else values = (1..count).inject([]){|l,i| key = "value.#{name}.#{i}" v = ax_args[key] raise IndexError, "Missing #{key} in FetchResponse" if v.nil? l << v } end @data[type_uri] = values } end |
#set_values(type_uri, values) ⇒ Object
Set the values for the given attribute type. This replaces any values that have already been set for this attribute.
283 284 285 |
# File 'lib/openid/extensions/ax.rb', line 283 def set_values(type_uri, values) @data[type_uri] = values end |