Skip to content
This repository was archived by the owner on Jun 27, 2019. It is now read-only.

Commit be66f33

Browse files
Replace method filtering by object (so it's easier to extend in the future)
1 parent 82fdf61 commit be66f33

File tree

6 files changed

+47
-28
lines changed

6 files changed

+47
-28
lines changed

src/GitTools.IssueTrackers/GitTools.IssueTrackers.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
<Compile Include="IssueTrackers\Interfaces\IIssueNumberExtractor.cs" />
8787
<Compile Include="IssueTrackers\Interfaces\IIssueTracker.cs" />
8888
<Compile Include="IssueTrackers\Interfaces\IIssueTrackerFactory.cs" />
89+
<Compile Include="Models\IssueTrackerFilter.cs" />
8990
<Compile Include="Models\Version.cs" />
9091
<Compile Include="ModuleInitializer.cs" />
9192
<Compile Include="Properties\AssemblyInfo.cs" />

src/GitTools.IssueTrackers/IssueTrackers/GitHub/GitHubIssueTracker.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public GitHubIssueTracker(IIssueTrackerContext issueTrackerContext)
1919

2020
}
2121

22-
public override IEnumerable<Issue> GetIssues(string filter = null, bool includeOpen = true, bool includeClosed = true, DateTimeOffset? since = null)
22+
public override IEnumerable<Issue> GetIssues(IssueTrackerFilter filter)
2323
{
2424
var gitHubClient = new GitHubClient(new ProductHeaderValue("GitReleaseNotes"));
2525

@@ -41,10 +41,10 @@ public override IEnumerable<Issue> GetIssues(string filter = null, bool includeO
4141
string repository;
4242
GetRepository(out organisation, out repository);
4343

44-
var repositoryIssueRequest = PrepareFilter(filter, includeOpen, includeClosed, since);
44+
var repositoryIssueRequest = PrepareFilter(filter);
4545
var forRepository = gitHubClient.Issue.GetAllForRepository(organisation, repository, repositoryIssueRequest);
4646

47-
var readOnlyList = forRepository.Result.Where(i => i.ClosedAt > since);
47+
var readOnlyList = forRepository.Result.Where(i => i.ClosedAt > filter.Since);
4848

4949
//var userCache = new Dictionary<string, User>();
5050
//Func<User, string> getUserName = u =>
@@ -78,23 +78,23 @@ public override IEnumerable<Issue> GetIssues(string filter = null, bool includeO
7878
});
7979
}
8080

81-
private RepositoryIssueRequest PrepareFilter(string filter, bool includeOpen = true, bool includeClosed = true, DateTimeOffset? since = null)
81+
private RepositoryIssueRequest PrepareFilter(IssueTrackerFilter filter)
8282
{
8383
var repositoryIssueRequest = new RepositoryIssueRequest
8484
{
8585
Filter = IssueFilter.All,
86-
Since = since,
86+
Since = filter.Since,
8787
};
8888

89-
if (includeOpen && includeClosed)
89+
if (filter.IncludeOpen && filter.IncludeClosed)
9090
{
9191
repositoryIssueRequest.State = ItemState.All;
9292
}
93-
else if (includeOpen)
93+
else if (filter.IncludeOpen)
9494
{
9595
repositoryIssueRequest.State = ItemState.Open;
9696
}
97-
else if (includeClosed)
97+
else if (filter.IncludeClosed)
9898
{
9999
repositoryIssueRequest.State = ItemState.Closed;
100100
}

src/GitTools.IssueTrackers/IssueTrackers/Interfaces/IIssueTracker.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
{
33
using System;
44
using System.Collections.Generic;
5+
using Octokit;
56

67
public interface IIssueTracker
78
{
8-
IEnumerable<Issue> GetIssues(string filter = null, bool includeOpen = true, bool includeClosed = true, DateTimeOffset? since = null);
9+
IEnumerable<Issue> GetIssues(IssueTrackerFilter filter);
910
}
1011
}

src/GitTools.IssueTrackers/IssueTrackers/IssueTrackerBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ public IssueTrackerBase(IIssueTrackerContext issueTrackerContext)
1212

1313
protected IIssueTrackerContext IssueTrackerContext { get; private set; }
1414

15-
public abstract IEnumerable<Issue> GetIssues(string filter = null, bool includeOpen = true, bool includeClosed = true, DateTimeOffset? since = null);
15+
public abstract IEnumerable<Issue> GetIssues(IssueTrackerFilter filter);
1616
}
1717
}

src/GitTools.IssueTrackers/IssueTrackers/Jira/JiraIssueTracker.cs

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public JiraIssueTracker(IIssueTrackerContext issueTrackerContext)
2020
{
2121
}
2222

23-
public override IEnumerable<Issue> GetIssues(string filter = null, bool includeOpen = true, bool includeClosed = true, DateTimeOffset? since = null)
23+
public override IEnumerable<Issue> GetIssues(IssueTrackerFilter filter)
2424
{
2525
Log.DebugFormat("Connecting to Jira server '{0}'", IssueTrackerContext.Server);
2626

@@ -32,13 +32,13 @@ public override IEnumerable<Issue> GetIssues(string filter = null, bool includeO
3232
var openedStatuses = GetOpenedStatuses(jira);
3333
var closedStatuses = GetClosedStatuses(jira);
3434

35-
filter = PrepareFilter(filter, openedStatuses, closedStatuses, includeOpen, includeClosed, since);
35+
var finalFilter = PrepareFilter(filter, openedStatuses, closedStatuses);
3636

3737
var issues = new List<Issue>();
3838

3939
Log.DebugFormat("Searching for issues using filter '{0}'", filter);
4040

41-
foreach (var issue in jira.GetIssuesFromJql(filter))
41+
foreach (var issue in jira.GetIssuesFromJql(finalFilter))
4242
{
4343
var gitIssue = new Issue(issue.Key.Value)
4444
{
@@ -71,39 +71,35 @@ public override IEnumerable<Issue> GetIssues(string filter = null, bool includeO
7171
return issues;
7272
}
7373

74-
private string PrepareFilter(string filter, IEnumerable<IssueStatus> openedStatuses, IEnumerable<IssueStatus> closedStatuses,
75-
bool includeOpen = true, bool includeClosed = true, DateTimeOffset? since = null)
74+
private string PrepareFilter(IssueTrackerFilter filter, IEnumerable<IssueStatus> openedStatuses, IEnumerable<IssueStatus> closedStatuses)
7675
{
77-
if (string.IsNullOrWhiteSpace(filter))
76+
var finalFilter = string.Empty;
77+
if (!string.IsNullOrWhiteSpace(filter.Filter))
7878
{
79-
filter = "";
80-
}
81-
else
82-
{
83-
filter += " AND ";
79+
finalFilter = filter.Filter + " AND ";
8480
}
8581

86-
if (includeOpen && includeClosed)
82+
if (filter.IncludeOpen && filter.IncludeClosed)
8783
{
8884
// no need to filter anything
8985
}
9086

91-
if (!includeOpen && !includeClosed)
87+
if (!filter.IncludeOpen && !filter.IncludeClosed)
9288
{
9389
throw new GitToolsException("Cannot exclude both open and closed issues, nothing will be returned");
9490
}
9591

96-
if (includeOpen)
92+
if (filter.IncludeOpen)
9793
{
98-
filter += string.Format("status in ({0})", string.Join(", ", openedStatuses.Select(x => string.Format("\"{0}\"", x))));
94+
finalFilter += string.Format("status in ({0})", string.Join(", ", openedStatuses.Select(x => string.Format("\"{0}\"", x))));
9995
}
10096

101-
if (includeClosed)
97+
if (filter.IncludeClosed)
10298
{
103-
filter += string.Format("status in ({0})", string.Join(", ", closedStatuses.Select(x => string.Format("\"{0}\"", x))));
99+
finalFilter += string.Format("status in ({0})", string.Join(", ", closedStatuses.Select(x => string.Format("\"{0}\"", x))));
104100
}
105101

106-
return filter;
102+
return finalFilter;
107103
}
108104

109105
private List<IssueStatus> GetOpenedStatuses(Jira jira)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
namespace GitTools.IssueTrackers
2+
{
3+
using System;
4+
5+
public class IssueTrackerFilter
6+
{
7+
public IssueTrackerFilter()
8+
{
9+
IncludeOpen = true;
10+
IncludeClosed = true;
11+
}
12+
13+
public string Filter { get; set; }
14+
15+
public bool IncludeOpen { get; set; }
16+
17+
public bool IncludeClosed { get; set; }
18+
19+
public DateTimeOffset? Since { get; set; }
20+
}
21+
}

0 commit comments

Comments
 (0)