Class ActiveLdap::Xml::Serializer
In: lib/active_ldap/xml.rb
Parent: Object
Error AttributeAssignmentError AdapterNotSpecified OperationNotPermitted RequiredObjectClassMissed ConnectionError RequiredAttributeMissed LdifInvalid LdapError DistinguishedNameNotSetError EntryNotFound SaveError StrongAuthenticationRequired AdapterNotFound TimeoutError AuthenticationError AttributeValueInvalid EntryNotSaved DistinguishedNameInputInvalid EntryAlreadyExist ObjectClassError UnknownAttribute EntryInvalid DeleteError ConfigurationError ConnectionNotSetup DistinguishedNameInvalid Schema\n[lib/active_ldap/schema.rb\nlib/active_ldap/schema/syntaxes.rb] DistinguishedName Base Reloadable::Deprecated Reloadable::Subclasses Enumerable Ldif Collection EntryAttribute StandardError Children HasManyWrap HasMany BelongsToMany Proxy BelongsTo Common Find LDIF Delete Update Normalizable GetText Parser ActiveRecord::Callbacks ActiveRecord::Validations Base\n[lib/active_ldap/adapter/base.rb\nlib/active_ldap/adapter/jndi.rb\nlib/active_ldap/adapter/ldap.rb\nlib/active_ldap/adapter/net_ldap.rb] Jndi Ldap NetLdap GetTextSupport Xml JndiConnection lib/active_ldap/distinguished_name.rb lib/active_ldap/base.rb lib/active_ldap/xml.rb lib/active_ldap/schema.rb lib/active_ldap/entry_attribute.rb lib/active_ldap/ldif.rb lib/active_ldap/ldap_error.rb Compatible ClassMethods Associations LdapBenchmarking ActionController Populate lib/active_ldap/association/has_many_wrap.rb lib/active_ldap/association/children.rb lib/active_ldap/association/collection.rb lib/active_ldap/association/proxy.rb lib/active_ldap/association/belongs_to_many.rb lib/active_ldap/association/belongs_to.rb lib/active_ldap/association/has_many.rb HasManyUtils Association ClassMethods Tree Acts Command Update Common ModifyNameRecordLoadable AddOperationModifiable DeleteOperationModifiable ReplaceOperationModifiable ModifyRecordLoadable DeleteRecordLoadable AddRecordLoadable ContentRecordLoadable LDIF Delete Find Operations GetTextSupport Escape ClassMethods Normalizable Attributes ClassMethods Configuration ClassMethods ObjectClass lib/active_ldap/get_text/parser.rb GetText ClassMethods Callbacks Validations lib/active_ldap/adapter/jndi_connection.rb lib/active_ldap/adapter/net_ldap.rb lib/active_ldap/adapter/ldap.rb lib/active_ldap/adapter/jndi.rb Adapter Helper GetTextFallback ClassMethods HumanReadable Salt UserPassword ClassMethods Connection ActiveLdap dot/m_46_0.png

Methods

Constants

PRINTABLE_STRING = /[\x20-\x7e\w\s]*/

Public Class methods

[Source]

    # File lib/active_ldap/xml.rb, line 10
10:       def initialize(dn, attributes, schema, options={})
11:         @dn = dn
12:         @attributes = attributes
13:         @schema = schema
14:         @options = options
15:       end

Public Instance methods

[Source]

    # File lib/active_ldap/xml.rb, line 17
17:       def to_s
18:         root = @options[:root]
19:         result = "<#{root}>\n"
20:         target_attributes.each do |key, values|
21:           values = normalize_values(values).sort_by {|value, _| value}
22:           if @schema.attribute(key).single_value?
23:             result << "  #{serialize_attribute_value(key, *values[0])}\n"
24:           else
25:             result << serialize_attribute_values(key, values)
26:           end
27:         end
28:         result << "</#{root}>\n"
29:         result
30:       end

Private Instance methods

[Source]

    # File lib/active_ldap/xml.rb, line 56
56:       def normalize_value(value, options=[])
57:         targets = []
58:         if value.is_a?(Hash)
59:           value.each do |real_option, real_value|
60:             targets.concat(normalize_value(real_value, options + [real_option]))
61:           end
62:         elsif value.is_a?(Array)
63:           value.each do |real_value|
64:             targets.concat(normalize_value(real_value, options))
65:           end
66:         else
67:           if /\A#{PRINTABLE_STRING}\z/ !~ value
68:             value = [value].pack("m").gsub(/\n/u, '')
69:             options += ["base64"]
70:           end
71:           xml_attributes = {}
72:           options.each do |name, val|
73:             xml_attributes[name] = val || "true"
74:           end
75:           targets << [value, xml_attributes]
76:         end
77:         targets
78:       end

[Source]

    # File lib/active_ldap/xml.rb, line 48
48:       def normalize_values(values)
49:         targets = []
50:         values.each do |value|
51:           targets.concat(normalize_value(value))
52:         end
53:         targets
54:       end

[Source]

     # File lib/active_ldap/xml.rb, line 101
101:       def serialize_attribute_value(name, value, xml_attributes)
102:         if xml_attributes.blank?
103:           xml_attributes = ""
104:         else
105:           xml_attributes = " " + xml_attributes.collect do |n, v|
106:             "#{ERB::Util.h(n)}=\"#{ERB::Util.h(v)}\""
107:           end.join(" ")
108:         end
109:         "<#{name}#{xml_attributes}>#{ERB::Util.h(value)}</#{name}>"
110:       end

[Source]

    # File lib/active_ldap/xml.rb, line 80
80:       def serialize_attribute_values(name, values)
81:         return "" if values.blank?
82: 
83:         result = ""
84:         if name == "dn" or @options[:type].to_s.downcase == "ldif"
85:           values.collect do |value, xml_attributes|
86:             xml = serialize_attribute_value(name, value, xml_attributes)
87:             result << "  #{xml}\n"
88:           end
89:         else
90:           plural_name = name.pluralize
91:           result << "  <#{plural_name} type=\"array\">\n"
92:           values.each do |value, xml_attributes|
93:             xml = serialize_attribute_value(name, value, xml_attributes)
94:             result << "    #{xml}\n"
95:           end
96:           result << "  </#{plural_name}>\n"
97:         end
98:         result
99:       end

[Source]

    # File lib/active_ldap/xml.rb, line 33
33:       def target_attributes
34:         except_dn = false
35:         attributes = @attributes.dup
36:         (@options[:except] || []).each do |name|
37:           if name == "dn"
38:             except_dn = true
39:           else
40:             attributes.delete(name)
41:           end
42:         end
43:         attributes = attributes.sort_by {|key, values| key}
44:         attributes.unshift(["dn", [@dn]]) unless except_dn
45:         attributes
46:       end

[Validate]