From aae5bfd184cd66ffe173505b677a74de50b763f5 Mon Sep 17 00:00:00 2001 From: takezoe Date: Tue, 25 Jun 2013 15:32:52 +0900 Subject: [PATCH] Implementing search condition behavior. --- src/main/scala/service/IssuesService.scala | 18 +++++++++--------- src/main/twirl/issues/issues.scala.html | 22 +++++++++++++++------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/main/scala/service/IssuesService.scala b/src/main/scala/service/IssuesService.scala index 15ef92898..aa1ca65a6 100644 --- a/src/main/scala/service/IssuesService.scala +++ b/src/main/scala/service/IssuesService.scala @@ -75,16 +75,16 @@ object IssuesService { import java.net.URLEncoder import javax.servlet.http.HttpServletRequest - case class IssueSearchCondition(labels: Set[String], milestoneId: Option[Int], state: String, sort: Option[String], direction: Option[String]){ + case class IssueSearchCondition(labels: Set[String], milestoneId: Option[Int], state: String, sort: String, direction: String){ import IssueSearchCondition._ def toURL(repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context): String = { val params = List( if(labels.isEmpty) None else Some("labels=" + urlEncode(labels.mkString(" "))), milestoneId.map("milestone=" + _), - Some("state=" + urlEncode(state)), - sort.map("sort=" + urlEncode(_)), - direction.map("direction=" + urlEncode(_)) + Some("state=" + urlEncode(state)), + Some("sort=" + urlEncode(sort)), + Some("direction=" + urlEncode(direction)) ) "%s/%s/%s/issues?%s".format(context.path, repository.owner, repository.name, params.flatten.mkString("&")) } @@ -94,17 +94,17 @@ object IssuesService { private def urlEncode(value: String): String = URLEncoder.encode(value, "UTF-8") - private def param(request: HttpServletRequest, name: String): Option[String] = { + private def param(request: HttpServletRequest, name: String, allow: Seq[String] = Nil): Option[String] = { val value = request.getParameter(name) - if(value == null || value.isEmpty) None else Some(value) + if(value == null || value.isEmpty || (allow.nonEmpty && !allow.contains(value))) None else Some(value) } def apply(request: HttpServletRequest): IssueSearchCondition = IssueSearchCondition( param(request, "labels").map(_.split(" ").toSet).getOrElse(Set.empty), param(request, "milestone").map(_.toInt), - param(request, "state").getOrElse("open"), - param(request, "sort"), - param(request, "direction")) + param(request, "state", Seq("open", "closed")).getOrElse("open"), + param(request, "sort", Seq("created", "comments", "updated")).getOrElse("created"), + param(request, "direction", Seq("asc", "desc")).getOrElse("desc")) } } diff --git a/src/main/twirl/issues/issues.scala.html b/src/main/twirl/issues/issues.scala.html index acf648eae..6109057e8 100644 --- a/src/main/twirl/issues/issues.scala.html +++ b/src/main/twirl/issues/issues.scala.html @@ -89,16 +89,24 @@