1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
package com.getbootstrap.no_carrier.github
import java.util.EnumMap
import java.time.Instant
import javax.json.JsonObject
import scala.util.{Try,Success}
import scala.collection.JavaConverters._
import com.jcabi.github.{Event => IssueEvent, Issue, Issues, IssueLabels, Comment, Search, Repo, Repos}
import com.jcabi.github.Issue.{Smart=>SmartIssue}
import com.jcabi.github.Event.{Smart=>SmartIssueEvent}
import com.jcabi.github.Comment.{Smart=>SmartComment}
package object util {
implicit class RichIssues(issues: Issues) {
private def openWithLabelQuery(label: String) = {
val params = new EnumMap[Issues.Qualifier, String](classOf[Issues.Qualifier])
params.put(Issues.Qualifier.STATE, issue_state.Open.codename)
params.put(Issues.Qualifier.LABELS, label)
params
}
def openWithLabel(label: String): Iterable[Issue] = issues.search(Issues.Sort.UPDATED, Search.Order.ASC, openWithLabelQuery(label)).asScala
}
implicit class RichIssue(issue: Issue) {
def smart: SmartIssue = new SmartIssue(issue)
def smartEvents: Iterable[SmartIssueEvent] = issue.events.asScala.map{ new SmartIssueEvent(_) }
def smartComments: Iterable[SmartComment] = issue.comments.iterate.asScala.map{ new SmartComment(_) }
def lastLabelledWithAt(label: String): Option[Instant] = {
val labellings = issue.smartEvents.filter{ event => event.isLabeled && event.label == Some(label) }
labellings.map{ _.createdAt.toInstant }.lastOption
}
}
implicit class RichSmartIssueEvent(event: SmartIssueEvent) {
def isLabeled: Boolean = event.`type` == IssueEvent.LABELED
def isClosed: Boolean = event.`type` == IssueEvent.CLOSED
def label: Option[String] = {
Try {Option[JsonObject](event.json.getJsonObject("label")).map {_.getString("name")}}.recoverWith {
case _: ClassCastException => Success(None)
}.get
}
}
implicit class RichComment(comment: Comment) {
def smart: SmartComment = new SmartComment(comment)
}
implicit class RichRepos(repos: Repos) {
import javax.json.Json
def create(name: String): Repo = {
val json = Json.createObjectBuilder.add("name", name).build
repos.create(json)
}
}
implicit class RichIssueLabels(labels: IssueLabels) {
def add(label: String) {
val singleton = new java.util.LinkedList[String]()
singleton.add(label)
labels.add(singleton)
}
}
}
|