Class ActiveLdap::Schema
In: lib/active_ldap/schema/syntaxes.rb
lib/active_ldap/schema.rb
Parent: Object
Error DeleteError LdapError AdapterNotSpecified OperationNotPermitted RequiredAttributeMissed LdifInvalid AttributeAssignmentError RequiredObjectClassMissed DistinguishedNameNotSetError StrongAuthenticationRequired ConnectionError SaveError EntryNotFound AuthenticationError EntryNotSaved UnknownAttribute ConnectionNotEstablished TimeoutError ConfigurationError AdapterNotFound DistinguishedNameInvalid ObjectClassError EntryInvalid EntryAlreadyExist Base DistinguishedName Ldif Reloadable::Deprecated Reloadable::Subclasses Enumerable Collection StandardError Children HasMany HasManyWrap BelongsToMany Proxy BelongsTo Common Find LDIF Delete Update GetText Parser GetTextSupport Base\n[lib/active_ldap/adapter/base.rb\nlib/active_ldap/adapter/ldap.rb\nlib/active_ldap/adapter/net_ldap.rb] Ldap NetLdap Normalize ActiveRecord::Callbacks ActiveRecord::Validations Schema\n[lib/active_ldap/schema.rb\nlib/active_ldap/schema/syntaxes.rb] lib/active_ldap/base.rb lib/active_ldap/schema.rb lib/active_ldap/ldif.rb lib/active_ldap/distinguished_name.rb lib/active_ldap/ldap_error.rb ClassMethods Associations ClassMethods HumanReadable lib/active_ldap/association/has_many_wrap.rb lib/active_ldap/association/has_many.rb lib/active_ldap/association/proxy.rb lib/active_ldap/association/children.rb lib/active_ldap/association/collection.rb lib/active_ldap/association/belongs_to_many.rb lib/active_ldap/association/belongs_to.rb HasManyUtils Association ClassMethods Tree Acts Common LDIF Delete Find Update Operations lib/active_ldap/get_text/parser.rb GetText ClassMethods Configuration Command lib/active_ldap/adapter/net_ldap.rb lib/active_ldap/adapter/ldap.rb Adapter GetTextSupport Normalize ClassMethods Attributes Escape Callbacks ClassMethods ObjectClass Helper Validations ClassMethods Connection GetTextFallback Populate Salt UserPassword ActiveLdap dot/m_40_0.png

Methods

Classes and Modules

Module ActiveLdap::Schema::Syntaxes
Class ActiveLdap::Schema::Attribute
Class ActiveLdap::Schema::Entry
Class ActiveLdap::Schema::ObjectClass
Class ActiveLdap::Schema::Syntax

Constants

NUMERIC_OID_RE = "\\d[\\d\\.]+"
DESCRIPTION_RE = "[a-zA-Z][a-zA-Z\\d\\-]*"
OID_RE = "(?:#{NUMERIC_OID_RE}|#{DESCRIPTION_RE}-oid)"
RESERVED_NAMES_RE = /(?:#{reserved_names.join('|')})/

Public Class methods

[Source]

   # File lib/active_ldap/schema.rb, line 3
3:     def initialize(entries)
4:       @entries = default_entries.merge(entries || {})
5:       @schema_info = {}
6:       @class_attributes_info = {}
7:       @cache = {}
8:     end

Public Instance methods

[](group, id_or_name, attribute_name)

Alias for fetch

[Source]

    # File lib/active_ldap/schema.rb, line 86
86:     def attribute(name)
87:       cache([:attribute, name]) do
88:         Attribute.new(name, self)
89:       end
90:     end

[Source]

     # File lib/active_ldap/schema.rb, line 100
100:     def attribute_type(name, attribute_name)
101:       cache([:attribute_type, name, attribute_name]) do
102:         fetch("attributeTypes", name, attribute_name)
103:       end
104:     end

[Source]

    # File lib/active_ldap/schema.rb, line 92
92:     def attributes
93:       cache([:attributes]) do
94:         names("attributeTypes").collect do |name|
95:           attribute(name)
96:         end
97:       end
98:     end

[Source]

    # File lib/active_ldap/schema.rb, line 46
46:     def entry(group, id_or_name)
47:       return {} if group.empty? or id_or_name.empty?
48: 
49:       unless @entries.has_key?(group)
50:         raise ArgumentError, _("Unknown schema group: %s") % group
51:       end
52: 
53:       # Initialize anything that is required
54:       info, ids, aliases = ensure_schema_info(group)
55:       id, name = determine_id_or_name(id_or_name, aliases)
56: 
57:       # Check already parsed options first
58:       return ids[id] if ids.has_key?(id)
59: 
60:       schemata = @entries[group] || []
61:       while schema = schemata.shift
62:         next unless /\A\s*\(\s*(#{OID_RE})\s*(.*)\s*\)\s*\z/ =~ schema
63:         schema_id = $1
64:         rest = $2
65: 
66:         if ids.has_key?(schema_id)
67:           attributes = ids[schema_id]
68:         else
69:           attributes = {}
70:           ids[schema_id] = attributes
71:         end
72: 
73:         parse_attributes(rest, attributes)
74:         (attributes["NAME"] || []).each do |v|
75:           normalized_name = normalize_schema_name(v)
76:           aliases[normalized_name] = schema_id
77:           id = schema_id if id.nil? and name == normalized_name
78:         end
79: 
80:         break if id == schema_id
81:       end
82: 
83:       ids[id || aliases[name]] || {}
84:     end

[Source]

    # File lib/active_ldap/schema.rb, line 20
20:     def exist_name?(group, name)
21:       alias_map(group).has_key?(normalize_schema_name(name))
22:     end

fetch

This is just like LDAP::Schema#attribute except that it allows look up in any of the given keys. e.g.

 fetch('attributeTypes', 'cn', 'DESC')
 fetch('ldapSyntaxes', '1.3.6.1.4.1.1466.115.121.1.5', 'DESC')

[Source]

    # File lib/active_ldap/schema.rb, line 35
35:     def fetch(group, id_or_name, attribute_name)
36:       return [] if attribute_name.empty?
37:       attribute_name = normalize_attribute_name(attribute_name)
38:       value = entry(group, id_or_name)[attribute_name]
39:       value ? value.dup : []
40:     end

[Source]

    # File lib/active_ldap/schema.rb, line 10
10:     def ids(group)
11:       ensure_parse(group)
12:       info, ids, aliases = ensure_schema_info(group)
13:       ids.keys
14:     end

[Source]

     # File lib/active_ldap/schema.rb, line 126
126:     def ldap_syntax(name)
127:       cache([:ldap_syntax, name]) do
128:         Syntax.new(name, self)
129:       end
130:     end

[Source]

     # File lib/active_ldap/schema.rb, line 140
140:     def ldap_syntax_attribute(name, attribute_name)
141:       cache([:ldap_syntax_attribute, name, attribute_name]) do
142:         fetch("ldapSyntaxes", name, attribute_name)
143:       end
144:     end

[Source]

     # File lib/active_ldap/schema.rb, line 132
132:     def ldap_syntaxes
133:       cache([:ldap_syntaxes]) do
134:         ids("ldapSyntaxes").collect do |id|
135:           ldap_syntax(id)
136:         end
137:       end
138:     end

[Source]

    # File lib/active_ldap/schema.rb, line 16
16:     def names(group)
17:       alias_map(group).keys
18:     end

[Source]

     # File lib/active_ldap/schema.rb, line 106
106:     def object_class(name)
107:       cache([:object_class, name]) do
108:         ObjectClass.new(name, self)
109:       end
110:     end

[Source]

     # File lib/active_ldap/schema.rb, line 120
120:     def object_class_attribute(name, attribute_name)
121:       cache([:object_class_attribute, name, attribute_name]) do
122:         fetch("objectClasses", name, attribute_name)
123:       end
124:     end

[Source]

     # File lib/active_ldap/schema.rb, line 112
112:     def object_classes
113:       cache([:object_classes]) do
114:         names("objectClasses").collect do |name|
115:           object_class(name)
116:         end
117:       end
118:     end

[Source]

    # File lib/active_ldap/schema.rb, line 24
24:     def resolve_name(group, name)
25:       alias_map(group)[normalize_schema_name(name)]
26:     end

Private Instance methods

[Source]

     # File lib/active_ldap/schema.rb, line 219
219:     def alias_map(group)
220:       ensure_parse(group)
221:       return {} if @schema_info[group].nil?
222:       @schema_info[group][:aliases] || {}
223:     end

[Source]

     # File lib/active_ldap/schema.rb, line 147
147:     def cache(key)
148:       (@cache[key] ||= [yield])[0]
149:     end

[Source]

     # File lib/active_ldap/schema.rb, line 240
240:     def default_entries
241:       {
242:         "objectClasses" => [],
243:         "attributeTypes" => [],
244:         "ldapSyntaxes" => [],
245:       }
246:     end

[Source]

     # File lib/active_ldap/schema.rb, line 157
157:     def determine_id_or_name(id_or_name, aliases)
158:       if /\A[\d\.]+\z/ =~ id_or_name
159:         id = id_or_name
160:         name = nil
161:       else
162:         name = normalize_schema_name(id_or_name)
163:         id = aliases[name]
164:       end
165:       [id, name]
166:     end

[Source]

     # File lib/active_ldap/schema.rb, line 225
225:     def ensure_parse(group)
226:       return if @entries[group].nil?
227:       unless @entries[group].empty?
228:         fetch(group, 'nonexistent', 'nonexistent')
229:       end
230:     end

[Source]

     # File lib/active_ldap/schema.rb, line 151
151:     def ensure_schema_info(group)
152:       @schema_info[group] ||= {:ids => {}, :aliases => {}}
153:       info = @schema_info[group]
154:       [info, info[:ids], info[:aliases]]
155:     end

[Source]

     # File lib/active_ldap/schema.rb, line 236
236:     def normalize_attribute_name(name)
237:       name.upcase.gsub(/_/, "-")
238:     end

[Source]

     # File lib/active_ldap/schema.rb, line 232
232:     def normalize_schema_name(name)
233:       name.downcase.sub(/;.*$/, '')
234:     end

[Source]

     # File lib/active_ldap/schema.rb, line 190
190:     def parse_attributes(str, attributes)
191:       str.scan(/([A-Z\-_]+)\s+
192:                 (?:\(\s*([\w\-]+(?:\s+\$\s+[\w\-]+)+)\s*\)|
193:                    \(\s*([^\)]*)\s*\)|
194:                    '([^\']*)'|
195:                    ((?!#{RESERVED_NAMES_RE})[a-zA-Z][a-zA-Z\d\-;]*)|
196:                    (\d[\d\.\{\}]+)|
197:                    ()
198:                 )/x
199:                ) do |name, multi_amp, multi, string, literal, syntax, no_value|
200:         case
201:         when multi_amp
202:           values = multi_amp.rstrip.split(/\s*\$\s*/)
203:         when multi
204:           values = multi.scan(/\s*'([^\']*)'\s*/).collect {|value| value[0]}
205:         when string
206:           values = [string]
207:         when literal
208:           values = [literal]
209:         when syntax
210:           values = [syntax]
211:         when no_value
212:           values = ["TRUE"]
213:         end
214:         attributes[normalize_attribute_name(name)] ||= []
215:         attributes[normalize_attribute_name(name)].concat(values)
216:       end
217:     end

[Validate]