All Downloads are FREE. Search and download functionalities are using the official Maven repository.

skinny.controller.SkinnyResourceRoutes.scala Maven / Gradle / Ivy

There is a newer version: 2.5.2
Show newest version
package skinny.controller

import skinny.routing.Routes
import skinny.routing.implicits.RoutesAsImplicits

/**
 * Routes for Skinny resource.
 */
trait SkinnyResourceRoutes[Id]
    extends SkinnyApiResourceRoutes[Id]
    with Routes { self: SkinnyResourceActions[Id] =>

  // --------------
  // show

  val indexUrl = get(s"${resourcesBasePath}")(showResources()).as('index)
  val indexWithSlashUrl = get(s"${resourcesBasePath}/")(showResources()).as('index)

  val showUrl = get(s"${resourcesBasePath}/:${idParamName}") {
    params.getAs[Id](idParamName).map(id => showResource(id)).getOrElse(haltWithBody(404))
  }.as('show)

  // Scalatra takes priority to route definition which is defined later.
  // So showExtUrl is defined again here.
  override val showApiUrl = routeForShowApi

  // --------------
  // create
  // Scalatra takes priority to route definition which is defined later.
  val newUrl = get(s"${resourcesBasePath}/new")(newResource).as('new)

  val createUrl = post(s"${resourcesBasePath}")(createResource).as('create)
  val createWithSlashUrl = post(s"${resourcesBasePath}/")(createResource).as('create)

  // --------------
  // update

  val editUrl = get(s"${resourcesBasePath}/:${idParamName}/edit") {
    params.getAs[Id](idParamName).map(id => editResource(id)) getOrElse haltWithBody(404)
  }.as('edit)

  val updatePostUrl = post(s"${resourcesBasePath}/:${idParamName}")(updateAction).as('update)
  val updateUrl = put(s"${resourcesBasePath}/:${idParamName}")(updateAction).as('update)
  val updatePatchUrl = patch(s"${resourcesBasePath}/:${idParamName}")(updateAction).as('update)

  protected def updateAction = {
    params.getAs[Id](idParamName).map(id => updateResource(id)) getOrElse haltWithBody(404)
  }

  // --------------
  // delete

  val destroyUrl = delete(s"${resourcesBasePath}/:${idParamName}")(deleteAction).as('destroy)

  protected def deleteAction = {
    params.getAs[Id](idParamName).map(id => destroyResource(id)) getOrElse haltWithBody(404)
  }

  // ###########################
  // override API routes
  post(s"${resourcesBasePath}.:ext")({
    setContentTypeFromSkinnyApiResourceExtParam
    createApiAction
  }).as('createApi)

  post(s"${resourcesBasePath}/:${idParamName}.:ext")({
    setContentTypeFromSkinnyApiResourceExtParam
    updateApiAction
  }).as('updateApi)
  put(s"${resourcesBasePath}/:${idParamName}.:ext")({
    setContentTypeFromSkinnyApiResourceExtParam
    updateApiAction
  }).as('updateApi)
  patch(s"${resourcesBasePath}/:${idParamName}.:ext")({
    setContentTypeFromSkinnyApiResourceExtParam
    updateApiAction
  }).as('updateApi)

  delete(s"${resourcesBasePath}/:${idParamName}.:ext")({
    setContentTypeFromSkinnyApiResourceExtParam
    deleteApiAction
  }).as('destroyApi)
  // ###########################

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy