Skip to content

Commit

Permalink
Merge pull request #776 from TeamBinary/pr-495ext
Browse files Browse the repository at this point in the history
Fork/Hook issue #698
  • Loading branch information
shiftkey committed May 13, 2015
2 parents d15dead + 3d56bbf commit e4d25a3
Show file tree
Hide file tree
Showing 43 changed files with 1,605 additions and 12 deletions.
12 changes: 12 additions & 0 deletions Octokit.Reactive/Clients/IObservableRepositoriesClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,18 @@ public interface IObservableRepositoriesClient
/// </remarks>
IObservableRepositoryCommentsClient RepositoryComments { get; }

/// <summary>
/// A client for GitHub's Repository Hooks API.
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/">Hooks API documentation</a> for more information.</remarks>
IObservableRepositoryHooksClient Hooks { get; }

/// <summary>
/// A client for GitHub's Repository Forks API.
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/forks/">Forks API documentation</a> for more information.</remarks>
IObservableRepositoryForksClient Forks { get; }

/// <summary>
/// Client for GitHub's Repository Contents API.
/// </summary>
Expand Down
21 changes: 21 additions & 0 deletions Octokit.Reactive/Clients/IObservableRepositoryForksClient.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System;

namespace Octokit.Reactive
{
public interface IObservableRepositoryForksClient
{
/// <summary>
/// Gets the list of forks defined for a repository
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/forks/#list-forks">API documentation</a> for more information.</remarks>
/// <returns></returns>
IObservable<Repository> GetAll(string owner, string repositoryName, RepositoryForksListRequest request);

/// <summary>
/// Creates a fork for a repository. Specify organization in the fork parameter to create for an organization.
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/forks/#create-a-fork">API documentation</a> for more information.</remarks>
/// <returns></returns>
IObservable<Repository> Create(string owner, string repositoryName, NewRepositoryFork fork);
}
}
64 changes: 64 additions & 0 deletions Octokit.Reactive/Clients/IObservableRepositoryHooksClient.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
using System;
using System.Diagnostics.CodeAnalysis;
using System.Reactive;

namespace Octokit.Reactive
{
public interface IObservableRepositoryHooksClient
{
/// <summary>
/// Gets the list of hooks defined for a repository
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#list">API documentation</a> for more information.</remarks>
/// <returns></returns>
IObservable<RepositoryHook> GetAll(string owner, string repositoryName);

/// <summary>
/// Gets a single hook defined for a repository by id
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#get-single-hook">API documentation</a> for more information.</remarks>
/// <returns></returns>
[SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", MessageId = "Get", Justification = "This is ok; we're matching HTTP verbs not keyworks")]
IObservable<RepositoryHook> Get(string owner, string repositoryName, int hookId);

/// <summary>
/// Creates a hook for a repository
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#create-a-hook">API documentation</a> for more information.</remarks>
/// <returns></returns>
IObservable<RepositoryHook> Create(string owner, string repositoryName, NewRepositoryHook hook);

/// <summary>
/// Edits a hook for a repository
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#edit-a-hook">API documentation</a> for more information.</remarks>
/// <returns></returns>
IObservable<RepositoryHook> Edit(string owner, string repositoryName, int hookId, EditRepositoryHook hook);

/// <summary>
/// Tests a hook for a repository
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#test-a-hook">API documentation</a> for more information.
/// This will trigger the hook with the latest push to the current repository if the hook is subscribed to push events. If the hook
/// is not subscribed to push events, the server will respond with 204 but no test POST will be generated.</remarks>
/// <returns></returns>
IObservable<Unit> Test(string owner, string repositoryName, int hookId);

/// <summary>
/// This will trigger a ping event to be sent to the hook.
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#edit-a-hook">API documentation</a> for more information.</remarks>
/// <returns></returns>
IObservable<Unit> Ping(string owner, string repositoryName, int hookId);

/// <summary>
/// Deletes a hook for a repository
/// </summary>
/// <param name="owner"></param>
/// <param name="repositoryName"></param>
/// <param name="hookId"></param>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#delete-a-hook">API documentation</a> for more information.</remarks>
/// <returns></returns>
IObservable<Unit> Delete(string owner, string repositoryName, int hookId);
}
}
14 changes: 14 additions & 0 deletions Octokit.Reactive/Clients/ObservableRepositoriesClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ public ObservableRepositoriesClient(IGitHubClient client)
_client = client.Repository;
_connection = client.Connection;
CommitStatus = new ObservableCommitStatusClient(client);
Hooks = new ObservableRepositoryHooksClient(client);
Forks = new ObservableRepositoryForksClient(client);
RepoCollaborators = new ObservableRepoCollaboratorsClient(client);
Deployment = new ObservableDeploymentsClient(client);
Statistics = new ObservableStatisticsClient(client);
Expand Down Expand Up @@ -210,6 +212,18 @@ public IObservable<Repository> GetAllForOrg(string organization)
/// </remarks>
public IObservableRepositoryCommentsClient RepositoryComments { get; private set; }

/// <summary>
/// A client for GitHub's Repository Hooks API.
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/">Hooks API documentation</a> for more information.</remarks>
public IObservableRepositoryHooksClient Hooks { get; private set; }

/// <summary>
/// A client for GitHub's Repository Forks API.
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/forks/">Forks API documentation</a> for more information.</remarks>
public IObservableRepositoryForksClient Forks { get; private set; }

/// <summary>
/// Client for GitHub's Repository Contents API.
/// </summary>
Expand Down
53 changes: 53 additions & 0 deletions Octokit.Reactive/Clients/ObservableRepositoryForksClient.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using System;
using System.Reactive.Threading.Tasks;
using Octokit.Reactive.Internal;

namespace Octokit.Reactive
{
public class ObservableRepositoryForksClient : IObservableRepositoryForksClient
{
readonly IRepositoryForksClient _client;
readonly IConnection _connection;

/// <summary>
/// Initializes a new GitHub Repos Fork API client.
/// </summary>
/// <param name="client"></param>
public ObservableRepositoryForksClient(IGitHubClient client)
{
Ensure.ArgumentNotNull(client, "client");
_client = client.Repository.Forks;
_connection = client.Connection;
}

/// <summary>
/// Gets the list of forks defined for a repository
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/forks/#list-forks">API documentation</a> for more information.</remarks>
/// <returns></returns>
public IObservable<Repository> GetAll(string owner, string repositoryName, RepositoryForksListRequest request)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");

if (request == null)
return _connection.GetAndFlattenAllPages<Repository>(ApiUrls.RepositoryForks(owner, repositoryName));
else
return _connection.GetAndFlattenAllPages<Repository>(ApiUrls.RepositoryForks(owner, repositoryName), request.ToParametersDictionary());
}

/// <summary>
/// Creates a fork for a repository. Specify organization in the fork parameter to create for an organization.
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/forks/#create-a-fork">API documentation</a> for more information.</remarks>
/// <returns></returns>
public IObservable<Repository> Create(string owner, string repositoryName, NewRepositoryFork fork)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
Ensure.ArgumentNotNull(fork, "fork");

return _client.Create(owner, repositoryName, fork).ToObservable();
}
}
}
119 changes: 119 additions & 0 deletions Octokit.Reactive/Clients/ObservableRepositoryHooksClient.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
using System;
using System.Reactive;
using System.Reactive.Threading.Tasks;
using Octokit.Reactive.Internal;

namespace Octokit.Reactive
{
public class ObservableRepositoryHooksClient : IObservableRepositoryHooksClient
{
readonly IRepositoryHooksClient _client;
readonly IConnection _connection;

public ObservableRepositoryHooksClient(IGitHubClient client)
{
Ensure.ArgumentNotNull(client, "client");

_client = client.Repository.Hooks;
_connection = client.Connection;
}

/// <summary>
/// Gets the list of hooks defined for a repository
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#list">API documentation</a> for more information.</remarks>
/// <returns></returns>
public IObservable<RepositoryHook> GetAll(string owner, string repositoryName)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");

return _connection.GetAndFlattenAllPages<RepositoryHook>(ApiUrls.RepositoryHooks(owner, repositoryName));
}

/// <summary>
/// Gets a single hook defined for a repository by id
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#get-single-hook">API documentation</a> for more information.</remarks>
/// <returns></returns>
public IObservable<RepositoryHook> Get(string owner, string repositoryName, int hookId)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");

return _client.Get(owner, repositoryName, hookId).ToObservable();
}

/// <summary>
/// Creates a hook for a repository
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#create-a-hook">API documentation</a> for more information.</remarks>
/// <returns></returns>
public IObservable<RepositoryHook> Create(string owner, string repositoryName, NewRepositoryHook hook)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
Ensure.ArgumentNotNull(hook, "hook");

return _client.Create(owner, repositoryName, hook).ToObservable();
}

/// <summary>
/// Edits a hook for a repository
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#edit-a-hook">API documentation</a> for more information.</remarks>
/// <returns></returns>
public IObservable<RepositoryHook> Edit(string owner, string repositoryName, int hookId, EditRepositoryHook hook)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
Ensure.ArgumentNotNull(hook, "hook");

return _client.Edit(owner, repositoryName, hookId, hook).ToObservable();
}

/// <summary>
/// Tests a hook for a repository
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#test-a-hook">API documentation</a> for more information.
/// This will trigger the hook with the latest push to the current repository if the hook is subscribed to push events. If the hook
/// is not subscribed to push events, the server will respond with 204 but no test POST will be generated.</remarks>
/// <returns></returns>
public IObservable<Unit> Test(string owner, string repositoryName, int hookId)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");

return _client.Test(owner, repositoryName, hookId).ToObservable();
}

/// <summary>
/// This will trigger a ping event to be sent to the hook.
/// </summary>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#edit-a-hook">API documentation</a> for more information.</remarks>
/// <returns></returns>
public IObservable<Unit> Ping(string owner, string repositoryName, int hookId)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");

return _client.Ping(owner, repositoryName, hookId).ToObservable();
}

/// <summary>
/// Deletes a hook for a repository
/// </summary>
/// <param name="owner"></param>
/// <param name="repositoryName"></param>
/// <param name="hookId"></param>
/// <remarks>See <a href="http://developer.github.com/v3/repos/hooks/#delete-a-hook">API documentation</a> for more information.</remarks>
/// <returns></returns>
public IObservable<Unit> Delete(string owner, string repositoryName, int hookId)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");

return _client.Delete(owner, repositoryName, hookId).ToObservable();
}
}
}
4 changes: 4 additions & 0 deletions Octokit.Reactive/Octokit.Reactive-Mono.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,10 @@
<Compile Include="Clients\ObservableRepositoryDeployKeysClient.cs" />
<Compile Include="Clients\IObservableUserKeysClient.cs" />
<Compile Include="Clients\ObservableUserKeysClient.cs" />
<Compile Include="Clients\IObservableRepositoryForksClient.cs" />
<Compile Include="Clients\IObservableRepositoryHooksClient.cs" />
<Compile Include="Clients\ObservableRepositoryForksClient.cs" />
<Compile Include="Clients\ObservableRepositoryHooksClient.cs" />
<Compile Include="Clients\IObservableRepositoryContentsClient.cs" />
<Compile Include="Clients\ObservableRepositoryContentsClient.cs" />
<Compile Include="Clients\IObservableMergingClient.cs" />
Expand Down
4 changes: 4 additions & 0 deletions Octokit.Reactive/Octokit.Reactive-MonoAndroid.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,10 @@
<Compile Include="Clients\ObservableRepositoryDeployKeysClient.cs" />
<Compile Include="Clients\IObservableUserKeysClient.cs" />
<Compile Include="Clients\ObservableUserKeysClient.cs" />
<Compile Include="Clients\IObservableRepositoryForksClient.cs" />
<Compile Include="Clients\IObservableRepositoryHooksClient.cs" />
<Compile Include="Clients\ObservableRepositoryForksClient.cs" />
<Compile Include="Clients\ObservableRepositoryHooksClient.cs" />
<Compile Include="Clients\IObservableRepositoryContentsClient.cs" />
<Compile Include="Clients\ObservableRepositoryContentsClient.cs" />
<Compile Include="Clients\IObservableMergingClient.cs" />
Expand Down
4 changes: 4 additions & 0 deletions Octokit.Reactive/Octokit.Reactive-Monotouch.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,10 @@
<Compile Include="Clients\ObservableRepositoryDeployKeysClient.cs" />
<Compile Include="Clients\IObservableUserKeysClient.cs" />
<Compile Include="Clients\ObservableUserKeysClient.cs" />
<Compile Include="Clients\IObservableRepositoryForksClient.cs" />
<Compile Include="Clients\IObservableRepositoryHooksClient.cs" />
<Compile Include="Clients\ObservableRepositoryForksClient.cs" />
<Compile Include="Clients\ObservableRepositoryHooksClient.cs" />
<Compile Include="Clients\IObservableRepositoryContentsClient.cs" />
<Compile Include="Clients\ObservableRepositoryContentsClient.cs" />
<Compile Include="Clients\IObservableMergingClient.cs" />
Expand Down
4 changes: 4 additions & 0 deletions Octokit.Reactive/Octokit.Reactive.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@
<Compile Include="Clients\IObservableRepositoryContentsClient.cs" />
<Compile Include="Clients\ObservableRepositoryCommentsClient.cs" />
<Compile Include="Clients\IObservableRepositoryCommentsClient.cs" />
<Compile Include="Clients\IObservableRepositoryHooksClient.cs" />
<Compile Include="Clients\IObservableRepositoryForksClient.cs" />
<Compile Include="Clients\IObservableDeploymentsClient.cs" />
<Compile Include="Clients\IObservableDeploymentStatusClient.cs" />
<Compile Include="Clients\IObservableFeedsClient.cs" />
Expand Down Expand Up @@ -145,6 +147,7 @@
<Compile Include="Clients\ObservablePullRequestReviewCommentsClient.cs" />
<Compile Include="Clients\ObservableReleasesClient.cs" />
<Compile Include="Clients\ObservableRepositoriesClient.cs" />
<Compile Include="Clients\ObservableRepositoryHooksClient.cs" />
<Compile Include="Clients\ObservableSshKeysClient.cs" />
<Compile Include="Clients\ObservableStarredClient.cs" />
<Compile Include="Clients\ObservableStatisticsClient.cs" />
Expand All @@ -156,6 +159,7 @@
<Compile Include="Clients\ObservableUsersClient.cs" />
<Compile Include="Clients\IObservableAssigneesClient.cs" />
<Compile Include="Clients\IObservableNotificationsClient.cs" />
<Compile Include="Clients\ObservableRepositoryForksClient.cs" />
<Compile Include="Clients\ObservableWatchedClient.cs" />
<Compile Include="Helpers\AuthorizationExtensions.cs" />
<Compile Include="Helpers\ConnectionExtensions.cs" />
Expand Down
Loading

0 comments on commit e4d25a3

Please sign in to comment.