using System; using System.Reactive.Threading.Tasks; using Octokit.Reactive.Internal; namespace Octokit.Reactive { public class ObservableOrganizationsClient : IObservableOrganizationsClient { readonly IOrganizationsClient _client; readonly IConnection _connection; /// /// Initializes a new Organization API client. /// /// An used to make the requests public ObservableOrganizationsClient(IGitHubClient client) { Ensure.ArgumentNotNull(client, nameof(client)); Member = new ObservableOrganizationMembersClient(client); Team = new ObservableTeamsClient(client); OutsideCollaborator = new ObservableOrganizationOutsideCollaboratorsClient(client); _client = client.Organization; _connection = client.Connection; } /// /// Returns a client to manage members of an organization. /// public IObservableOrganizationMembersClient Member { get; private set; } /// /// Returns a client to manage teams for an organization. /// public IObservableTeamsClient Team { get; private set; } /// /// Returns a client to manage outside collaborators of an organization. /// public IObservableOrganizationOutsideCollaboratorsClient OutsideCollaborator { get; private set; } /// /// Returns the specified organization. /// /// The login of the specified organization, /// public IObservable Get(string org) { Ensure.ArgumentNotNullOrEmptyString(org, nameof(org)); return _client.Get(org).ToObservable(); } /// /// Returns all the organizations for the current user. /// /// public IObservable GetAllForCurrent() { return GetAllForCurrent(ApiOptions.None); } /// /// Returns all the organizations for the current user. /// /// Options for changing the API response /// public IObservable GetAllForCurrent(ApiOptions options) { Ensure.ArgumentNotNull(options, nameof(options)); return _connection.GetAndFlattenAllPages(ApiUrls.UserOrganizations()); } /// /// Returns all the organizations for the specified user /// /// The login for the user /// public IObservable GetAllForUser(string user) { Ensure.ArgumentNotNullOrEmptyString(user, nameof(user)); return _connection.GetAndFlattenAllPages(ApiUrls.UserOrganizations(user)); } /// /// Returns all the organizations for the specified user /// /// The login for the user /// Options for changing the API response /// public IObservable GetAllForUser(string user, ApiOptions options) { Ensure.ArgumentNotNullOrEmptyString(user, nameof(user)); Ensure.ArgumentNotNull(options, nameof(options)); return _connection.GetAndFlattenAllPages(ApiUrls.UserOrganizations(user), options); } /// /// Returns all the organizations /// /// public IObservable GetAll() { return _connection.GetAndFlattenAllPages(ApiUrls.AllOrganizations()); } /// /// Returns all the organizations /// /// Search parameters of the last organization seen /// public IObservable GetAll(OrganizationRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); var url = ApiUrls.AllOrganizations(request.Since); return _connection.GetAndFlattenAllPages(url); } /// /// Update the specified organization with data from . /// /// The name of the organization to update. /// /// Thrown if the client is not authenticated. /// A public IObservable Update(string organizationName, OrganizationUpdate updateRequest) { Ensure.ArgumentNotNullOrEmptyString(organizationName, nameof(organizationName)); Ensure.ArgumentNotNull(updateRequest, nameof(updateRequest)); return _client.Update(organizationName, updateRequest).ToObservable(); } } }