using System; using System.Reactive; using System.Reactive.Threading.Tasks; using Octokit.Reactive.Internal; namespace Octokit.Reactive { /// /// A client for GitHub's References API. /// /// /// See the References API documentation for more information. /// public class ObservableReferencesClient : IObservableReferencesClient { readonly IReferencesClient _reference; readonly IConnection _connection; public ObservableReferencesClient(IGitHubClient client) { Ensure.ArgumentNotNull(client, "client"); _reference = client.Git.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 /// The 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 a reference for a given repository by reference name /// /// /// http://developer.github.com/v3/git/refs/#get-a-reference /// /// The ID of the repository /// The name of the reference /// public IObservable Get(int repositoryId, string reference) { Ensure.ArgumentNotNullOrEmptyString(reference, "reference"); return _reference.Get(repositoryId, 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 all references for a given repository /// /// /// http://developer.github.com/v3/git/refs/#get-all-references /// /// The ID of the repository /// public IObservable GetAll(int repositoryId) { return _connection.GetAndFlattenAllPages(ApiUrls.Reference(repositoryId)); } /// /// 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 GetAllForSubNamespace(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)); } /// /// 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 ID of the repository /// The sub-namespace to get references for /// public IObservable GetAllForSubNamespace(int repositoryId, string subNamespace) { Ensure.ArgumentNotNullOrEmptyString(subNamespace, "subNamespace"); return _connection.GetAndFlattenAllPages(ApiUrls.Reference(repositoryId, 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(); } /// /// Creates a reference for a given repository /// /// /// http://developer.github.com/v3/git/refs/#create-a-reference /// /// The ID of the repository /// The reference to create /// public IObservable Create(int repositoryId, NewReference reference) { Ensure.ArgumentNotNull(reference, "reference"); return _reference.Create(repositoryId, 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(); } /// /// Updates a reference for a given repository by reference name /// /// /// http://developer.github.com/v3/git/refs/#update-a-reference /// /// The ID of the repository /// The name of the reference /// The updated reference data /// public IObservable Update(int repositoryId, string reference, ReferenceUpdate referenceUpdate) { Ensure.ArgumentNotNullOrEmptyString(reference, "reference"); Ensure.ArgumentNotNull(referenceUpdate, "update"); return _reference.Update(repositoryId, 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(); } /// /// Deletes a reference for a given repository by reference name /// /// /// http://developer.github.com/v3/git/refs/#delete-a-reference /// /// The ID of the repository /// The name of the reference /// public IObservable Delete(int repositoryId, string reference) { Ensure.ArgumentNotNullOrEmptyString(reference, "reference"); return _reference.Delete(repositoryId, reference).ToObservable(); } } }