class SAML2::Attribute

def build(builder)

(see Base#build)
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)

Returns:
  • (Attribute) -

Parameters:
  • value () -- optional
  • name (String) --
def create(name, value = nil)
  (class_for(name) || self).new(name, value)
end

def element

Returns:
  • ('Attribute') -
def element
  'Attribute'
end

def from_xml(node)

(see Base.from_xml)
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)

(see Base#from_xml)
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)

Parameters:
  • 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

Returns:
  • ('saml') -
def namespace
  'saml'
end

def subclasses

def subclasses
  @subclasses ||= []
end