diff --git a/Octokit.Reactive/Clients/IObservableGitDatabaseClient.cs b/Octokit.Reactive/Clients/IObservableGitDatabaseClient.cs index d071c78a..14b8a369 100644 --- a/Octokit.Reactive/Clients/IObservableGitDatabaseClient.cs +++ b/Octokit.Reactive/Clients/IObservableGitDatabaseClient.cs @@ -7,5 +7,6 @@ { IObservableTagsClient Tag { get; set; } IObservableCommitsClient Commit { get; set; } + IObservableReferencesClient Reference { get; set; } } } \ No newline at end of file diff --git a/Octokit.Reactive/Clients/IObservableReferencesClient.cs b/Octokit.Reactive/Clients/IObservableReferencesClient.cs new file mode 100644 index 00000000..699b45bc --- /dev/null +++ b/Octokit.Reactive/Clients/IObservableReferencesClient.cs @@ -0,0 +1,83 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using System.Reactive; + +namespace Octokit.Reactive +{ + public interface IObservableReferencesClient + { + /// + /// Gets a reference for a given repository by reference name + /// + /// + /// http://developer.github.com/v3/git/refs/#get-a-reference + /// + /// The owner of the repository + /// The name of the repository + /// Tha name of the reference + /// + [SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", MessageId = "Get", + Justification = "Method makes a network request")] + IObservable Get(string owner, string name, string reference); + + /// + /// Gets all references for a given repository + /// + /// + /// http://developer.github.com/v3/git/refs/#get-all-references + /// + /// The owner of the repository + /// The name of the repository + /// + IObservable GetAll(string owner, string name); + + /// + /// Gets references for a given repository by sub-namespace, i.e. "tags" or "heads" + /// + /// + /// http://developer.github.com/v3/git/refs/#get-all-references + /// + /// The owner of the repository + /// The name of the repository + /// The sub-namespace to get references for + /// + IObservable GetAll(string owner, string name, string subNamespace); + + /// + /// Creates a reference for a given repository + /// + /// + /// http://developer.github.com/v3/git/refs/#create-a-reference + /// + /// The owner of the repository + /// The name of the repository + /// The reference to create + /// + IObservable Create(string owner, string name, NewReference reference); + + /// + /// Updates a reference for a given repository by reference name + /// + /// + /// http://developer.github.com/v3/git/refs/#update-a-reference + /// + /// The owner of the repository + /// The name of the repository + /// The name of the reference + /// The updated reference data + /// + IObservable Update(string owner, string name, string reference, ReferenceUpdate referenceUpdate); + + /// + /// Deletes a reference for a given repository by reference name + /// + /// + /// http://developer.github.com/v3/git/refs/#delete-a-reference + /// + /// The owner of the repository + /// The name of the repository + /// The name of the reference + /// + IObservable Delete(string owner, string name, string reference); + } +} \ No newline at end of file diff --git a/Octokit.Reactive/Clients/ObservableGitDatabaseClient.cs b/Octokit.Reactive/Clients/ObservableGitDatabaseClient.cs index 48a65d0a..2ea26302 100644 --- a/Octokit.Reactive/Clients/ObservableGitDatabaseClient.cs +++ b/Octokit.Reactive/Clients/ObservableGitDatabaseClient.cs @@ -6,9 +6,11 @@ { Tag = new ObservableTagsClient(client); Commit = new ObservableCommitsClient(client); + Reference = new ObservableReferencesClient(client); } public IObservableTagsClient Tag { get; set; } public IObservableCommitsClient Commit { get; set; } + public IObservableReferencesClient Reference { get; set; } } } \ No newline at end of file diff --git a/Octokit.Reactive/Clients/ObservableReferencesClient.cs b/Octokit.Reactive/Clients/ObservableReferencesClient.cs new file mode 100644 index 00000000..3537607c --- /dev/null +++ b/Octokit.Reactive/Clients/ObservableReferencesClient.cs @@ -0,0 +1,136 @@ +using System; +using System.Reactive; +using System.Reactive.Threading.Tasks; + +using Octokit.Reactive.Internal; + +namespace Octokit.Reactive +{ + public class ObservableReferencesClient : IObservableReferencesClient + { + readonly IReferencesClient _reference; + readonly IConnection _connection; + + public ObservableReferencesClient(IGitHubClient client) + { + Ensure.ArgumentNotNull(client, "client"); + + _reference = client.GitDatabase.Reference; + _connection = client.Connection; + } + + /// + /// Gets a reference for a given repository by reference name + /// + /// + /// http://developer.github.com/v3/git/refs/#get-a-reference + /// + /// The owner of the repository + /// The name of the repository + /// Tha name of the reference + /// + public IObservable Get(string owner, string name, string reference) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(name, "name"); + Ensure.ArgumentNotNullOrEmptyString(reference, "reference"); + + return _reference.Get(owner, name, reference).ToObservable(); + } + + /// + /// Gets all references for a given repository + /// + /// + /// http://developer.github.com/v3/git/refs/#get-all-references + /// + /// The owner of the repository + /// The name of the repository + /// + public IObservable GetAll(string owner, string name) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(name, "name"); + + return _connection.GetAndFlattenAllPages(ApiUrls.Reference(owner, name)); + } + + /// + /// Gets references for a given repository by sub-namespace, i.e. "tags" or "heads" + /// + /// + /// http://developer.github.com/v3/git/refs/#get-all-references + /// + /// The owner of the repository + /// The name of the repository + /// The sub-namespace to get references for + /// + public IObservable GetAll(string owner, string name, string subNamespace) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(name, "name"); + Ensure.ArgumentNotNullOrEmptyString(subNamespace, "subNamespace"); + + return _connection.GetAndFlattenAllPages(ApiUrls.Reference(owner, name, subNamespace)); + } + + /// + /// Creates a reference for a given repository + /// + /// + /// http://developer.github.com/v3/git/refs/#create-a-reference + /// + /// The owner of the repository + /// The name of the repository + /// The reference to create + /// + public IObservable Create(string owner, string name, NewReference reference) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(name, "name"); + Ensure.ArgumentNotNull(reference, "reference"); + + return _reference.Create(owner, name, reference).ToObservable(); + } + + /// + /// Updates a reference for a given repository by reference name + /// + /// + /// http://developer.github.com/v3/git/refs/#update-a-reference + /// + /// The owner of the repository + /// The name of the repository + /// The name of the reference + /// The updated reference data + /// + public IObservable Update(string owner, string name, string reference, ReferenceUpdate referenceUpdate) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(name, "name"); + Ensure.ArgumentNotNullOrEmptyString(reference, "reference"); + Ensure.ArgumentNotNull(referenceUpdate, "update"); + + return _reference.Update(owner, name, reference, referenceUpdate).ToObservable(); + } + + /// + /// Deletes a reference for a given repository by reference name + /// + /// + /// http://developer.github.com/v3/git/refs/#delete-a-reference + /// + /// The owner of the repository + /// The name of the repository + /// The name of the reference + /// + public IObservable Delete(string owner, string name, string reference) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(name, "name"); + Ensure.ArgumentNotNullOrEmptyString(reference, "reference"); + + return _reference.Delete(owner, name, reference).ToObservable(); + } + } +} \ No newline at end of file diff --git a/Octokit.Reactive/Octokit.Reactive-Mono.csproj b/Octokit.Reactive/Octokit.Reactive-Mono.csproj index 8a65ae6c..331c8ca3 100644 --- a/Octokit.Reactive/Octokit.Reactive-Mono.csproj +++ b/Octokit.Reactive/Octokit.Reactive-Mono.csproj @@ -110,6 +110,8 @@ + + diff --git a/Octokit.Reactive/Octokit.Reactive-MonoAndroid.csproj b/Octokit.Reactive/Octokit.Reactive-MonoAndroid.csproj index da0f5738..92e7e2c2 100644 --- a/Octokit.Reactive/Octokit.Reactive-MonoAndroid.csproj +++ b/Octokit.Reactive/Octokit.Reactive-MonoAndroid.csproj @@ -119,6 +119,8 @@ + + diff --git a/Octokit.Reactive/Octokit.Reactive-Monotouch.csproj b/Octokit.Reactive/Octokit.Reactive-Monotouch.csproj index cd3bfee2..1c08e72f 100644 --- a/Octokit.Reactive/Octokit.Reactive-Monotouch.csproj +++ b/Octokit.Reactive/Octokit.Reactive-Monotouch.csproj @@ -114,6 +114,8 @@ + + diff --git a/Octokit.Reactive/Octokit.Reactive.csproj b/Octokit.Reactive/Octokit.Reactive.csproj index 1c38caf5..1917158a 100644 --- a/Octokit.Reactive/Octokit.Reactive.csproj +++ b/Octokit.Reactive/Octokit.Reactive.csproj @@ -74,6 +74,8 @@ Properties\SolutionInfo.cs + +