| Module | ActiveLdap::Validations |
| In: |
lib/active_ldap/validations.rb
|
| human_attribute_name | -> | human_attribute_name_active_ldap |
| human_attribute_name | -> | human_attribute_name_active_record |
| human_attribute_name_active_ldap | -> | human_attribute_name |
# File lib/active_ldap/validations.rb, line 5
5: def self.append_features(base)
6: super
7:
8: base.class_eval do
9: alias_method :new_record?, :new_entry?
10: class << self
11: alias_method :human_attribute_name_active_ldap,
12: :human_attribute_name
13: end
14: include ActiveRecord::Validations
15: class << self
16: alias_method :human_attribute_name_active_record,
17: :human_attribute_name
18: alias_method :human_attribute_name,
19: :human_attribute_name_active_ldap
20: unless method_defined?(:human_attribute_name_with_gettext)
21: def human_attribute_name_with_gettext(attribute_key_name)
22: s_("#{self}|#{attribute_key_name.humanize}")
23: end
24: end
25: end
26:
27: # Workaround for GetText's ugly implementation
28: begin
29: instance_method(:save_without_validation)
30: rescue NameError
31: alias_method_chain :save, :validation
32: alias_method_chain :save!, :validation
33: alias_method_chain :update_attribute, :validation_skipping
34: end
35:
36: validate_on_create :validate_duplicated_dn_creation
37: validate :validate_excluded_classes
38: validate :validate_required_ldap_values
39: validate :validate_ldap_values
40:
41: class << self
42: if method_defined?(:evaluate_condition)
43: def evaluate_condition_with_active_ldap_support(condition, entry)
44: evaluate_condition_without_active_ldap_support(condition, entry)
45: rescue ActiveRecord::ActiveRecordError
46: raise Error, $!.message
47: end
48: alias_method_chain :evaluate_condition, :active_ldap_support
49: end
50: end
51:
52: def save_with_active_ldap_support!
53: save_without_active_ldap_support!
54: rescue ActiveRecord::RecordInvalid
55: raise EntryInvalid, $!.message
56: end
57: alias_method_chain :save!, :active_ldap_support
58:
59: private
60: def run_validations_with_active_ldap_support(validation_method)
61: run_validations_without_active_ldap_support(validation_method)
62: rescue ActiveRecord::ActiveRecordError
63: raise Error, $!.message
64: end
65: if private_method_defined?(:run_validations)
66: alias_method_chain :run_validations, :active_ldap_support
67: else
68: alias_method(:run_callbacks_with_active_ldap_support,
69: :run_validations_with_active_ldap_support)
70: alias_method_chain :run_callbacks, :active_ldap_support
71: alias_method(:run_validations_without_active_ldap_support,
72: :run_callbacks_without_active_ldap_support)
73: end
74: end
75: end
# File lib/active_ldap/validations.rb, line 43
43: def evaluate_condition_with_active_ldap_support(condition, entry)
44: evaluate_condition_without_active_ldap_support(condition, entry)
45: rescue ActiveRecord::ActiveRecordError
46: raise Error, $!.message
47: end
# File lib/active_ldap/validations.rb, line 21
21: def human_attribute_name_with_gettext(attribute_key_name)
22: s_("#{self}|#{attribute_key_name.humanize}")
23: end
# File lib/active_ldap/validations.rb, line 60
60: def run_validations_with_active_ldap_support(validation_method)
61: run_validations_without_active_ldap_support(validation_method)
62: rescue ActiveRecord::ActiveRecordError
63: raise Error, $!.message
64: end
# File lib/active_ldap/validations.rb, line 52
52: def save_with_active_ldap_support!
53: save_without_active_ldap_support!
54: rescue ActiveRecord::RecordInvalid
55: raise EntryInvalid, $!.message
56: end
# File lib/active_ldap/validations.rb, line 78
78: def validate_duplicated_dn_creation
79: if id and exist?
80: if ActiveLdap.get_text_supported?
81: format = _("%{fn} is duplicated: %s")
82: else
83: format = _("is duplicated: %s")
84: end
85: errors.add("dn", format % dn)
86: end
87: end
# File lib/active_ldap/validations.rb, line 89
89: def validate_excluded_classes
90: return if self.class.excluded_classes.empty?
91:
92: _schema = schema
93: unexpected_classes = self.class.excluded_classes.collect do |name|
94: _schema.object_class(name)
95: end
96: unexpected_classes -= classes.collect do |name|
97: _schema.object_class(name)
98: end
99: return if unexpected_classes.empty?
100:
101: names = unexpected_classes.collect do |object_class|
102: self.class.human_object_class_name(object_class)
103: end
104: if ActiveLdap.get_text_supported?
105: format = n_("%{fn} has excluded value: %s",
106: "%{fn} has excluded values: %s",
107: names.size)
108: else
109: if names.size == 1
110: format = "has excluded value: %s"
111: else
112: format = "has excluded values: %s"
113: end
114: end
115: errors.add("objectClass", format % names.join(", "))
116: end
# File lib/active_ldap/validations.rb, line 168
168: def validate_ldap_value(attribute, name, value)
169: failed_reason, option = attribute.validate(value)
170: return if failed_reason.nil?
171: params = [self.class.human_readable_format(value),
172: self.class.human_syntax_description(attribute.syntax),
173: failed_reason]
174: if ActiveLdap.get_text_supported?
175: if option
176: format =
177: _("%{fn} (%s) has invalid format: %s: required syntax: %s: %s")
178: else
179: format = _("%{fn} has invalid format: %s: required syntax: %s: %s")
180: end
181: else
182: if option
183: format = _("(%s) has invalid format: %s: required syntax: %s: %s")
184: else
185: format = _("has invalid format: %s: required syntax: %s: %s")
186: end
187: end
188: params.unshift(option) if option
189: errors.add(name, format % params)
190: end
# File lib/active_ldap/validations.rb, line 160
160: def validate_ldap_values
161: entry_attribute.schemata.each do |name, attribute|
162: value = self[name]
163: next if value.nil?
164: validate_ldap_value(attribute, name, value)
165: end
166: end
Basic validation:
# File lib/active_ldap/validations.rb, line 122
122: def validate_required_ldap_values
123: _schema = nil
124: # Make sure all MUST attributes have a value
125: entry_attribute.object_classes.each do |object_class|
126: object_class.must.each do |required_attribute|
127: # Normalize to ensure we catch schema problems
128: # needed?
129: real_name = to_real_attribute_name(required_attribute.name, true)
130: raise UnknownAttribute.new(required_attribute) if real_name.nil?
131:
132: value = @data[real_name] || []
133: next unless self.class.blank_value?(value)
134:
135: _schema ||= schema
136: aliases = required_attribute.aliases.collect do |name|
137: self.class.human_attribute_name(name)
138: end
139: args = [self.class.human_object_class_name(object_class)]
140: if ActiveLdap.get_text_supported?
141: if aliases.empty?
142: format = _("%{fn} is required attribute by objectClass '%s'")
143: else
144: format = _("%{fn} is required attribute by objectClass " \
145: "'%s': aliases: %s")
146: args << aliases.join(', ')
147: end
148: else
149: format = "is required attribute by objectClass '%s'"
150: unless aliases.empty?
151: format << ": aliases: %s"
152: args << aliases.join(', ')
153: end
154: end
155: errors.add(real_name, format % args)
156: end
157: end
158: end