Skip to content

Commit

Permalink
Merge pull request #1 from mastoj/master
Browse files Browse the repository at this point in the history
Sample complex app
  • Loading branch information
MartinSahlen committed Feb 9, 2017
2 parents 2f9f190 + e70951e commit b931c36
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 10 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -254,3 +254,5 @@ paket-files/
# JetBrains Rider
.idea/
*.sln.iml

.vscode/
74 changes: 74 additions & 0 deletions src/index.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
module GcloudFunction
open Fable.Import
open System

module ExpressHelpers =
type ExpressContext = {
Request: express.Request
Response: express.Response
Content: string
}

type ExpressPart = ExpressContext -> ExpressContext option

let bind p1 ctx =
match ctx with
| Some ctx -> p1 ctx
| None -> None

let compose p1 p2 ctx =
match p1 ctx with
| None -> None
| Some ctx -> p2 ctx

let (>>=) x p = p x
let (>=>) p1 p2 = compose p1 p2

let rec choose parts ctx =
match parts with
| [] -> None
| p::ps ->
match p ctx with
| None -> choose ps ctx
| Some ctx -> Some ctx

let answer = function
| Some ctx ->
ctx.Response.send ctx.Content
| None -> raise (exn "Failed")

let execute request response app =
let ctx = { Request = request; Response = response; Content = "" }
ctx |> (app >> answer)

let notFound str ctx =
let res = ctx.Response.status 404.
{ ctx with Response = res; Content = str} |> Some

open ExpressHelpers

let hasBodyPart str ctx =
if ctx.Request.body.ToString().Contains(str)
then
{
ctx with
Content = ctx.Content + "Hello: " + str
} |> Some
else
None


let app =
choose
[
hasBodyPart "Hello" >=> hasBodyPart "Tomas"
hasBodyPart "Yolo"
notFound "Stupid stupid me"
]

let helloTomas (request: express.Request) (response: express.Response) =
execute request response app
// response.send "Hello, World!"

let yolo (request: express.Request) (response: express.Response) =
response.send "Yolo, World!"
2 changes: 1 addition & 1 deletion src/index.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
<Reference Include="System.Numerics" />
</ItemGroup>
<ItemGroup>
<Compile Include="index.fsx" />
<Compile Include="index.fs" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Choose>
Expand Down
9 changes: 0 additions & 9 deletions src/index.fsx

This file was deleted.

0 comments on commit b931c36

Please sign in to comment.