diff options
author | Chris Rebert <code@rebertia.com> | 2014-10-31 10:22:34 +0300 |
---|---|---|
committer | Chris Rebert <code@rebertia.com> | 2014-10-31 10:25:59 +0300 |
commit | fca34b188bf9953ff5539d2f000d31e8d22fb385 (patch) | |
tree | 0572eb8e5573d6a8bccf8734d6458ff8b33a216a /src |
initial scaffolding
Diffstat (limited to 'src')
8 files changed, 134 insertions, 0 deletions
diff --git a/src/main/scala/com/getbootstrap/no_carrier/Main.scala b/src/main/scala/com/getbootstrap/no_carrier/Main.scala new file mode 100644 index 0000000..6d08e54 --- /dev/null +++ b/src/main/scala/com/getbootstrap/no_carrier/Main.scala @@ -0,0 +1,41 @@ +package com.getbootstrap.no_carrier + +import scala.util.{Success,Failure} +import scala.util.Try +import org.eclipse.egit.github.core.RepositoryId +import com.getbootstrap.no_carrier.github.{IssueFilters, IssueLabel, Credentials} +import com.getbootstrap.no_carrier.github.issues_filter.{All=>AllIssues} +import com.getbootstrap.no_carrier.github.issue_state.{All=>OpenOrClosed} +import com.getbootstrap.no_carrier.github.util._ + + +object Main extends App { + val arguments = args.toSeq + val argsPort = arguments match { + case Seq(portStr: String) => { + Try{ portStr.toInt } match { + case Failure(_) => { + System.err.println("USAGE: no-carrier <username> <password> <owner/repo> <label> <duration>") + System.exit(1) + None // dead code + } + case Success(portNum) => Some(portNum) + } + } + case Seq() => None + } + implicit val repoId = RepositoryId.createFromId("twbs/bootstrap") + val credentials = Credentials("username", "pass") + val client = credentials.client + implicit val issueService = client.issuesService + val labels = Set(new IssueLabel("awaiting reply")) + val filters = IssueFilters(filter = AllIssues, state = OpenOrClosed, labels = labels) + val issues = issueService.issuesWhere(repoId, filters) + for { issue <- issues } { + for { event <- issue.events } { + event.getEvent + "labeled" + "unlabeled" + } + } +} diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/Credentials.scala b/src/main/scala/com/getbootstrap/no_carrier/github/Credentials.scala new file mode 100644 index 0000000..6dc73fc --- /dev/null +++ b/src/main/scala/com/getbootstrap/no_carrier/github/Credentials.scala @@ -0,0 +1,11 @@ +package com.getbootstrap.no_carrier.github + +import org.eclipse.egit.github.core.client.GitHubClient + +case class Credentials(username: String, password: String) { + def client = { + val c = new GitHubClient() + c.setCredentials(username, password) + c + } +} diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/IssueFilters.scala b/src/main/scala/com/getbootstrap/no_carrier/github/IssueFilters.scala new file mode 100644 index 0000000..816294b --- /dev/null +++ b/src/main/scala/com/getbootstrap/no_carrier/github/IssueFilters.scala @@ -0,0 +1,12 @@ +package com.getbootstrap.no_carrier.github + +import com.getbootstrap.no_carrier.github.issue_state.IssueStateForSearch +import com.getbootstrap.no_carrier.github.issues_filter.IssuesFilter + +case class IssueFilters(filter: IssuesFilter, state: IssueStateForSearch, labels: Set[IssueLabel]) { + def asFilterData: Map[String, String] = Map( + "filter" -> filter.codename, + "state" -> state.codename, + "labels" -> labels.map{ label => label.name }.mkString(",") + ) +} diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/IssueLabel.scala b/src/main/scala/com/getbootstrap/no_carrier/github/IssueLabel.scala new file mode 100644 index 0000000..745852e --- /dev/null +++ b/src/main/scala/com/getbootstrap/no_carrier/github/IssueLabel.scala @@ -0,0 +1,3 @@ +package com.getbootstrap.no_carrier.github + +class IssueLabel(val name: String) extends AnyVal diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/IssueNumber.scala b/src/main/scala/com/getbootstrap/no_carrier/github/IssueNumber.scala new file mode 100644 index 0000000..8a26771 --- /dev/null +++ b/src/main/scala/com/getbootstrap/no_carrier/github/IssueNumber.scala @@ -0,0 +1,3 @@ +package com.getbootstrap.no_carrier.github + +class IssueNumber(val number: Int) extends AnyVal diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/issue_state/IssueStateForSearch.scala b/src/main/scala/com/getbootstrap/no_carrier/github/issue_state/IssueStateForSearch.scala new file mode 100644 index 0000000..ae0c5a7 --- /dev/null +++ b/src/main/scala/com/getbootstrap/no_carrier/github/issue_state/IssueStateForSearch.scala @@ -0,0 +1,18 @@ +package com.getbootstrap.no_carrier.github.issue_state + +sealed trait IssueStateForSearch { + def codename: String +} + +object All extends IssueStateForSearch { + override def codename = "all" +} + +sealed trait IssueState extends IssueStateForSearch + +object Open extends IssueState { + override def codename = "open" +} +object Closed extends IssueState { + override def codename = "closed" +} diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/issues_filter/IssuesFilter.scala b/src/main/scala/com/getbootstrap/no_carrier/github/issues_filter/IssuesFilter.scala new file mode 100644 index 0000000..4db0497 --- /dev/null +++ b/src/main/scala/com/getbootstrap/no_carrier/github/issues_filter/IssuesFilter.scala @@ -0,0 +1,20 @@ +package com.getbootstrap.no_carrier.github.issues_filter + +sealed trait IssuesFilter { + def codename: String +} +object AssignedToYou extends IssuesFilter { + override val codename = "assigned" +} +object CreatedByYou extends IssuesFilter { + override val codename = "created" +} +object MentioningYou extends IssuesFilter { + override val codename = "mentioned" +} +object SubscribedToByYou extends IssuesFilter { + override val codename = "subscribed" +} +object All extends IssuesFilter { + override val codename = "all" +} diff --git a/src/main/scala/com/getbootstrap/no_carrier/github/util/package.scala b/src/main/scala/com/getbootstrap/no_carrier/github/util/package.scala new file mode 100644 index 0000000..be6da50 --- /dev/null +++ b/src/main/scala/com/getbootstrap/no_carrier/github/util/package.scala @@ -0,0 +1,26 @@ +package com.getbootstrap.no_carrier.github + +import scala.collection.JavaConverters._ +import org.eclipse.egit.github.core.{RepositoryId, Issue} +import org.eclipse.egit.github.core.client.GitHubClient +import org.eclipse.egit.github.core.service.IssueService + +package object util { + implicit class RichClient(client: GitHubClient) { + def issuesService = new IssueService(client) + } + implicit class RichIssueService(issueService: IssueService) { + private def pageIssues(repo: RepositoryId, filters: IssueFilters) = issueService.pageIssues(repo, filters.asFilterData.asJava) + def issuesWhere(repo: RepositoryId, filters: IssueFilters): Iterator[Issue] = { + val pageIter = pageIssues(repo, filters) + val issuesIter = pageIter.iterator().asScala.flatten + issuesIter + } + private def eventPages(repo: RepositoryId, issueNum: IssueNumber) = issueService.pageIssueEvents(repo.getOwner, repo.getName, issueNum.number) + def eventsFor(repo: RepositoryId, issueNum: IssueNumber) = issueService.eventPages(repo, issueNum).iterator().asScala.flatten + } + implicit class RichIssue(issue: Issue) { + def number: IssueNumber = new IssueNumber(issue.getNumber) + def events(implicit issueService: IssueService, repo: RepositoryId) = issueService.eventsFor(repo, issue.number) + } +} |