module ActiveLdap::ObjectClass
def self.included(base)
def self.included(base) base.extend(ClassMethods) end
def add_class(*target_classes)
def add_class(*target_classes) replace_class(classes + target_classes) end
def assert_have_all_required_classes(new_classes)
def assert_have_all_required_classes(new_classes) _schema = schema normalized_new_classes = new_classes.collect(&:downcase) required_classes = self.class.required_classes required_classes = required_classes.reject do |required_class_name| normalized_new_classes.include?(required_class_name.downcase) or (normalized_new_classes.find do |new_class| required_class = _schema.object_class(required_class_name) _schema.object_class(new_class).super_class?(required_class) end) end unless required_classes.empty? format = _("Can't remove required objectClass: %s") required_class_names = required_classes.collect do |required_class| required_class = _schema.object_class(required_class) self.class.human_object_class_name(required_class) end message = format % required_class_names.join(", ") raise RequiredObjectClassMissed, message end end
def assert_object_classes(new_classes)
def assert_object_classes(new_classes) assert_valid_object_class_value_type(new_classes) assert_valid_object_class_value(new_classes) assert_have_all_required_classes(new_classes) end
def assert_valid_object_class_value(new_classes)
def assert_valid_object_class_value(new_classes) _schema = schema invalid_classes = new_classes.reject do |new_class| !_schema.object_class(new_class).id.nil? end unless invalid_classes.empty? format = _("unknown objectClass in LDAP server: %s") message = format % invalid_classes.join(', ') raise ObjectClassError, message end end
def assert_valid_object_class_value_type(new_classes)
def assert_valid_object_class_value_type(new_classes) invalid_classes = new_classes.reject do |new_class| new_class.is_a?(String) end unless invalid_classes.empty? format = _("Value in objectClass array is not a String: %s") invalid_classes_info = invalid_classes.collect do |invalid_class| "#{invalid_class.class}: #{invalid_class.inspect}" end.join(", ") raise TypeError, format % invalid_classes_info end end
def classes
def classes (get_attribute('objectClass', true) || []).dup end
def ensure_recommended_classes
def ensure_recommended_classes add_class(self.class.recommended_classes) end
def remove_class(*target_classes)
def remove_class(*target_classes) replace_class(classes - target_classes) end
def replace_class(*target_classes)
def replace_class(*target_classes) new_classes = target_classes.flatten.compact.uniq assert_object_classes(new_classes) if new_classes.sort != classes.sort original_attributes = must + may set_attribute('objectClass', new_classes) clear_object_class_based_cache new_attributes = must + may removed_attributes = original_attributes - new_attributes clear_removed_attributes_data(removed_attributes) end end