mirror of
https://github.com/zoriya/octokit.net.git
synced 2026-06-06 20:13:40 +00:00
Refactor SearchIssuesRequest to match the API
This commit is contained in:
@@ -49,7 +49,7 @@ namespace Octokit.Reactive
|
||||
public IObservable<Issue> SearchIssues(SearchIssuesRequest request)
|
||||
{
|
||||
Ensure.ArgumentNotNull(request, "request");
|
||||
return _connection.GetAndFlattenAllPages<Issue>(ApiUrls.SearchIssues(), request.ToParametersDictionary());
|
||||
return _connection.GetAndFlattenAllPages<Issue>(ApiUrls.SearchIssues(), request.Parameters);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -52,7 +52,7 @@ namespace Octokit
|
||||
public Task<IReadOnlyList<Issue>> SearchIssues(SearchIssuesRequest search)
|
||||
{
|
||||
Ensure.ArgumentNotNull(search, "search");
|
||||
return ApiConnection.GetAll<Issue>(ApiUrls.SearchIssues(), search.ToParametersDictionary());
|
||||
return ApiConnection.GetAll<Issue>(ApiUrls.SearchIssues(), search.Parameters);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -4,17 +4,19 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Globalization;
|
||||
|
||||
namespace Octokit
|
||||
{
|
||||
/// <summary>
|
||||
/// Searching Issues
|
||||
/// </summary>
|
||||
public class SearchIssuesRequest : RequestParameters
|
||||
public class SearchIssuesRequest
|
||||
{
|
||||
public SearchIssuesRequest(string term)
|
||||
{
|
||||
Ensure.ArgumentNotNullOrEmptyString(term,"term");
|
||||
Ensure.ArgumentNotNullOrEmptyString(term, "term");
|
||||
|
||||
Term = term;
|
||||
Page = 1;
|
||||
PerPage = 100;
|
||||
@@ -25,14 +27,13 @@ namespace Octokit
|
||||
/// The search terms. This can be any combination of the supported repository search parameters:
|
||||
/// http://developer.github.com/v3/search/#search-code
|
||||
/// </summary>
|
||||
[Parameter(Key= "q")]
|
||||
public string Term { get; private set; }
|
||||
public string Term { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// For http://developer.github.com/v3/search/#search-issues
|
||||
/// Optional Sort field. One of comments, created, or updated. If not provided, results are sorted by best match.
|
||||
/// </summary>
|
||||
//public string Sort { get; set; } //re-add laters
|
||||
public IssueSearchSort? Sort { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Optional Sort order if sort parameter is provided. One of asc or desc; the default is desc.
|
||||
@@ -48,5 +49,186 @@ namespace Octokit
|
||||
/// Number of items per page
|
||||
/// </summary>
|
||||
public int PerPage { get; set; }
|
||||
|
||||
private IEnumerable<IssueInQualifier> _inQualifier;
|
||||
public IEnumerable<IssueInQualifier> In
|
||||
{
|
||||
get { return _inQualifier; }
|
||||
set
|
||||
{
|
||||
if(value != null && value.Any())
|
||||
{
|
||||
_inQualifier = value.Distinct().ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")]
|
||||
public IssueTypeQualifier? Type { get; set; }
|
||||
|
||||
public string Author { get; set; }
|
||||
|
||||
public string Assignee { get; set; }
|
||||
|
||||
public string Mentions { get; set; }
|
||||
|
||||
public string Commenter { get; set; }
|
||||
|
||||
public string Involves { get; set; }
|
||||
|
||||
public ItemState? State { get; set; }
|
||||
|
||||
private IEnumerable<string> _labels;
|
||||
|
||||
public IEnumerable<string> Labels
|
||||
{
|
||||
get { return _labels; }
|
||||
set
|
||||
{
|
||||
if(value != null && value.Any())
|
||||
{
|
||||
_labels = value.Distinct().ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Language? Language { get; set; }
|
||||
|
||||
public DateRange Created { get; set; }
|
||||
|
||||
public DateRange Updated { get; set; }
|
||||
|
||||
public Range Comments { get; set; }
|
||||
|
||||
public string User { get; set; }
|
||||
|
||||
public string Repo { get; set; }
|
||||
|
||||
public string MergeParameters()
|
||||
{
|
||||
var parameters = new List<string>();
|
||||
|
||||
if(In != null)
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "in:{0}", String.Join(",", In)));
|
||||
}
|
||||
|
||||
if(Type != null)
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "type:{0}", Type));
|
||||
}
|
||||
|
||||
if(Author.IsNotBlank())
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "author:{0}", Author));
|
||||
}
|
||||
|
||||
if(Assignee.IsNotBlank())
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "assignee:{0}", Assignee));
|
||||
}
|
||||
|
||||
if(Mentions.IsNotBlank())
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "mentions:{0}", Mentions));
|
||||
}
|
||||
|
||||
if (Commenter.IsNotBlank())
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "commenter:{0}", Commenter));
|
||||
}
|
||||
|
||||
if(Involves.IsNotBlank())
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "involves:{0}", Involves));
|
||||
}
|
||||
|
||||
if(State != null)
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "state:{0}", State));
|
||||
}
|
||||
|
||||
if(Labels != null)
|
||||
{
|
||||
foreach(var label in Labels)
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "label:{0}", label));
|
||||
}
|
||||
}
|
||||
|
||||
if(Language != null)
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "language:{0}", Language));
|
||||
}
|
||||
|
||||
if(Created != null)
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "created:{0}", Created));
|
||||
}
|
||||
|
||||
if(Updated != null)
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "udpated:{0}", Updated));
|
||||
}
|
||||
|
||||
if(Comments != null)
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "comments:{0}", Comments));
|
||||
}
|
||||
|
||||
if(User.IsNotBlank())
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "user:{0}", User));
|
||||
}
|
||||
|
||||
if(Repo.IsNotBlank())
|
||||
{
|
||||
parameters.Add(String.Format(CultureInfo.InvariantCulture, "repo:{0}", Repo));
|
||||
}
|
||||
|
||||
return String.Join("+", parameters);
|
||||
}
|
||||
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.Int32.ToString")]
|
||||
public IDictionary<string, string> Parameters
|
||||
{
|
||||
get
|
||||
{
|
||||
var d = new Dictionary<string, string>();
|
||||
d.Add("page", Page.ToString());
|
||||
d.Add("per_page", PerPage.ToString());
|
||||
d.Add("sort", Sort.ToString());
|
||||
d.Add("q", Term + " " + MergeParameters());
|
||||
return d;
|
||||
}
|
||||
}
|
||||
}
|
||||
public enum IssueSearchSort
|
||||
{
|
||||
/// <summary>
|
||||
/// search by number of comments
|
||||
/// </summary>
|
||||
Comments,
|
||||
/// <summary>
|
||||
/// search by created
|
||||
/// </summary>
|
||||
Created,
|
||||
/// <summary>
|
||||
/// search by last updated
|
||||
/// </summary>
|
||||
Updated
|
||||
}
|
||||
|
||||
public enum IssueInQualifier
|
||||
{
|
||||
Title,
|
||||
Body,
|
||||
Comment
|
||||
}
|
||||
|
||||
public enum IssueTypeQualifier
|
||||
{
|
||||
PR,
|
||||
Issue
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user