Module | ActiveLdap::Validations |
In: |
lib/active_ldap/validations.rb
|
human_attribute_name | -> | human_attribute_name_active_ldap |
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, 17: :human_attribute_name_active_ldap 18: unless method_defined?(:human_attribute_name_with_gettext) 19: def human_attribute_name_with_gettext(attribute_key_name) 20: s_("#{self}|#{attribute_key_name.humanize}") 21: end 22: end 23: end 24: 25: # Workaround for GetText's ugly implementation 26: begin 27: instance_method(:save_without_validation) 28: rescue NameError 29: alias_method_chain :save, :validation 30: alias_method_chain :save!, :validation 31: alias_method_chain :update_attribute, :validation_skipping 32: end 33: 34: validate_on_create :validate_duplicated_dn_creation 35: validate :validate_required_ldap_values 36: validate :validate_ldap_values 37: 38: class << self 39: def evaluate_condition_with_active_ldap_support(condition, entry) 40: evaluate_condition_without_active_ldap_support(condition, entry) 41: rescue ActiveRecord::ActiveRecordError 42: raise Error, $!.message 43: end 44: alias_method_chain :evaluate_condition, :active_ldap_support 45: end 46: 47: def save_with_active_ldap_support! 48: save_without_active_ldap_support! 49: rescue ActiveRecord::RecordInvalid 50: raise EntryInvalid, $!.message 51: end 52: alias_method_chain :save!, :active_ldap_support 53: 54: def valid? 55: ensure_apply_object_class 56: super 57: end 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: alias_method_chain :run_validations, :active_ldap_support 66: end 67: end
# File lib/active_ldap/validations.rb, line 39 39: def evaluate_condition_with_active_ldap_support(condition, entry) 40: evaluate_condition_without_active_ldap_support(condition, entry) 41: rescue ActiveRecord::ActiveRecordError 42: raise Error, $!.message 43: end
# File lib/active_ldap/validations.rb, line 19 19: def human_attribute_name_with_gettext(attribute_key_name) 20: s_("#{self}|#{attribute_key_name.humanize}") 21: 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 47 47: def save_with_active_ldap_support! 48: save_without_active_ldap_support! 49: rescue ActiveRecord::RecordInvalid 50: raise EntryInvalid, $!.message 51: end
# File lib/active_ldap/validations.rb, line 54 54: def valid? 55: ensure_apply_object_class 56: super 57: end
# File lib/active_ldap/validations.rb, line 70 70: def validate_duplicated_dn_creation 71: if id and exist? 72: if ActiveLdap.get_text_supported? 73: format = _("%{fn} is duplicated: %s") 74: else 75: format = _("is duplicated: %s") 76: end 77: errors.add("dn", format % dn) 78: end 79: end
# File lib/active_ldap/validations.rb, line 134 134: def validate_ldap_value(attribute, name, value, option=nil) 135: case value 136: when Hash 137: value.each do |sub_option, val| 138: validate_ldap_value(attribute, name, val, 139: [option, sub_option].compact.join(";")) 140: end 141: when Array 142: value.each do |val| 143: validate_ldap_value(attribute, name, val, option) 144: end 145: else 146: failed_reason = attribute.validate(value) 147: if failed_reason 148: params = [value, 149: self.class.human_syntax_description(attribute.syntax), 150: failed_reason] 151: if ActiveLdap.get_text_supported? 152: if option 153: format = 154: _("%{fn} (%s) has invalid format: %s: required syntax: %s: %s") 155: else 156: format = _("%{fn} has invalid format: %s: required syntax: %s: %s") 157: end 158: else 159: if option 160: format = _("(%s) has invalid format: %s: required syntax: %s: %s") 161: else 162: format = _("has invalid format: %s: required syntax: %s: %s") 163: end 164: end 165: params.unshift(option) if option 166: errors.add(name, format % params) 167: end 168: end 169: end
# File lib/active_ldap/validations.rb, line 126 126: def validate_ldap_values 127: @attribute_schemata.each do |name, attribute| 128: self[name, true].each do |value| 129: validate_ldap_value(attribute, name, value) 130: end 131: end 132: end
Basic validation:
# File lib/active_ldap/validations.rb, line 85 85: def validate_required_ldap_values 86: # Make sure all MUST attributes have a value 87: @object_classes.each do |object_class| 88: object_class.must.each do |required_attribute| 89: # Normalize to ensure we catch schema problems 90: # needed? 91: real_name = to_real_attribute_name(required_attribute.name, true) 92: raise UnknownAttribute.new(required_attribute) if real_name.nil? 93: # # Set default if it wasn't yet set. 94: # @data[real_name] ||= [] # need? 95: value = @data[real_name] || [] 96: # Check for missing requirements. 97: if value.empty? 98: _schema = schema 99: aliases = required_attribute.aliases.collect do |name| 100: self.class.human_attribute_name(name) 101: end 102: args = [self.class.human_object_class_name(object_class)] 103: if ActiveLdap.get_text_supported? 104: if aliases.empty? 105: format = _("%{fn} is required attribute by objectClass '%s'") 106: else 107: format = _("%{fn} is required attribute by objectClass " \ 108: "'%s': aliases: %s") 109: args << aliases.join(', ') 110: end 111: else 112: if aliases.empty? 113: format = "is required attribute by objectClass '%s'" 114: else 115: format = "is required attribute by objectClass '%s'" \ 116: ": aliases: %s" 117: args << aliases.join(', ') 118: end 119: end 120: errors.add(real_name, format % args) 121: end 122: end 123: end 124: end