Skip to content

Commit

Permalink
Merge pull request #148 from guillermoandrae/master
Browse files Browse the repository at this point in the history
Added GitHub Enterprise classes, tests, and documentation.
  • Loading branch information
cursedcoder committed Jun 25, 2014
2 parents c5475e2 + 861cf2e commit a462c35
Show file tree
Hide file tree
Showing 7 changed files with 271 additions and 3 deletions.
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 <stloyd@gmail.com>
* @author Guillermo A. Fisher <guillermoandraefisher@gmail.com>
*/
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 @@ -177,6 +182,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 @@ -241,11 +257,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';
}
}

0 comments on commit a462c35

Please sign in to comment.