common/app/model/package.scala (49 lines of code) (raw):
package model
import com.gu.contentapi.client.model.v1.{Content => ApiContent}
import common.Edition
import scala.math.abs
object `package` {
implicit class ApiContent2Is(content: ApiContent) {
lazy val isArticle: Boolean = content.tags exists { _.id == "type/article" }
lazy val isSudoku: Boolean = content.tags exists { _.id == "type/sudoku" }
lazy val isGallery: Boolean = content.tags exists { _.id == "type/gallery" }
lazy val isVideo: Boolean = content.tags exists { _.id == "type/video" }
lazy val isAudio: Boolean = content.tags exists { _.id == "type/audio" }
lazy val isMedia: Boolean = isGallery || isVideo || isAudio
lazy val isPoll: Boolean = content.tags exists { _.id == "type/poll" }
lazy val isImageContent: Boolean = content.tags exists { tag =>
List("type/cartoon", "type/picture", "type/graphic").contains(tag.id)
}
lazy val isInteractive: Boolean = content.tags exists { _.id == "type/interactive" }
lazy val isLiveBlog: Boolean = content.tags.exists(t => Tags.liveMappings.contains(t.id))
lazy val isComment = content.tags.exists(t => Tags.commentMappings.contains(t.id))
lazy val isFeature = content.tags.exists(t => Tags.featureMappings.contains(t.id))
lazy val isReview = content.tags.exists(t => Tags.reviewMappings.contains(t.id))
}
implicit class Any2In[A](a: A) {
def in(as: Set[A]): Boolean = as contains a
}
implicit class Int2RichInt(i: Int) {
def distanceFrom(j: Int): Int = abs(j - i)
def in(range: Range): Boolean = range contains i
}
def frontKeywordIds(pageId: String): Seq[String] = {
val editions = Edition.allEditions.map(_.id.toLowerCase).toSet
val parts = pageId.split("/").toList match {
case edition :: rest if editions.contains(edition) => rest
case uneditionalised => uneditionalised
}
val path = parts.mkString("/")
if (parts.isEmpty) {
Nil
} else if (parts.size == 1) {
Seq(s"$path/$path")
} else {
val normalizedPath = parts.mkString("-")
Seq(path, s"$normalizedPath/$normalizedPath")
}
}
def stripHtml(text: String): String = {
text.replaceAll("""(<a[^>]*>)|(</a>)""", "")
}
}