From 133298789fe0634e394f3576b728ea34d98acd5b Mon Sep 17 00:00:00 2001 From: Peter MacNaughton Date: Sat, 8 Feb 2014 12:48:53 -0700 Subject: [PATCH] Adding IObservableUserEmailsClient and... default implementation. Still needs delete method which is skipped because it's a HTTP DELETE. There's currently nothing in the ApiConnection to handle this scenario and it's a rather unorthodox thing to support. delete. --- .../Clients/IObservableUserEmailsClient.cs | 35 +++++++++++++++++++ .../Clients/IObservableUsersClient.cs | 7 ---- .../Clients/ObservableUserEmailsClient.cs | 31 ++++++++++++++++ .../Clients/ObservableUsersClient.cs | 12 ------- Octokit.Reactive/Octokit.Reactive.csproj | 2 ++ 5 files changed, 68 insertions(+), 19 deletions(-) create mode 100644 Octokit.Reactive/Clients/IObservableUserEmailsClient.cs create mode 100644 Octokit.Reactive/Clients/ObservableUserEmailsClient.cs diff --git a/Octokit.Reactive/Clients/IObservableUserEmailsClient.cs b/Octokit.Reactive/Clients/IObservableUserEmailsClient.cs new file mode 100644 index 00000000..95f67d9e --- /dev/null +++ b/Octokit.Reactive/Clients/IObservableUserEmailsClient.cs @@ -0,0 +1,35 @@ +using System; +using System.Diagnostics.CodeAnalysis; + + +namespace Octokit.Reactive +{ + /// + /// A client for GitHub's User Emails API. + /// + /// + /// See the User Emails API documentation for more information. + /// + public interface IObservableUserEmailsClient + { + /// + /// Gets all email addresses for the authenticated user. + /// + /// + /// http://developer.github.com/v3/users/emails/#list-email-addresses-for-a-user + /// + /// The es for the authenticated user. + [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] + IObservable GetAll(); + + /// + /// Adds email addresses for the authenticated user. + /// + /// + /// http://developer.github.com/v3/users/emails/#add-email-addresses + /// + /// The email addresses to add. + /// Returns the added es. + IObservable Add(params string[] emailAddresses); + } +} diff --git a/Octokit.Reactive/Clients/IObservableUsersClient.cs b/Octokit.Reactive/Clients/IObservableUsersClient.cs index ef319da0..465739a2 100644 --- a/Octokit.Reactive/Clients/IObservableUsersClient.cs +++ b/Octokit.Reactive/Clients/IObservableUsersClient.cs @@ -27,12 +27,5 @@ namespace Octokit.Reactive /// Thrown if the client is not authenticated. /// A IObservable Update(UserUpdate user); - - /// - /// Returns emails for the current user. - /// - /// - [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] - IObservable GetEmails(); } } diff --git a/Octokit.Reactive/Clients/ObservableUserEmailsClient.cs b/Octokit.Reactive/Clients/ObservableUserEmailsClient.cs new file mode 100644 index 00000000..c50410aa --- /dev/null +++ b/Octokit.Reactive/Clients/ObservableUserEmailsClient.cs @@ -0,0 +1,31 @@ +using Octokit.Reactive.Internal; +using System; +using System.Reactive.Linq; +using System.Reactive.Threading.Tasks; + +namespace Octokit.Reactive +{ + public class ObservableUserEmailsClient : IObservableUserEmailsClient + { + readonly IUserEmailsClient _client; + readonly IConnection _connection; + + public ObservableUserEmailsClient(IGitHubClient client) + { + Ensure.ArgumentNotNull(client, "client"); + + _client = client.User.Email; + _connection = client.Connection; + } + + public IObservable GetAll() + { + return _connection.GetAndFlattenAllPages(ApiUrls.Emails()); + } + + public IObservable Add(params string[] emailAddresses) + { + return _client.Add(emailAddresses).ToObservable().SelectMany(a => a); + } + } +} diff --git a/Octokit.Reactive/Clients/ObservableUsersClient.cs b/Octokit.Reactive/Clients/ObservableUsersClient.cs index 5588e737..1648d8cc 100644 --- a/Octokit.Reactive/Clients/ObservableUsersClient.cs +++ b/Octokit.Reactive/Clients/ObservableUsersClient.cs @@ -1,20 +1,17 @@ using System; using System.Reactive.Threading.Tasks; -using Octokit.Reactive.Internal; namespace Octokit.Reactive { public class ObservableUsersClient : IObservableUsersClient { readonly IUsersClient _client; - readonly IConnection _connection; public ObservableUsersClient(IGitHubClient client) { Ensure.ArgumentNotNull(client, "client"); _client = client.User; - _connection = client.Connection; } /// @@ -50,14 +47,5 @@ namespace Octokit.Reactive return _client.Update(user).ToObservable(); } - - /// - /// Returns emails for the current user. - /// - /// - public IObservable GetEmails() - { - return _connection.GetAndFlattenAllPages(ApiUrls.Emails()); - } } } diff --git a/Octokit.Reactive/Octokit.Reactive.csproj b/Octokit.Reactive/Octokit.Reactive.csproj index 6c5c7e71..f66a07f1 100644 --- a/Octokit.Reactive/Octokit.Reactive.csproj +++ b/Octokit.Reactive/Octokit.Reactive.csproj @@ -73,6 +73,7 @@ Properties\SolutionInfo.cs + @@ -122,6 +123,7 @@ +