Class: SAML2::Attribute

Inherits:
Base
  • Object
show all
Defined in:
lib/saml2/attribute.rb,
lib/saml2/attribute/x500.rb

Direct Known Subclasses

X500, RequestedAttribute

Defined Under Namespace

Modules: NameFormats Classes: X500

Instance Attribute Summary collapse

Attributes inherited from Base

#xml

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#decrypt, #inspect, load_object_array, load_string_array, lookup_qname, #to_s, #to_xml

Constructor Details

#initialize(name = nil, value = nil, friendly_name = nil, name_format = nil) ⇒ Attribute

Create a new generic Attribute

Parameters:

  • name (String) (defaults to: nil)
  • value (defaults to: nil)

    optional [Object, nil]

  • friendly_name (defaults to: nil)

    optional [String, nil]

  • name_format (defaults to: nil)

    optional [String, nil]



86
87
88
# File 'lib/saml2/attribute.rb', line 86

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

Instance Attribute Details

#friendly_nameString?

Returns:

  • (String, nil)


76
77
78
# File 'lib/saml2/attribute.rb', line 76

def friendly_name
  @friendly_name
end

#nameString

Returns:

  • (String)


74
75
76
# File 'lib/saml2/attribute.rb', line 74

def name
  @name
end

#name_formatString?

Returns:

  • (String, nil)


76
77
78
# File 'lib/saml2/attribute.rb', line 76

def name_format
  @name_format
end

#valueObject?

Returns:

  • (Object, nil)


78
79
80
# File 'lib/saml2/attribute.rb', line 78

def value
  @value
end

Class Method Details

.create(name, value = nil) ⇒ Attribute

Create an appropriate object to represent an attribute.

This will create the most appropriate object (i.e. an X500 if possible) to represent this attribute, based on its name.

Parameters:

  • name (String)

    The attribute name. This can be a friendly name, or a URI.

  • value (defaults to: nil)

    optional The attribute value.

Returns:



39
40
41
# File 'lib/saml2/attribute.rb', line 39

def create(name, value = nil)
  (class_for(name) || self).new(name, value)
end

.element'Attribute'

The XML element that this attribute class serializes as.

Returns:



51
52
53
# File 'lib/saml2/attribute.rb', line 51

def element
  'Attribute'
end

.from_xml(node) ⇒ Base?

Create an appropriate object to represent the given XML element.

Parameters:

  • node (Nokogiri::XML::Element, nil)

Returns:



20
21
22
23
24
25
26
27
# File 'lib/saml2/attribute.rb', line 20

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

.namespace'saml'

The XML namespace that this attribute class serializes as.

Returns:

  • ('saml')


45
46
47
# File 'lib/saml2/attribute.rb', line 45

def namespace
  'saml'
end

Instance Method Details

#build(builder) ⇒ void

This method returns an undefined value.

Serialize this object to XML, as part of a larger document

Parameters:

  • builder (Nokogiri::XML::Builder)

    The builder helper object to serialize to.



91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/saml2/attribute.rb', line 91

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

#from_xml(node) ⇒ void

This method returns an undefined value.

Parse an XML element into this object.

Parameters:

  • node (Nokogiri::XML::Element)


105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/saml2/attribute.rb', line 105

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