Skip to content

Commit

Permalink
Started changing GitHubClient api to use GitHubResponse and GitHubReq…
Browse files Browse the repository at this point in the history
…uest objects.
  • Loading branch information
akilburge committed Aug 12, 2011
1 parent 63681fb commit 989d1cd
Show file tree
Hide file tree
Showing 19 changed files with 340 additions and 87 deletions.
8 changes: 8 additions & 0 deletions Parameter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using System;

public class Class1
{
public Class1()
{
}
}
3 changes: 1 addition & 2 deletions src/NGitHub/CommitService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@ public void GetCommitsAsync(string user,
repo,
branch,
pageNo);
var request = new RestRequest(resource, Method.GET);
var request = new GitHubRequest(resource, API.v2, Method.GET);
_client.CallApiAsync<CommitsResult>(request,
API.v2,
c => callback(c.Commits),
onError);
}
Expand Down
24 changes: 24 additions & 0 deletions src/NGitHub/Extensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System;

namespace NGitHub {
internal static class Extensions {
public static RestSharp.Method ToRestSharpMethod(this Method method) {
switch (method) {
case Method.GET:
return RestSharp.Method.GET;
case Method.POST:
return RestSharp.Method.POST;
case Method.PUT:
return RestSharp.Method.PUT;
case Method.DELETE:
return RestSharp.Method.DELETE;
case Method.HEAD:
return RestSharp.Method.HEAD;
case Method.OPTIONS:
return RestSharp.Method.OPTIONS;
default:
throw new InvalidOperationException();
}
}
}
}
2 changes: 1 addition & 1 deletion src/NGitHub/FeedService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ private void GetFeedItemsAsync(string resource,
var client = _factory.CreateRestClient(Constants.GitHubUrl);
client.Authenticator = _currentAuthenticator();

var request = new RestRequest(resource, Method.GET);
var request = new RestRequest(resource,RestSharp.Method.GET);
client.ExecuteAsync(request,
r => {
if (r.StatusCode != HttpStatusCode.OK) {
Expand Down
29 changes: 17 additions & 12 deletions src/NGitHub/GitHubClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,7 @@ public void LoginAsync(string login,
Logout();

var authenticator = new HttpBasicAuthenticator(login, password);
CallApiAsync<UserResult>(new RestRequest("/user/show/", Method.GET),
API.v2,
CallApiAsync<UserResult>(new GitHubRequest("/user/show/", API.v2, Method.GET),
authenticator,
u => {
_authenticator = authenticator;
Expand All @@ -103,15 +102,13 @@ public void Logout() {
_authenticator = new NullAuthenticator();
}

public void CallApiAsync<TResponseData>(RestRequest request,
API version,
public void CallApiAsync<TResponseData>(GitHubRequest request,
Action<TResponseData> callback,
Action<APICallError> onError) where TResponseData : new() {
CallApiAsync<TResponseData>(request, version, _authenticator, callback, onError);
CallApiAsync<TResponseData>(request, _authenticator, callback, onError);
}

private void CallApiAsync<TResponseData>(RestRequest request,
API version,
private void CallApiAsync<TResponseData>(GitHubRequest request,
IAuthenticator authenticator,
Action<TResponseData> callback,
Action<APICallError> onError) where TResponseData : new() {
Expand All @@ -120,20 +117,28 @@ private void CallApiAsync<TResponseData>(RestRequest request,
Requires.ArgumentNotNull(authenticator, "authenticator");
Requires.ArgumentNotNull(onError, "onError");

var baseUrl = (version == API.v3) ? Constants.ApiV3Url : Constants.ApiV2Url;
var restRequest = new RestRequest {
Resource = request.Resource,
Method = request.Method.ToRestSharpMethod()

// TODO: Parameters
};

var baseUrl = (request.Version == API.v3) ? Constants.ApiV3Url : Constants.ApiV2Url;
var restClient = _factory.CreateRestClient(baseUrl);
restClient.Authenticator = authenticator;

restClient.ExecuteAsync<TResponseData>(
request,
restRequest,
r => {
if (r.StatusCode != HttpStatusCode.OK &&
r.StatusCode != HttpStatusCode.Created) {
var response = new GitHubResponse<TResponseData>(r);
if (response.IsError) {
onError(new APICallError(r));
return;
}
callback(r.Data);
callback(response.Data);
});
}

Expand Down
49 changes: 49 additions & 0 deletions src/NGitHub/GitHubRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
using NGitHub.Utility;

namespace NGitHub {
public class GitHubRequest {
private readonly string _resource;
private readonly API _version;
private readonly Method _method;
private readonly ReadOnlyCollection<Parameter> _parameters;

public GitHubRequest(string resource,
API version,
Method method,
params Parameter[] parameters) {
Requires.ArgumentNotNull(resource, "resource");

_resource = resource;
_version = version;
_method = method;
_parameters = (parameters == null) ? new ReadOnlyCollection<Parameter>(new List<Parameter>()) :
new ReadOnlyCollection<Parameter>(parameters);
}

public string Resource {
get {
return _resource;
}
}

public API Version {
get {
return _version;
}
}

public Method Method {
get {
return _method;
}
}

public ReadOnlyCollection<Parameter> Parameters {
get {
return _parameters;
}
}
}
}
34 changes: 34 additions & 0 deletions src/NGitHub/GitHubResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
using System.Net;
using NGitHub.Utility;
using RestSharp;

namespace NGitHub {
public class GitHubResponse<T> : IGitHubResponse<T> {
private readonly IRestResponse<T> _response;

public GitHubResponse(IRestResponse<T> response) {
Requires.ArgumentNotNull(response, "response");

_response = response;
}

public T Data {
get {
return _response.Data;
}
}

public HttpStatusCode StatusCode {
get {
return _response.StatusCode;
}
}

public bool IsError {
get {
return _response.StatusCode != HttpStatusCode.OK &&
_response.StatusCode != HttpStatusCode.Created;
}
}
}
}
16 changes: 7 additions & 9 deletions src/NGitHub/IGitHubClient.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
using System;
using NGitHub.Models;
using RestSharp;

namespace NGitHub {
public interface IGitHubClient {
ICommitService Commits { get; }
IFeedService Feeds { get; }
IIssueService Issues { get; }
IUserService Users { get; }
IRepositoryService Repositories { get; }
IOrganizationService Organizations { get; }
ICommitService Commits { get; }
IFeedService Feeds { get; }
IIssueService Issues { get; }
IUserService Users { get; }
IRepositoryService Repositories { get; }
IOrganizationService Organizations { get; }

bool LoggedIn { get; }
void LoginAsync(string login,
Expand All @@ -18,8 +17,7 @@ void LoginAsync(string login,
Action<APICallError> onError);
void Logout();

void CallApiAsync<TResponseData>(RestRequest request,
API version,
void CallApiAsync<TResponseData>(GitHubRequest request,
Action<TResponseData> callback,
Action<APICallError> onError) where TResponseData : new();
}
Expand Down
9 changes: 9 additions & 0 deletions src/NGitHub/IGitHubResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System.Net;

namespace NGitHub {
public interface IGitHubResponse<T> {
T Data { get; }
bool IsError { get; }
HttpStatusCode StatusCode { get; }
}
}
16 changes: 6 additions & 10 deletions src/NGitHub/IssueService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using System.Collections.Generic;
using NGitHub.Models;
using NGitHub.Utility;
using RestSharp;

namespace NGitHub {
public class IssueService : IIssueService {
Expand All @@ -24,8 +23,8 @@ public void GetIssueAsync(string user,
Requires.ArgumentNotNull(issueId, "issueId");

var resource = string.Format("/issues/show/{0}/{1}/{2}", user, repo, issueId);
var request = new RestRequest(resource, Method.GET);
_client.CallApiAsync<IssueResult>(request, API.v2, i => callback(i.Issue), onError);
var request = new GitHubRequest(resource, API.v2, Method.GET);
_client.CallApiAsync<IssueResult>(request, i => callback(i.Issue), onError);
}

public void GetIssuesAsync(string user,
Expand All @@ -37,10 +36,9 @@ public void GetIssuesAsync(string user,
Requires.ArgumentNotNull(repo, "repo");

var resource = string.Format("/issues/list/{0}/{1}/{2}", user, repo, state.GetText());
var request = new RestRequest(resource, Method.GET);
var request = new GitHubRequest(resource, API.v2, Method.GET);

_client.CallApiAsync<IssuesResult>(request,
API.v2,
i => callback(i.Issues),
onError);
}
Expand All @@ -59,10 +57,9 @@ public void CreateCommentAsync(string user,
user,
repo,
issueNumber);
var request = new RestRequest(resource, Method.POST);
request.AddParameter("comment", comment);
var request = new GitHubRequest(resource, API.v2, Method.POST, new Parameter("comment", comment));

_client.CallApiAsync<CommentResult>(request, API.v2, c => callback(c.Comment), onError);
_client.CallApiAsync<CommentResult>(request, c => callback(c.Comment), onError);
}

public void GetCommentsAsync(string user,
Expand All @@ -77,9 +74,8 @@ public void GetCommentsAsync(string user,
user,
repo,
issueNumber);
var request = new RestRequest(resource, Method.GET);
var request = new GitHubRequest(resource, API.v2, Method.GET);
_client.CallApiAsync<CommentsResult>(request,
API.v2,
c => callback(c.Comments),
onError);
}
Expand Down
11 changes: 11 additions & 0 deletions src/NGitHub/Method.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

namespace NGitHub {
public enum Method {
GET = 0,
POST = 1,
PUT = 2,
DELETE = 3,
HEAD = 4,
OPTIONS = 5,
}
}
6 changes: 6 additions & 0 deletions src/NGitHub/NGitHub.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,23 @@
<Compile Include="CommitService.cs" />
<Compile Include="Constants.cs" />
<Compile Include="CustomRestSharp\CustomJsonDeserializer.cs" />
<Compile Include="Extensions.cs" />
<Compile Include="FeedService.cs" />
<Compile Include="GitHubClient.cs" />
<Compile Include="CustomRestSharp\CustomHttp.Async.cs" />
<Compile Include="CustomRestSharp\CustomHttp.cs" />
<Compile Include="GitHubRequest.cs" />
<Compile Include="GitHubResponse.cs" />
<Compile Include="ICommitService.cs" />
<Compile Include="IFeedService.cs" />
<Compile Include="IGitHubClient.cs" />
<Compile Include="IGitHubResponse.cs" />
<Compile Include="IIssueService.cs" />
<Compile Include="IOrganizationService.cs" />
<Compile Include="IRepositoryService.cs" />
<Compile Include="IssueService.cs" />
<Compile Include="IUserService.cs" />
<Compile Include="Method.cs" />
<Compile Include="Models\FeedItem.cs" />
<Compile Include="Models\APICallParameters.cs" />
<Compile Include="Models\Branch.cs" />
Expand All @@ -74,6 +79,7 @@
<Compile Include="Models\Repository.cs" />
<Compile Include="Models\User.cs" />
<Compile Include="OrganizationService.cs" />
<Compile Include="Parameter.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RepositoryService.cs" />
<Compile Include="RestClientFactory.cs" />
Expand Down
7 changes: 2 additions & 5 deletions src/NGitHub/OrganizationService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using System.Collections.Generic;
using NGitHub.Models;
using NGitHub.Utility;
using RestSharp;

namespace NGitHub {
public class OrganizationService : IOrganizationService {
Expand All @@ -21,9 +20,8 @@ public void GetMembersAsync(string organization,

var resource = string.Format("/organizations/{0}/public_members",
organization);
var request = new RestRequest(resource, Method.GET);
var request = new GitHubRequest(resource, API.v2, Method.GET);
_client.CallApiAsync<UsersResult>(request,
API.v2,
u => callback(u.Users),
onError);
}
Expand All @@ -34,9 +32,8 @@ public void GetOrganizationsAsync(string user,
Requires.ArgumentNotNull(user, "user");

var resource = string.Format("/user/show/{0}/organizations", user);
var request = new RestRequest(resource, Method.GET);
var request = new GitHubRequest(resource, API.v2, Method.GET);
_client.CallApiAsync<OrganizationsResult>(request,
API.v2,
o => callback(o.Organizations),
onError);
}
Expand Down
Loading

0 comments on commit 989d1cd

Please sign in to comment.