Skip to content

Added GitHub Enterprise classes, tests, and documentation. #148

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 25, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions doc/enterprise.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
## Enterprise API
[Back to the navigation](index.md)

Provides information about a GitHub Enterprise installation. Wraps [GitHub Enterprise API](http://developer.github.com/v3/enterprise/).

In order to configure the client to point to a GitHub Enterprise installation, do the following:

```php
<?php

// This file is generated by Composer
require_once 'vendor/autoload.php';

$client = new \Github\Client();

// Set the URL of your GitHub Enterprise installation
$client->setEnterpriseUrl('https://ghe.host');

// Use the client as you would ordinarily
$repositories = $client->api('user')->repositories('ornicar');
```

To use the Stats and License APIs, you will need to authenticate using a GitHub Enterprise site admin account.

1 change: 1 addition & 0 deletions doc/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Navigation
APIs:
* [Authorizations](authorizations.md)
* [Commits](commits.md)
* [Enterprise](enterprise.md)
* [Gists](gists.md)
* [Issues](issues.md)
* [Comments](issue/comments.md)
Expand Down
32 changes: 32 additions & 0 deletions lib/Github/Api/Enterprise.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace Github\Api;

use Github\Api\Enterprise\Stats;
use Github\Api\Enterprise\License;

/**
* Getting information about a GitHub Enterprise instance.
*
* @link https://developer.github.com/v3/enterprise/
* @author Joseph Bielawski <[email protected]>
* @author Guillermo A. Fisher <[email protected]>
*/
class Enterprise extends AbstractApi
{
/**
* @return Stats
*/
public function stats()
{
return new Stats($this->client);
}

/**
* @return License
*/
public function license()
{
return new License($this->client);
}
}
19 changes: 19 additions & 0 deletions lib/Github/Api/Enterprise/License.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace Github\Api\Enterprise;

use Github\Api\AbstractApi;

class License extends AbstractApi
{
/**
* Provides information about your Enterprise license (only available to site admins).
* @link https://developer.github.com/v3/enterprise/license/
*
* @return array array of license information
*/
public function show()
{
return $this->get('enterprise/settings/license');
}
}
128 changes: 128 additions & 0 deletions lib/Github/Api/Enterprise/Stats.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
<?php

namespace Github\Api\Enterprise;

use Github\Api\AbstractApi;

class Stats extends AbstractApi
{
/**
* Returns the number of open and closed issues
*
* @return array array with totals of open and closed issues
*/
public function issues()
{
return $this->show('issues');
}

/**
* Returns the number of active and inactive hooks
*
* @return array array with totals of active and inactive hooks
*/
public function hooks()
{
return $this->show('hooks');
}

/**
* Returns the number of open and closed milestones
*
* @return array array with totals of open and closed milestones
*/
public function milestones()
{
return $this->show('milestones');
}

/**
* Returns the number of organizations, teams, team members, and disabled organizations
*
* @return array array with totals of organizations, teams, team members, and disabled organizations
*/
public function orgs()
{
return $this->show('orgs');
}

/**
* Returns the number of comments on issues, pull requests, commits, and gists
*
* @return array array with totals of comments on issues, pull requests, commits, and gists
*/
public function comments()
{
return $this->show('comments');
}

/**
* Returns the number of GitHub Pages sites
*
* @return array array with totals of GitHub Pages sites
*/
public function pages()
{
return $this->show('pages');
}

/**
* Returns the number of suspended and admin users
*
* @return array array with totals of suspended and admin users
*/
public function users()
{
return $this->show('users');
}

/**
* Returns the number of private and public gists
*
* @return array array with totals of private and public gists
*/
public function gists()
{
return $this->show('gists');
}

/**
* Returns the number of merged, mergeable, and unmergeable pull requests
*
* @return array array with totals of merged, mergeable, and unmergeable pull requests
*/
public function pulls()
{
return $this->show('pulls');
}

/**
* Returns the number of organization-owned repositories, root repositories, forks, pushed commits, and wikis
*
* @return array array with totals of organization-owned repositories, root repositories, forks, pushed commits, and wikis
*/
public function repos()
{
return $this->show('repos');
}

/**
* Returns all of the statistics
*
* @return array array with all of the statistics
*/
public function all()
{
return $this->show('all');
}

/**
* @param string $type The type of statistics to show
*
* @return array
*/
public function show($type)
{
return $this->get('enterprise/stats/' . rawurlencode($type));
}
}
32 changes: 29 additions & 3 deletions lib/Github/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,11 @@ public function api($name)
$api = new Api\CurrentUser($this);
break;

case 'ent':
case 'enterprise':
$api = new Api\Enterprise($this);
break;

case 'git':
case 'git_data':
$api = new Api\GitData($this);
Expand Down Expand Up @@ -173,6 +178,17 @@ public function authenticate($tokenOrLogin, $password = null, $authMethod = null
$this->getHttpClient()->authenticate($tokenOrLogin, $password, $authMethod);
}

/**
* Sets the URL of your GitHub Enterprise instance.
*
* @param string $enterpriseUrl URL of the API in the form of http(s)://hostname
*/
public function setEnterpriseUrl($enterpriseUrl)
{
$baseUrl = (substr($enterpriseUrl, -1) == '/') ? substr($enterpriseUrl, 0, -1) : $enterpriseUrl;
$this->getHttpClient()->client->setBaseUrl($baseUrl . '/api/v3');
}

/**
* @return HttpClient
*/
Expand Down Expand Up @@ -237,11 +253,21 @@ public function setOption($name, $value)
if (!array_key_exists($name, $this->options)) {
throw new InvalidArgumentException(sprintf('Undefined option called: "%s"', $name));
}

if ('api_version' == $name && !in_array($value, array('v3', 'beta'))) {
throw new InvalidArgumentException(sprintf('Invalid API version ("%s"), valid are: %s', $name, implode(', ', array('v3', 'beta'))));
$supportedApiVersions = $this->getSupportedApiVersions();
if ('api_version' == $name && !in_array($value, $supportedApiVersions)) {
throw new InvalidArgumentException(sprintf('Invalid API version ("%s"), valid are: %s', $name, implode(', ', $supportedApiVersions)));
}

$this->options[$name] = $value;
}

/**
* Returns an array of valid API versions supported by this client.
*
* @return array
*/
public function getSupportedApiVersions()
{
return array('v3', 'beta');
}
}
38 changes: 38 additions & 0 deletions test/Github/Tests/Api/EnterpriseTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php
/**
* This file is part of the PHP GitHub API package.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Github\Tests\Api;

class EnterpriseTest extends TestCase
{
/**
* @test
*/
public function shouldGetEntepriseStatsApiObject()
{
$api = $this->getApiMock();

$this->assertInstanceOf('Github\Api\Enterprise\Stats', $api->stats());
}

/**
* @test
*/
public function shouldGetEnterpriseLicenseApiObject()
{
$api = $this->getApiMock();

$this->assertInstanceOf('Github\Api\Enterprise\License', $api->license());
}

protected function getApiClass()
{
return 'Github\Api\Enterprise';
}
}