35 lines
794 B
Scala
35 lines
794 B
Scala
package lila.common
|
|
|
|
case class EloRange(min: Int, max: Int) {
|
|
|
|
def contains(elo: Int) = elo >= min && elo <= max
|
|
|
|
override def toString = "%d-%d".format(min, max)
|
|
}
|
|
|
|
object EloRange {
|
|
|
|
val min = 800
|
|
val max = 2500
|
|
|
|
val broad = EloRange(min, max)
|
|
val default = broad
|
|
|
|
// ^\d{3,4}\-\d{3,4}$
|
|
def apply(from: String): Option[EloRange] = for {
|
|
min ← parseIntOption(from takeWhile ('-' !=))
|
|
if acceptable(min)
|
|
max ← parseIntOption(from dropWhile ('-' !=) tail)
|
|
if acceptable(max)
|
|
if min <= max
|
|
} yield EloRange(min, max)
|
|
|
|
def orDefault(from: String) = apply(from) | default
|
|
|
|
def noneIfDefault(from: String) = apply(from) filter (_ != default)
|
|
|
|
def valid(from: String) = apply(from).isDefined
|
|
|
|
private def acceptable(elo: Int) = broad contains elo
|
|
}
|