class SAML2::Attribute
def build(builder)
def build(builder) builder[self.class.namespace].__send__(self.class.element, 'Name' => name) do |attribute| attribute.parent['FriendlyName'] = friendly_name if friendly_name attribute.parent['NameFormat'] = name_format if name_format Array.wrap(value).each do |value| xsi_type, val = convert_to_xsi(value) attribute['saml'].AttributeValue(val) do |attribute_value| attribute_value.parent['xsi:type'] = xsi_type if xsi_type end end end end
def class_for(name_or_node)
def class_for(name_or_node) subclasses.find do |klass| klass.respond_to?(:recognizes?) && klass.recognizes?(name_or_node) end end
def convert_from_xsi(type, value)
def convert_from_xsi(type, value) return value unless type qname = self.class.lookup_qname(type.value, type.namespaces) info = XS_TYPES[qname] if info && info.last value = info.last.call(value) end value end
def convert_to_xsi(value)
def convert_to_xsi(value) xs_type = nil converter = nil XS_TYPES.each do |type, (klasses, to_xsi, _from_xsi)| if Array.wrap(klasses).any? { |klass| klass === value } xs_type = "xs:#{type.last}" converter = to_xsi break end end value = converter.call(value) if converter [xs_type, value] end
def create(name, value = nil)
-
(Attribute)-
Parameters:
-
value() -- optional -
name(String) --
def create(name, value = nil) (class_for(name) || self).new(name, value) end
def element
-
('Attribute')-
def element 'Attribute' end
def from_xml(node)
def from_xml(node) # pass through for subclasses return super unless self == Attribute # look for an appropriate subclass klass = class_for(node) klass ? klass.from_xml(node) : super end
def from_xml(node)
def from_xml(node) super @name = node['Name'] @friendly_name = node['FriendlyName'] @name_format = node['NameFormat'] values = node.xpath('saml:AttributeValue', Namespaces::ALL).map do |value| convert_from_xsi(value.attribute_with_ns('type', Namespaces::XSI), value.content && value.content.strip) end @value = case values.length when 0; nil when 1; values.first else; values end end
def inherited(klass)
def inherited(klass) subclasses << klass end
def initialize(name = nil, value = nil, friendly_name = nil, name_format = nil)
-
name_format() -- optional [String, nil] -
friendly_name() -- optional [String, nil] -
value() -- optional [Object, nil] -
name(String) --
def initialize(name = nil, value = nil, friendly_name = nil, name_format = nil) @name, @value, @friendly_name, @name_format = name, value, friendly_name, name_format end
def namespace
-
('saml')-
def namespace 'saml' end
def subclasses
def subclasses @subclasses ||= [] end