Validate object against validator

        :param obj: the object to validate

def validate(self, obj, pointer=None):
        """
        Validate object against validator

        :param obj: the object to validate
        """

        pointer = pointer or '#'

        validator = deepcopy(self)
        validator.errors = []
        validator.fail_fast = False

        obj = deepcopy(obj)
        obj = validator.validate_enum(obj, pointer)
        obj = validator.validate_type(obj, pointer)
        obj = validator.validate_disallow(obj, pointer)
        obj = validator.validate_extends(obj, pointer)

        if validator.is_array(obj):
            obj = validator.validate_max_items(obj, pointer)
            obj = validator.validate_min_items(obj, pointer)
            obj = validator.validate_items(obj, pointer)
            obj = validator.validate_unique_items(obj, pointer)

        if validator.is_number(obj):
            obj = validator.validate_maximum(obj, pointer)
            obj = validator.validate_minimum(obj, pointer)
            obj = validator.validate_divisible_by(obj, pointer)

        if validator.is_object(obj):
            obj = validator.validate_dependencies(obj, pointer)
            obj = validator.validate_properties(obj, pointer)

        if validator.is_string(obj):
            obj = validator.validate_max_length(obj, pointer)
            obj = validator.validate_min_length(obj, pointer)
            obj = validator.validate_pattern(obj, pointer)
            obj = validator.validate_format(obj, pointer)

        if validator.errors:
            raise ValidationError('multiple errors',
                                  obj,
                                  errors=validator.errors)

        return obj