diff --git a/Octokit.Reactive/Clients/IObservableRepositoriesClient.cs b/Octokit.Reactive/Clients/IObservableRepositoriesClient.cs index 9ccf2107..2b1a1bb2 100644 --- a/Octokit.Reactive/Clients/IObservableRepositoriesClient.cs +++ b/Octokit.Reactive/Clients/IObservableRepositoriesClient.cs @@ -347,5 +347,12 @@ namespace Octokit.Reactive /// See the Repository Deploy Keys API documentation for more information. /// IObservableRepositoryDeployKeysClient DeployKeys { get; } + /// + /// A client for GitHub's Repository Pages API. + /// + /// + /// See the Repository Pages API documentation for more information. + /// + IObservableRepositoryPagesClient Page { get; } } } diff --git a/Octokit.Reactive/Clients/IObservableRepositoryPagesClient.cs b/Octokit.Reactive/Clients/IObservableRepositoryPagesClient.cs new file mode 100644 index 00000000..cca0df72 --- /dev/null +++ b/Octokit.Reactive/Clients/IObservableRepositoryPagesClient.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Octokit.Reactive +{ + public interface IObservableRepositoryPagesClient + { + /// + /// Gets the page metadata for a given repository + /// + /// The owner of the repository + /// The name of the repository + /// + /// See the API documentation for more information. + /// + /// + [SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", MessageId = "Get")] + IObservable Get(string owner, string repositoryName); + /// + /// Gets all build metadata for a given repository + /// + /// The owner of the repository + /// The name of the repository + /// + /// See the API documentation for more information. + /// + /// + IObservable GetBuilds(string owner, string repositoryName); + /// + /// Gets the build metadata for the last build for a given repository + /// + /// The owner of the repository + /// The name of the repository + /// + /// See the API documentation for more information. + /// + /// + IObservable GetLatestBuild(string owner, string repositoryName); + } +} diff --git a/Octokit.Reactive/Clients/ObservableRepositoriesClient.cs b/Octokit.Reactive/Clients/ObservableRepositoriesClient.cs index 0ee0fb24..39b21268 100644 --- a/Octokit.Reactive/Clients/ObservableRepositoriesClient.cs +++ b/Octokit.Reactive/Clients/ObservableRepositoriesClient.cs @@ -41,6 +41,7 @@ namespace Octokit.Reactive DeployKeys = new ObservableRepositoryDeployKeysClient(client); Content = new ObservableRepositoryContentsClient(client); Merging = new ObservableMergingClient(client); + Page = new ObservableRepositoryPagesClient(client); } /// @@ -493,5 +494,12 @@ namespace Octokit.Reactive /// See the Repository Deploy Keys API documentation for more information. /// public IObservableRepositoryDeployKeysClient DeployKeys { get; private set; } + /// + /// A client for GitHub's Repository Pages API. + /// + /// + /// See the Repository Pages API documentation for more information. + /// + public IObservableRepositoryPagesClient Page { get; private set; } } } diff --git a/Octokit.Reactive/Clients/ObservableRepositoryPagesClient.cs b/Octokit.Reactive/Clients/ObservableRepositoryPagesClient.cs new file mode 100644 index 00000000..68ad0a6c --- /dev/null +++ b/Octokit.Reactive/Clients/ObservableRepositoryPagesClient.cs @@ -0,0 +1,48 @@ +using Octokit.Reactive.Internal; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reactive.Threading.Tasks; +using System.Text; +using System.Threading.Tasks; + +namespace Octokit.Reactive +{ + public class ObservableRepositoryPagesClient : IObservableRepositoryPagesClient + { + readonly IRepositoryPagesClient _client; + readonly IConnection _connection; + + public ObservableRepositoryPagesClient(IGitHubClient client) + { + Ensure.ArgumentNotNull(client, "client"); + + _client = client.Repository.Page; + _connection = client.Connection; + } + + public IObservable Get(string owner, string repositoryName) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName"); + + return _client.Get(owner, repositoryName).ToObservable(); + } + + public IObservable GetBuilds(string owner, string repositoryName) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName"); + + return _connection.GetAndFlattenAllPages(ApiUrls.RepositoryPageBuilds(owner, repositoryName)); + } + + public IObservable GetLatestBuild(string owner, string repositoryName) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName"); + + return _client.GetLatestBuild(owner, repositoryName).ToObservable(); + } + } +} diff --git a/Octokit.Reactive/Octokit.Reactive.csproj b/Octokit.Reactive/Octokit.Reactive.csproj index d25d860a..ad06ce2c 100644 --- a/Octokit.Reactive/Octokit.Reactive.csproj +++ b/Octokit.Reactive/Octokit.Reactive.csproj @@ -79,6 +79,7 @@ + @@ -102,6 +103,7 @@ + diff --git a/Octokit/Clients/RepositoryPagesClient.cs b/Octokit/Clients/RepositoryPagesClient.cs index a8492d9f..f6065633 100644 --- a/Octokit/Clients/RepositoryPagesClient.cs +++ b/Octokit/Clients/RepositoryPagesClient.cs @@ -54,7 +54,7 @@ namespace Octokit Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName"); - return ApiConnection.GetAll(ApiUrls.RepositoryBuilds(owner, repositoryName)); + return ApiConnection.GetAll(ApiUrls.RepositoryPageBuilds(owner, repositoryName)); } /// @@ -71,7 +71,7 @@ namespace Octokit Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName"); - return ApiConnection.Get(ApiUrls.RepositoryBuildsLatest(owner, repositoryName)); + return ApiConnection.Get(ApiUrls.RepositoryPageBuildsLatest(owner, repositoryName)); } } } diff --git a/Octokit/Helpers/ApiUrls.cs b/Octokit/Helpers/ApiUrls.cs index ee3b0d22..a1bc2dca 100644 --- a/Octokit/Helpers/ApiUrls.cs +++ b/Octokit/Helpers/ApiUrls.cs @@ -1560,12 +1560,12 @@ namespace Octokit return "repos/{0}/{1}/pages".FormatUri(owner, name); } - public static Uri RepositoryBuilds(string owner, string name) + public static Uri RepositoryPageBuilds(string owner, string name) { return "repos/{0}/{1}/pages/builds".FormatUri(owner, name); } - public static Uri RepositoryBuildsLatest(string owner, string name) + public static Uri RepositoryPageBuildsLatest(string owner, string name) { return "repos/{0}/{1}/pages/builds/latest".FormatUri(owner, name); }