public function callStripeObject(ApiResource $object, string $method, array $arguments = [])
    {
        try {
            switch (count($arguments)) {
                // Method has no signature (it doesn't accept any argument)
                case 0:
                    $return = $object->$method();
                    break;
                // Method with 1 argument only accept one between "options" or "params"
                case 1:
                    // So we simply use the unique value in the array
                    $return = $object->$method($arguments[0]);
                    break;
                // Method with 3 arguments accept id, params and options
                case 2:
                    // If the value is an empty array, then set it as null
                    $params  = empty($arguments['params']) ? null : $arguments['params'];
                    $options = empty($arguments['options']) ? null : $arguments['options'];
                    $return  = $object->$method($params, $options);
                    break;
                default:
                    throw new \RuntimeException('The arguments passed don\'t correspond to the allowed number. Please, review them.');
            }
        } catch (Base $e) {
            $return = $this->handleException($e);

            if ('retry' === $return) {
                $return = $this->callStripeObject($object, $method);
            }
        }

        // Reset the number of retries
        $this->retries = 0;

        return $return;
    }