Skip to content

Instantly share code, notes, and snippets.

@sfosdal
Last active July 5, 2018 15:56
Show Gist options
  • Save sfosdal/87e8b95c2d06eaa1b53021c4acd69a15 to your computer and use it in GitHub Desktop.
Save sfosdal/87e8b95c2d06eaa1b53021c4acd69a15 to your computer and use it in GitHub Desktop.

Revisions

  1. sfosdal revised this gist Jul 5, 2018. 1 changed file with 7 additions and 8 deletions.
    15 changes: 7 additions & 8 deletions Pagination.scala
    Original file line number Diff line number Diff line change
    @@ -9,11 +9,17 @@ import com.apptentive.profile.routes.Paging._

    import scala.util._

    object Paging {
    val DefaultPageSize: Int = 100
    val ValidPageSizes: Range = 1 to 4000
    }

    case class Paging(startsAfter: Option[UUID] = None, size: Int = DefaultPageSize)

    trait Pagination {

    def extractPaging: Directive1[Paging] = {
    parameterMap.flatMap { params =>
    // extraction
    val size = Try(params.get("page_size").map(_.toInt).get)
    val startsAfter = Try(params.get("starts_after").map(fromString))

    @@ -27,10 +33,3 @@ trait Pagination {
    }

    }

    object Paging {
    val DefaultPageSize: Int = 100
    val ValidPageSizes: Range = 1 to 4000
    }

    case class Paging(startsAfter: Option[UUID] = None, size: Int = DefaultPageSize)
  2. sfosdal revised this gist Jul 5, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Pagination.scala
    Original file line number Diff line number Diff line change
    @@ -7,7 +7,7 @@ import akka.http.scaladsl.server.Directive1
    import akka.http.scaladsl.server.Directives._
    import com.apptentive.profile.routes.Paging._

    import scala.util.{Failure, Success, Try}
    import scala.util._

    trait Pagination {

  3. sfosdal created this gist Jul 5, 2018.
    36 changes: 36 additions & 0 deletions Pagination.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,36 @@
    package com.apptentive.profile.routes

    import java.util.UUID
    import java.util.UUID.fromString

    import akka.http.scaladsl.server.Directive1
    import akka.http.scaladsl.server.Directives._
    import com.apptentive.profile.routes.Paging._

    import scala.util.{Failure, Success, Try}

    trait Pagination {

    def extractPaging: Directive1[Paging] = {
    parameterMap.flatMap { params =>
    // extraction
    val size = Try(params.get("page_size").map(_.toInt).get)
    val startsAfter = Try(params.get("starts_after").map(fromString))

    (size, startsAfter) match {
    case (Failure(_), _) | (_, Failure(_)) | (Success(s), _) if !ValidPageSizes.contains(s) =>
    reject
    case (_, _) =>
    provide(Paging(startsAfter.getOrElse(None), size.getOrElse(DefaultPageSize)))
    }
    }
    }

    }

    object Paging {
    val DefaultPageSize: Int = 100
    val ValidPageSizes: Range = 1 to 4000
    }

    case class Paging(startsAfter: Option[UUID] = None, size: Int = DefaultPageSize)