using System; using System.Reactive.Threading.Tasks; using Octokit.Reactive.Internal; namespace Octokit.Reactive { public class ObservablePullRequestsClient : IObservablePullRequestsClient { readonly IPullRequestsClient _client; readonly IConnection _connection; /// /// Client for managing comments. /// public IObservablePullRequestReviewCommentsClient Comment { get; private set; } public ObservablePullRequestsClient(IGitHubClient client) { Ensure.ArgumentNotNull(client, "client"); _client = client.Repository.PullRequest; _connection = client.Connection; Comment = new ObservablePullRequestReviewCommentsClient(client); } /// /// Gets a single Pull Request by number. /// /// /// http://developer.github.com/v3/pulls/#get-a-single-pull-request /// /// A result public IObservable Get(string owner, string name, int number) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); return _client.Get(owner, name, number).ToObservable(); } /// /// Gets all open pull requests for the repository. /// /// /// http://developer.github.com/v3/pulls/#list-pull-requests /// /// The owner of the repository /// The name of the repository /// A collection of results public IObservable GetForRepository(string owner, string name) { return _connection.GetAndFlattenAllPages(ApiUrls.PullRequests(owner, name)); } /// /// Query pull requests for the repository based on criteria /// /// /// http://developer.github.com/v3/pulls/#list-pull-requests /// /// The owner of the repository /// The name of the repository /// Used to filter and sort the list of pull requests returned /// A collection of results public IObservable GetForRepository(string owner, string name, PullRequestRequest request) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); Ensure.ArgumentNotNull(request, "request"); return _connection.GetAndFlattenAllPages(ApiUrls.PullRequests(owner, name), request.ToParametersDictionary()); } /// /// Creates a pull request for the specified repository. /// /// http://developer.github.com/v3/pulls/#create-a-pull-request /// The owner of the repository /// The name of the repository /// A instance describing the new PullRequest to create /// A created result public IObservable Create(string owner, string name, NewPullRequest newPullRequest) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); Ensure.ArgumentNotNull(newPullRequest, "newPullRequest"); return _client.Create(owner, name, newPullRequest).ToObservable(); } /// /// Update a pull request for the specified repository. /// /// http://developer.github.com/v3/pulls/#update-a-pull-request /// The owner of the repository /// The name of the repository /// The PullRequest number /// An instance describing the changes to make to the PullRequest /// /// An updated result public IObservable Update(string owner, string name, int number, PullRequestUpdate pullRequestUpdate) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); Ensure.ArgumentNotNull(pullRequestUpdate, "pullRequestUpdate"); return _client.Update(owner, name, number, pullRequestUpdate).ToObservable(); } /// /// Merge a pull request. /// /// http://developer.github.com/v3/pulls/#merge-a-pull-request-merge-buttontrade /// The owner of the repository /// The name of the repository /// The pull request number /// A instance describing a pull request merge /// A result public IObservable Merge(string owner, string name, int number, MergePullRequest mergePullRequest) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); Ensure.ArgumentNotNull(mergePullRequest, "mergePullRequest"); return _client.Merge(owner, name, number, mergePullRequest).ToObservable(); } /// /// Gets the pull request merge status. /// /// http://developer.github.com/v3/pulls/#get-if-a-pull-request-has-been-merged /// The owner of the repository /// The name of the repository /// The pull request number /// A result - true if the pull request has been merged, false otherwise public IObservable Merged(string owner, string name, int number) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); return _client.Merged(owner, name, number).ToObservable(); } /// /// Gets the list of commits on a pull request. /// /// http://developer.github.com/v3/pulls/#list-commits-on-a-pull-request /// The owner of the repository /// The name of the repository /// The pull request number /// A collection of results public IObservable Commits(string owner, string name, int number) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); return _connection.GetAndFlattenAllPages(ApiUrls.PullRequestCommits(owner, name, number)); } } }