Welcome to mirror list, hosted at ThFree Co, Russian Federation.

package.scala « util « github « no_carrier « getbootstrap « com « scala « main « src - github.com/twbs/no-carrier.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 1e16d266233ffa4179e60d29907bba822c9059ad (plain)
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)
    }
  }
}