using System; using System.Reactive.Threading.Tasks; using Octokit.Reactive.Internal; namespace Octokit.Reactive { /// /// A client for GitHub's Pull Requests API. /// /// /// See the Pull Requests API documentation for more information. /// public class ObservablePullRequestsClient : IObservablePullRequestsClient { readonly IPullRequestsClient _client; readonly IConnection _connection; /// /// Client for managing reviews. /// public IObservablePullRequestReviewsClient Review { get; private set; } /// /// Client for managing review comments. /// public IObservablePullRequestReviewCommentsClient ReviewComment { get; private set; } /// /// Client for managing review requests. /// public IObservablePullRequestReviewRequestsClient ReviewRequest { get; private set; } /// /// Client for locking/unlocking a conversation on a pull request /// public IObservableLockUnlockClient LockUnlock { get; private set; } public ObservablePullRequestsClient(IGitHubClient client) { Ensure.ArgumentNotNull(client, nameof(client)); _client = client.Repository.PullRequest; _connection = client.Connection; Review = new ObservablePullRequestReviewsClient(client); ReviewComment = new ObservablePullRequestReviewCommentsClient(client); ReviewRequest = new ObservablePullRequestReviewRequestsClient(client); LockUnlock = new ObservableLockUnlockClient(client); } /// /// Gets a single Pull Request by number. /// /// /// http://developer.github.com/v3/pulls/#get-a-single-pull-request /// public IObservable Get(string owner, string name, int pullRequestNumber) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.Get(owner, name, pullRequestNumber).ToObservable(); } /// /// Gets a single Pull Request by number. /// /// /// http://developer.github.com/v3/pulls/#get-a-single-pull-request /// /// The Id of the repository /// The number of the pull request public IObservable Get(long repositoryId, int pullRequestNumber) { return _client.Get(repositoryId, pullRequestNumber).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 public IObservable GetAllForRepository(string owner, string name) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return GetAllForRepository(owner, name, ApiOptions.None); } /// /// Gets all open pull requests for the repository. /// /// /// http://developer.github.com/v3/pulls/#list-pull-requests /// /// The Id of the repository public IObservable GetAllForRepository(long repositoryId) { return GetAllForRepository(repositoryId, ApiOptions.None); } /// /// 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 /// Options for changing the API response public IObservable GetAllForRepository(string owner, string name, ApiOptions options) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(options, nameof(options)); return _connection.GetAndFlattenAllPages(ApiUrls.PullRequests(owner, name), null, options); } /// /// Gets all open pull requests for the repository. /// /// /// http://developer.github.com/v3/pulls/#list-pull-requests /// /// The Id of the repository /// Options for changing the API response public IObservable GetAllForRepository(long repositoryId, ApiOptions options) { Ensure.ArgumentNotNull(options, nameof(options)); return _connection.GetAndFlattenAllPages(ApiUrls.PullRequests(repositoryId), null, options); } /// /// 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 public IObservable GetAllForRepository(string owner, string name, PullRequestRequest request) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(request, nameof(request)); return GetAllForRepository(owner, name, request, ApiOptions.None); } /// /// Query pull requests for the repository based on criteria /// /// /// http://developer.github.com/v3/pulls/#list-pull-requests /// /// The Id of the repository /// Used to filter and sort the list of pull requests returned public IObservable GetAllForRepository(long repositoryId, PullRequestRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); return GetAllForRepository(repositoryId, request, ApiOptions.None); } /// /// 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 /// Options for changing the API response public IObservable GetAllForRepository(string owner, string name, PullRequestRequest request, ApiOptions options) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(request, nameof(request)); Ensure.ArgumentNotNull(options, nameof(options)); return _connection.GetAndFlattenAllPages(ApiUrls.PullRequests(owner, name), request.ToParametersDictionary(), options); } /// /// Query pull requests for the repository based on criteria /// /// /// http://developer.github.com/v3/pulls/#list-pull-requests /// /// The Id of the repository /// Used to filter and sort the list of pull requests returned /// Options for changing the API response public IObservable GetAllForRepository(long repositoryId, PullRequestRequest request, ApiOptions options) { Ensure.ArgumentNotNull(request, nameof(request)); Ensure.ArgumentNotNull(options, nameof(options)); return _connection.GetAndFlattenAllPages(ApiUrls.PullRequests(repositoryId), request.ToParametersDictionary(), options); } /// /// 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 public IObservable Create(string owner, string name, NewPullRequest newPullRequest) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(newPullRequest, nameof(newPullRequest)); return _client.Create(owner, name, newPullRequest).ToObservable(); } /// /// Creates a pull request for the specified repository. /// /// http://developer.github.com/v3/pulls/#create-a-pull-request /// The Id of the repository /// A instance describing the new PullRequest to create public IObservable Create(long repositoryId, NewPullRequest newPullRequest) { Ensure.ArgumentNotNull(newPullRequest, nameof(newPullRequest)); return _client.Create(repositoryId, 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 /// public IObservable Update(string owner, string name, int pullRequestNumber, PullRequestUpdate pullRequestUpdate) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(pullRequestUpdate, nameof(pullRequestUpdate)); return _client.Update(owner, name, pullRequestNumber, pullRequestUpdate).ToObservable(); } /// /// Update a pull request for the specified repository. /// /// http://developer.github.com/v3/pulls/#update-a-pull-request /// The Id of the repository /// The PullRequest number /// An instance describing the changes to make to the PullRequest /// public IObservable Update(long repositoryId, int pullRequestNumber, PullRequestUpdate pullRequestUpdate) { Ensure.ArgumentNotNull(pullRequestUpdate, nameof(pullRequestUpdate)); return _client.Update(repositoryId, pullRequestNumber, 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 public IObservable Merge(string owner, string name, int pullRequestNumber, MergePullRequest mergePullRequest) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(mergePullRequest, nameof(mergePullRequest)); return _client.Merge(owner, name, pullRequestNumber, mergePullRequest).ToObservable(); } /// /// Merge a pull request. /// /// http://developer.github.com/v3/pulls/#merge-a-pull-request-merge-buttontrade /// The Id of the repository /// The pull request number /// A instance describing a pull request merge public IObservable Merge(long repositoryId, int pullRequestNumber, MergePullRequest mergePullRequest) { Ensure.ArgumentNotNull(mergePullRequest, nameof(mergePullRequest)); return _client.Merge(repositoryId, pullRequestNumber, 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 public IObservable Merged(string owner, string name, int pullRequestNumber) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _client.Merged(owner, name, pullRequestNumber).ToObservable(); } /// /// Gets the pull request merge status. /// /// http://developer.github.com/v3/pulls/#get-if-a-pull-request-has-been-merged /// The Id of the repository /// The pull request number public IObservable Merged(long repositoryId, int pullRequestNumber) { return _client.Merged(repositoryId, pullRequestNumber).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 public IObservable Commits(string owner, string name, int pullRequestNumber) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _connection.GetAndFlattenAllPages(ApiUrls.PullRequestCommits(owner, name, pullRequestNumber)); } /// /// Gets the list of commits on a pull request. /// /// http://developer.github.com/v3/pulls/#list-commits-on-a-pull-request /// The Id of the repository /// The pull request number public IObservable Commits(long repositoryId, int pullRequestNumber) { return _connection.GetAndFlattenAllPages(ApiUrls.PullRequestCommits(repositoryId, pullRequestNumber)); } /// /// Get the list of files on a pull request. /// /// https://developer.github.com/v3/pulls/#list-pull-requests-files /// The owner of the repository /// The name of the repository /// The pull request number /// Options for changing the API response public IObservable Files(string owner, string name, int pullRequestNumber, ApiOptions options) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); return _connection.GetAndFlattenAllPages(ApiUrls.PullRequestFiles(owner, name, pullRequestNumber), options); } /// /// Get the list of files on a pull request. /// /// https://developer.github.com/v3/pulls/#list-pull-requests-files /// The owner of the repository /// The name of the repository /// The pull request number public IObservable Files(string owner, string name, int pullRequestNumber) { return Files(owner, name, pullRequestNumber, ApiOptions.None); } /// /// Get the list of files on a pull request. /// /// https://developer.github.com/v3/pulls/#list-pull-requests-files /// The Id of the repository /// The pull request number /// Options for changing the API response public IObservable Files(long repositoryId, int pullRequestNumber, ApiOptions options) { return _connection.GetAndFlattenAllPages(ApiUrls.PullRequestFiles(repositoryId, pullRequestNumber), options); } /// /// Get the list of files on a pull request. /// /// https://developer.github.com/v3/pulls/#list-pull-requests-files /// The Id of the repository /// The pull request number public IObservable Files(long repositoryId, int pullRequestNumber) { return Files(repositoryId, pullRequestNumber, ApiOptions.None); } } }