Parent

Included Modules

Class Index [+]

Quicksearch

ActiveLdap::Schema

Constants

NUMERIC_OID_RE
DESCRIPTION_RE
OID_RE
RESERVED_NAMES_RE

Public Class Methods

new(entries) click to toggle source
    # File lib/active_ldap/schema.rb, line 5
 5:     def initialize(entries)
 6:       @entries = normalize_entries(entries || {})
 7:       @schema_info = {}
 8:       @class_attributes_info = {}
 9:       @cache = {}
10:     end

Public Instance Methods

[](group, id_or_name, attribute_name) click to toggle source
Alias for: fetch
attribute(name) click to toggle source
    # File lib/active_ldap/schema.rb, line 88
88:     def attribute(name)
89:       cache([:attribute, name]) do
90:         Attribute.new(name, self)
91:       end
92:     end
attribute_type(name, attribute_name) click to toggle source
     # File lib/active_ldap/schema.rb, line 102
102:     def attribute_type(name, attribute_name)
103:       cache([:attribute_type, name, attribute_name]) do
104:         fetch("attributeTypes", name, attribute_name)
105:       end
106:     end
attributes() click to toggle source
     # File lib/active_ldap/schema.rb, line 94
 94:     def attributes
 95:       cache([:attributes]) do
 96:         names("attributeTypes").collect do |name|
 97:           attribute(name)
 98:         end
 99:       end
100:     end
dit_content_rule_attribute(name, attribute_name) click to toggle source
     # File lib/active_ldap/schema.rb, line 128
128:     def dit_content_rule_attribute(name, attribute_name)
129:       cache([:dit_content_rule_attribute, name, attribute_name]) do
130:         fetch("dITContentRules", name, attribute_name)
131:       end
132:     end
dump(output=nil) click to toggle source
     # File lib/active_ldap/schema.rb, line 154
154:     def dump(output=nil)
155:       require 'pp'
156:       output ||= STDOUT
157:       if output.respond_to?(:write)
158:         PP.pp(@entries, output)
159:       else
160:         open(output, "w") {|out| PP.pp(@entries, out)}
161:       end
162:       nil
163:     end
entry(group, id_or_name) click to toggle source
    # File lib/active_ldap/schema.rb, line 48
48:     def entry(group, id_or_name)
49:       return {} if group.empty? or id_or_name.empty?
50: 
51:       unless @entries.has_key?(group)
52:         raise ArgumentError, _("Unknown schema group: %s") % group
53:       end
54: 
55:       # Initialize anything that is required
56:       info, ids, aliases = ensure_schema_info(group)
57:       id, name = determine_id_or_name(id_or_name, aliases)
58: 
59:       # Check already parsed options first
60:       return ids[id] if ids.has_key?(id)
61: 
62:       schemata = @entries[group] || []
63:       while schema = schemata.shift
64:         next unless /\A\s*\(\s*(#{OID_RE})\s*(.*)\s*\)\s*\z/ =~ schema
65:         schema_id = $1
66:         rest = $2
67: 
68:         if ids.has_key?(schema_id)
69:           attributes = ids[schema_id]
70:         else
71:           attributes = {}
72:           ids[schema_id] = attributes
73:         end
74: 
75:         parse_attributes(rest, attributes)
76:         (attributes["NAME"] || []).each do |v|
77:           normalized_name = normalize_schema_name(v)
78:           aliases[normalized_name] = schema_id
79:           id = schema_id if id.nil? and name == normalized_name
80:         end
81: 
82:         break if id == schema_id
83:       end
84: 
85:       ids[id || aliases[name]] || {}
86:     end
exist_name?(group, name) click to toggle source
    # File lib/active_ldap/schema.rb, line 22
22:     def exist_name?(group, name)
23:       alias_map(group).has_key?(normalize_schema_name(name))
24:     end
fetch(group, id_or_name, attribute_name) click to toggle source

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')
    # File lib/active_ldap/schema.rb, line 37
37:     def fetch(group, id_or_name, attribute_name)
38:       return [] if attribute_name.empty?
39:       attribute_name = normalize_attribute_name(attribute_name)
40:       value = entry(group, id_or_name)[attribute_name]
41:       value ? value.dup : []
42:     end
Also aliased as: []
ids(group) click to toggle source
    # File lib/active_ldap/schema.rb, line 12
12:     def ids(group)
13:       ensure_parse(group)
14:       info, ids, aliases = ensure_schema_info(group)
15:       ids.keys
16:     end
ldap_syntax(name) click to toggle source
     # File lib/active_ldap/schema.rb, line 134
134:     def ldap_syntax(name)
135:       cache([:ldap_syntax, name]) do
136:         Syntax.new(name, self)
137:       end
138:     end
ldap_syntax_attribute(name, attribute_name) click to toggle source
     # File lib/active_ldap/schema.rb, line 148
148:     def ldap_syntax_attribute(name, attribute_name)
149:       cache([:ldap_syntax_attribute, name, attribute_name]) do
150:         fetch("ldapSyntaxes", name, attribute_name)
151:       end
152:     end
ldap_syntaxes() click to toggle source
     # File lib/active_ldap/schema.rb, line 140
140:     def ldap_syntaxes
141:       cache([:ldap_syntaxes]) do
142:         ids("ldapSyntaxes").collect do |id|
143:           ldap_syntax(id)
144:         end
145:       end
146:     end
names(group) click to toggle source
    # File lib/active_ldap/schema.rb, line 18
18:     def names(group)
19:       alias_map(group).keys
20:     end
object_class(name) click to toggle source
     # File lib/active_ldap/schema.rb, line 108
108:     def object_class(name)
109:       cache([:object_class, name]) do
110:         ObjectClass.new(name, self)
111:       end
112:     end
object_class_attribute(name, attribute_name) click to toggle source
     # File lib/active_ldap/schema.rb, line 122
122:     def object_class_attribute(name, attribute_name)
123:       cache([:object_class_attribute, name, attribute_name]) do
124:         fetch("objectClasses", name, attribute_name)
125:       end
126:     end
object_classes() click to toggle source
     # File lib/active_ldap/schema.rb, line 114
114:     def object_classes
115:       cache([:object_classes]) do
116:         names("objectClasses").collect do |name|
117:           object_class(name)
118:         end
119:       end
120:     end
resolve_name(group, name) click to toggle source
    # File lib/active_ldap/schema.rb, line 26
26:     def resolve_name(group, name)
27:       alias_map(group)[normalize_schema_name(name)]
28:     end

Private Instance Methods

alias_map(group) click to toggle source
     # File lib/active_ldap/schema.rb, line 238
238:     def alias_map(group)
239:       ensure_parse(group)
240:       return {} if @schema_info[group].nil?
241:       @schema_info[group][:aliases] || {}
242:     end
cache(key) click to toggle source
     # File lib/active_ldap/schema.rb, line 166
166:     def cache(key)
167:       (@cache[key] ||= [yield])[0]
168:     end
default_entries() click to toggle source
     # File lib/active_ldap/schema.rb, line 259
259:     def default_entries
260:       {
261:         "objectClasses" => [],
262:         "attributeTypes" => [],
263:         "ldapSyntaxes" => [],
264:         "dITContentRules" => [],
265:         "matchingRules" => [],
266:       }
267:     end
determine_id_or_name(id_or_name, aliases) click to toggle source
     # File lib/active_ldap/schema.rb, line 176
176:     def determine_id_or_name(id_or_name, aliases)
177:       if /\A[\d\.]+\z/ =~ id_or_name
178:         id = id_or_name
179:         name = nil
180:       else
181:         name = normalize_schema_name(id_or_name)
182:         id = aliases[name]
183:       end
184:       [id, name]
185:     end
ensure_parse(group) click to toggle source
     # File lib/active_ldap/schema.rb, line 244
244:     def ensure_parse(group)
245:       return if @entries[group].nil?
246:       unless @entries[group].empty?
247:         fetch(group, 'nonexistent', 'nonexistent')
248:       end
249:     end
ensure_schema_info(group) click to toggle source
     # File lib/active_ldap/schema.rb, line 170
170:     def ensure_schema_info(group)
171:       @schema_info[group] ||= {:ids => {}, :aliases => {}}
172:       info = @schema_info[group]
173:       [info, info[:ids], info[:aliases]]
174:     end
normalize_attribute_name(name) click to toggle source
     # File lib/active_ldap/schema.rb, line 255
255:     def normalize_attribute_name(name)
256:       name.upcase.gsub(/_/, "-")
257:     end
normalize_entries(entries) click to toggle source
     # File lib/active_ldap/schema.rb, line 269
269:     def normalize_entries(entries)
270:       normalized_entries = default_entries
271:       normalized_keys = normalized_entries.keys
272:       entries.each do |name, values|
273:         normalized_name = normalized_keys.find do |key|
274:           key.downcase == name
275:         end
276:         normalized_entries[normalized_name || name] = values
277:       end
278:       normalized_entries
279:     end
normalize_schema_name(name) click to toggle source
     # File lib/active_ldap/schema.rb, line 251
251:     def normalize_schema_name(name)
252:       name.downcase.sub(/;.*$/, '')
253:     end
parse_attributes(str, attributes) click to toggle source
     # File lib/active_ldap/schema.rb, line 209
209:     def parse_attributes(str, attributes)
210:       str.scan(/([A-Z\-_]+)\s+
211:                 (?:\(\s*(\w[\w\-;]*(?:\s+\$\s+\w[\w\-;]*)*)\s*\)|
212:                    \(\s*([^\)]*)\s*\)|
213:                    '([^\']*)'|
214:                    ((?!#{RESERVED_NAMES_RE})[a-zA-Z][a-zA-Z\d\-;]*)|
215:                    (\d[\d\.\{\}]+)|
216:                    ()
217:                 )/
218:                ) do |name, multi_amp, multi, string, literal, syntax, no_value|
219:         case
220:         when multi_amp
221:           values = multi_amp.rstrip.split(/\s*\$\s*/)
222:         when multi
223:           values = multi.scan(/\s*'([^\']*)'\s*/).collect {|value| value[0]}
224:         when string
225:           values = [string]
226:         when literal
227:           values = [literal]
228:         when syntax
229:           values = [syntax]
230:         when no_value
231:           values = ["TRUE"]
232:         end
233:         attributes[normalize_attribute_name(name)] ||= []
234:         attributes[normalize_attribute_name(name)].concat(values)
235:       end
236:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.