Class

org.coursera.naptime.actions

RestActionBuilder

Related Doc: package actions

Permalink

class RestActionBuilder[RACType, AuthType, BodyType, ResourceKeyType, ResourceType, ResponseType] extends AnyRef

A builder that helps build Rest Actions.

Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. RestActionBuilder
  2. AnyRef
  3. Any
  1. Hide All
  2. Show all
Visibility
  1. Public
  2. All

Instance Constructors

  1. new RestActionBuilder(auth: HeaderAccessControl[AuthType], bodyParser: BodyParser[BodyType], errorHandler: PartialFunction[Throwable, RestError])(implicit keyFormat: KeyFormat[ResourceKeyType], resourceFormat: OFormat[ResourceType])

    Permalink

Type Members

  1. type ActionBuilder[A] = RestActionBodyBuilder[ActionRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, A]

    Permalink

    Arbitrary actions on objects that are not standard CRUD operations.

    Arbitrary actions on objects that are not standard CRUD operations. This is very flexible, and must be carefully used only for good (and not evil). Actions may have side effects and may not be idempotent.

    Example:

    def convertToHtml(ids: Seq[Int]) = Rest.action { ctx =>
      val pages = store.multiGet(ids)
      val htmlIfied = pages.map { page =>
        MarkdownEngine.toHtml(page)
      }
      store.multiSave(htmlIfied)
      Ok(htmlIfied)
    }

    Underlying HTTP request (ids=1,2,3,5,8,13):

    POST /api/myResource?action=convertToHtml&ids=1,2,3,5,8,13
  2. type BodyBuilder[Category, Response] = RestActionBodyBuilder[Category, AuthType, BodyType, ResourceKeyType, ResourceType, Response]

    Permalink
  3. type CreateBuilder = RestActionBodyBuilder[CreateRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Keyed[ResourceKeyType, Option[ResourceType]]]

    Permalink

    Creates a new resource given an input.

    Creates a new resource given an input.

    Example:

    def create = Rest.create { ctx =>
      val newElement = createResourceFromBody(ctx.body)
      val newId = store.save(newOne)
      Ok(Keyed(newId, Some(newElement)))
    }

    Underlying HTTP request (body elided):

    POST /api/myResource
  4. type DeleteBuilder = RestActionBodyBuilder[DeleteRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Unit]

    Permalink

    Deletes an element from a collection.

    Deletes an element from a collection.

    Example:

    def delete(id: Int) = Rest.delete { ctx =>
      store.delete(id)
      Ok()
    }

    Underlying HTTP request (id=4):

    DELETE /api/myResource/4
  5. type FinderBuilder = RestActionBodyBuilder[FinderRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, FinderResponseType]

    Permalink
  6. type FinderResponseType = Seq[Keyed[ResourceKeyType, ResourceType]]

    Permalink

    Retrieval by any method other than retrival by Id [primary key].

    Retrieval by any method other than retrival by Id [primary key]. (For example, alternate key lookup, or full text search. This is intentionally a flexible API and can be used appropriately in many contexts. A finder MUST NOT have side effects, and must be idempotent.

    Example:

    def alternateKey(name: String) = Rest.finder { ctx =>
      val results = store.lookupByName(name=name)
      Ok(results.toSeq)
    }

    Underlying HTTP request (finder name='alternateKey', name='hogwarts'):

    GET /api/myResource?q=alternateKey&name=hogwarts
  7. type GetAllBuilder = RestActionBodyBuilder[GetAllRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Seq[Keyed[ResourceKeyType, ResourceType]]]

    Permalink

    Gets all elements in a collection.

    Gets all elements in a collection. Note: please use paging to avoid OOM-ing.

    Example:

    def getAll = Rest.getAll { ctx =>
      val results = store.getAll(start=ctx.paging.start, limit=ctx.paging.limit)
      Ok(results)
    }

    Underlying HTTP request (pagination: start=10, limit=5)

    GET /api/myResource?start=10&limit=5
  8. type GetBuilder = RestActionBodyBuilder[GetRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Keyed[ResourceKeyType, ResourceType]]

    Permalink

    Gets a resource by ID

    Gets a resource by ID

    Example:

    def get(id: Int) = Rest.get { ctx =>
      Ok(Keyed(id, MyResource(name=s"Resource-$id")))
    }

    Underlying HTTP request (id = "1"):

    GET /api/myResource/1
  9. type MultiGetBuilder = RestActionBodyBuilder[MultiGetRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Seq[Keyed[ResourceKeyType, ResourceType]]]

    Permalink

    Gets a batch of resources from this collection.

    Gets a batch of resources from this collection.

    Example:

    def multiGet(ids: Seq[Int]) = Rest.multiGet { ctx =>
      Ok(ids.map(id => Keyed(id, MyResource(name=s"Resource-$id"))))
    }

    Underlying HTTP request (ids = "1,2,3,4")

    GET /api/myResource?ids=1,2,3,4
  10. type PatchBuilder = RestActionBodyBuilder[PatchRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Keyed[ResourceKeyType, ResourceType]]

    Permalink

    Patch (or partial update) a resource.

    Patch (or partial update) a resource.

    Example:

    def patch(id: Int) = Rest.patch { ctx =>
      val oldObj = store.get(id)
      val newObj = PatchEngine.patch(oldObj, ctx.body)
      store.save(id, newObj)
      Ok(Keyed(id, newObj))
    }

    Underlying HTTP request (id=10, body elided):

    PATCH /api/myResource/10
  11. type UpdateBuilder = RestActionBodyBuilder[UpdateRestActionCategory, AuthType, BodyType, ResourceKeyType, ResourceType, Option[Keyed[ResourceKeyType, ResourceType]]]

    Permalink

    Updates a resource with a new copy of the resource.

    Updates a resource with a new copy of the resource.

    Example:

    def update(id: Int) = Rest.update { ctx =>
      val newVersion = validateBody(ctx.body)
      store.save(id, newVersion)
      Ok(Keyed(id, newVersion))
    }

    Underlying HTTP request (body elided, id=2):

    PUT /api/myResource/2

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. def action[A]: ActionBuilder[A]

    Permalink
  5. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  6. def auth[NewAuthType](auth: HeaderAccessControl[NewAuthType]): RestActionBuilder[RACType, NewAuthType, BodyType, ResourceKeyType, ResourceType, ResponseType]

    Permalink

    Set the authentication framework.

  7. def body[NewBodyType](bodyParser: BodyParser[NewBodyType]): RestActionBuilder[RACType, AuthType, NewBodyType, ResourceKeyType, ResourceType, ResponseType]

    Permalink

    Set the body type.

  8. def catching(errorHandler: PartialFunction[Throwable, RestError]): RestActionBuilder[RACType, AuthType, BodyType, ResourceKeyType, ResourceType, ResponseType]

    Permalink

    Adds an error handling function to allow exceptions to generate custom errors.

    Adds an error handling function to allow exceptions to generate custom errors.

    Note: all of the partial functions are stacked, with later functions getting an earlier crack at an exception to handle it.

    errorHandler

    Error handling partial function.

    returns

    the immutable RestActionBuilder to be used to build the naptime resource action.

  9. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  10. def create: CreateBuilder

    Permalink
  11. def delete: DeleteBuilder

    Permalink
  12. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  13. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  14. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  15. def finder: FinderBuilder

    Permalink
  16. def get: GetBuilder

    Permalink
  17. def getAll: GetAllBuilder

    Permalink
  18. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  19. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  20. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  21. def jsonBody[NewBodyType](maxLength: Int = 100 * 1024)(implicit reads: Reads[NewBodyType]): RestActionBuilder[RACType, AuthType, NewBodyType, ResourceKeyType, ResourceType, ResponseType]

    Permalink
  22. def jsonBody[NewBodyType](implicit reads: Reads[NewBodyType]): RestActionBuilder[RACType, AuthType, NewBodyType, ResourceKeyType, ResourceType, ResponseType]

    Permalink
  23. def multiGet: MultiGetBuilder

    Permalink
  24. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  25. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  26. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  27. def patch: PatchBuilder

    Permalink
  28. def rawJsonBody(maxLength: Int = 100 * 1024): RestActionBuilder[RACType, AuthType, JsValue, ResourceKeyType, ResourceType, ResponseType]

    Permalink
  29. def returning[NewResponseType](): RestActionBuilder[RACType, AuthType, BodyType, ResourceKeyType, ResourceType, NewResponseType]

    Permalink

    Set the response type.

    Set the response type. TODO: is this necessary?

  30. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  31. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  32. def update: UpdateBuilder

    Permalink
  33. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  34. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  35. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from AnyRef

Inherited from Any

Ungrouped