public function run()
    {
        $isValid = true;
        if (empty($this->rules)) {
            return true;
        }

        $this->rulesExecuted = [];

        foreach ($this->rules as $key => $val) {
            $rules = explode('|', $val);

            foreach ($rules as $rule) {

                // Executes rule for min and max validation.
                if (string_has($rule, ':') && strstr($rule, 'max') || strstr($rule, 'min')) {
                    $isValid = $this->doValidateMinMax($rule, $key, $isValid);
                } elseif (string_has($rule, ':') && (!strstr($rule, 'max') && !strstr($rule, 'min'))) {
                    // Executes rule for other than min, max validation with ":" keyword in rule.
                    $isValid = $this->validateRulesHasPlaceHolder($key, $rule, $isValid);
                } else {
                    // Executes all other rules.
                    $isValid = $this->doValidateData($rule, $key, $isValid);
                }

                $this->rulesExecuted[] = $isValid;
            }
        }

        /*
        | We will fire all after validation callbacks
        | This is useful to override error message with
        | custom messages
        */
        foreach ($this->after as $event) {
            call_user_func($event);
        }

        // We will return false if any one of the validation rules failed.
        if (in_array(false, $this->rulesExecuted)) {
            return false;
        }

        return true;
    }