Class ActiveLdap::Schema
In: lib/active_ldap/schema/syntaxes.rb
lib/active_ldap/schema.rb
Parent: Object
Error AttributeAssignmentError AdapterNotSpecified OperationNotPermitted RequiredObjectClassMissed ConnectionError RequiredAttributeMissed LdifInvalid LdapError DistinguishedNameNotSetError EntryNotFound SaveError StrongAuthenticationRequired AdapterNotFound ConnectionNotEstablished TimeoutError AuthenticationError AttributeValueInvalid EntryNotSaved DistinguishedNameInputInvalid EntryAlreadyExist ObjectClassError UnknownAttribute EntryInvalid DeleteError ConfigurationError DistinguishedNameInvalid 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 Schema\n[lib/active_ldap/schema.rb\nlib/active_ldap/schema/syntaxes.rb] JndiConnection lib/active_ldap/distinguished_name.rb lib/active_ldap/base.rb lib/active_ldap/schema.rb lib/active_ldap/entry_attribute.rb lib/active_ldap/ldif.rb lib/active_ldap/ldap_error.rb 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_44_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]