Spock-core-0.11.0.0: Another Haskell web framework for rapid development

Safe HaskellNone
LanguageHaskell98

Web.Spock.Core

Contents

Synopsis

Lauching Spock

runSpock :: Port -> IO Middleware -> IO () Source

Run a Spock application. Basically just a wrapper around run.

runSpockNoBanner :: Port -> IO Middleware -> IO () Source

Like runSpock, but does not display the banner "Spock is running on port XXX" on stdout.

spockAsApp :: IO Middleware -> IO Application Source

Convert a middleware to an application. All failing requests will result in a 404 page

Spock's route definition monad

spockT :: MonadIO m => (forall a. m a -> IO a) -> SpockT m () -> IO Middleware Source

Create a raw spock application with custom underlying monad Use runSpock to run the app or spockAsApp to create a Wai.Application The first argument is request size limit in bytes. Set to Nothing to disable.

spockLimT :: forall m. MonadIO m => Maybe Word64 -> (forall a. m a -> IO a) -> SpockT m () -> IO Middleware Source

Deprecated: Consider using spockConfigT instead

Like spockT, but first argument is request size limit in bytes. Set to Nothing to disable.

spockConfigT :: forall m. MonadIO m => SpockConfig -> (forall a. m a -> IO a) -> SpockT m () -> IO Middleware Source

Like spockT, but with additional configuration for request size and error handlers passed as first parameter.

data SpockCtxT ctx m a Source

Defining routes

data Path as pathState :: [*] -> PathState -> *

Instances

((~) [*] a ([] *), (~) PathState pathState Open) => IsString (Path a pathState) 

root :: Path ([] *) Open

The root of a path piece. Use to define a handler for "/"

type Var a = Path ((:) * a ([] *)) Open

var :: (Typeable * a, PathPiece a) => Path ((:) * a ([] *)) Open

A route parameter

static :: String -> Path ([] *) Open

A static route piece

(<//>) :: Path as Open -> Path bs ps -> Path (Append as bs) ps Source

Combine two path components

Rendering routes

renderRoute :: Path as Open -> HVectElim as Text Source

Render a route applying path pieces

Hooking routes

subcomponent :: Monad m => Path `[]` Open -> SpockCtxT ctx m () -> SpockCtxT ctx m () Source

Define a subcomponent. Usage example:

subcomponent "site" $
  do get "home" homeHandler
     get ("misc" <//> var) $ -- ...
subcomponent "admin" $
  do get "home" adminHomeHandler

The request /site/home will be routed to homeHandler and the request /admin/home will be routed to adminHomeHandler

prehook :: forall m ctx ctx'. MonadIO m => ActionCtxT ctx m ctx' -> SpockCtxT ctx' m () -> SpockCtxT ctx m () Source

Specify an action that will be run before all subroutes. It can modify the requests current context

get :: (HasRep xs, MonadIO m) => Path xs ps -> HVectElim xs (ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when the HTTP verb GET and the given route match

post :: (HasRep xs, MonadIO m) => Path xs ps -> HVectElim xs (ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when the HTTP verb POST and the given route match

getpost :: (HasRep xs, MonadIO m) => Path xs ps -> HVectElim xs (ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when the HTTP verb 'GET'/'POST' and the given route match

head :: (HasRep xs, MonadIO m) => Path xs ps -> HVectElim xs (ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when the HTTP verb HEAD and the given route match

put :: (HasRep xs, MonadIO m) => Path xs ps -> HVectElim xs (ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when the HTTP verb PUT and the given route match

delete :: (HasRep xs, MonadIO m) => Path xs ps -> HVectElim xs (ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when the HTTP verb DELETE and the given route match

patch :: (HasRep xs, MonadIO m) => Path xs ps -> HVectElim xs (ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when the HTTP verb PATCH and the given route match

hookRoute :: forall xs ctx m ps. (HasRep xs, Monad m) => StdMethod -> Path xs ps -> HVectElim xs (ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when a standard HTTP verb and the given route match

hookRouteCustom :: forall xs ctx m ps. (HasRep xs, Monad m) => Text -> Path xs ps -> HVectElim xs (ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when a custom HTTP verb and the given route match

hookAny :: Monad m => StdMethod -> ([Text] -> ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when a standard HTTP verb matches but no defined route matches. The full path is passed as an argument

hookAnyCustom :: Monad m => Text -> ([Text] -> ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when a custom HTTP verb matches but no defined route matches. The full path is passed as an argument

data StdMethod :: *

HTTP standard method (as defined by RFC 2616, and PATCH which is defined by RFC 5789).

Constructors

GET 
POST 
HEAD 
PUT 
DELETE 
TRACE 
CONNECT 
OPTIONS 
PATCH 

Adding Wai.Middleware

middleware :: Monad m => Middleware -> SpockCtxT ctx m () Source

Hook wai middleware into Spock

Actions

Config

data SpockConfig Source

Constructors

SpockConfig 

Fields

sc_maxRequestSize :: Maybe Word64

Maximum request size in bytes

sc_errorHandler :: Status -> ActionCtxT () IO ()

Error handler. Given status is set in response by default, but you can always override it with setStatus

defaultSpockConfig :: SpockConfig Source

Default Spock configuration. No restriction on maximum request size; error handler simply prints status message as plain text.

Internals

hookRoute' :: forall xs ctx m ps. (HasRep xs, Monad m) => SpockMethod -> Path xs ps -> HVectElim xs (ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when a HTTP verb and the given route match

hookAny' :: Monad m => SpockMethod -> ([Text] -> ActionCtxT ctx m ()) -> SpockCtxT ctx m () Source

Specify an action that will be run when a HTTP verb matches but no defined route matches. The full path is passed as an argument

data SpockMethod Source

The SpockMethod allows safe use of http verbs via the MethodStandard constructor and StdMethod, and custom verbs via the MethodCustom constructor.

Constructors

MethodStandard !HttpMethod

Standard HTTP Verbs from StdMethod

MethodCustom !Text

Custom HTTP Verbs using Text