public function sendRequest($method, $path, array $options = array()) { $path = ltrim($path, '/'); // leading slash in path fails in github:enterprise $token = null; if (!empty($options['access_token'])) { $token = $options['access_token']; } else { if (!empty($options['oauth_token'])) { $token = $options['oauth_token']; } else { $token = $this->configuration()->get('oauth_token'); } } $force_urlencoded = false; if (!empty($options['force_urlencoded']) && $options['force_urlencoded']) { $force_urlencoded = true; } $url = null; if (!empty($options['endpoint'])) { $url = $options['endpoint']; } else { $url = $this->configuration()->get('api_endpoint'); } $connection = $this->connection()->create($options); $listener = $connection['listener']; $options = $connection['options']; $connection = $connection['connection']; if (!empty($options['accept'])) { $connection->addHeader('Accept: ' . $options['accept']); } else { $connection->addHeader('Accept: application/vnd.github.beta+json'); } if ($token) { $connection->addHeader('Authorization: token ' . $token); } $browser = new \Buzz\Browser(); if ($this->fixture) { $request_client = new Request\FixtureRequest($this->fixture); } else { $request_client = new \Buzz\Client\Curl(); } $browser->setClient($request_client); if (!empty($listener)) { $browser->addListener($listener); } if (strtolower($method) == 'get') { $path .= '?' . http_build_query($options); } elseif (in_array(strtolower($method), array('patch', 'post', 'put'))) { $connection->setContent(json_encode($options, true)); } $connection->fromUrl($url); $connection->setResource('/' . $path); $connection->setMethod($method); $request_host = $this->configuration()->get('request_host'); if (!empty($request_host)) { $connection->setHost($request_host); } $response = $browser->send($connection); $this->fixture = false; $this->handleErrors($connection, $response); return $response; }