]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/webapps/calculator/calculator.factor
New webapps.calculator demo
[factor.git] / extra / webapps / calculator / calculator.factor
diff --git a/extra/webapps/calculator/calculator.factor b/extra/webapps/calculator/calculator.factor
new file mode 100644 (file)
index 0000000..f1416fb
--- /dev/null
@@ -0,0 +1,44 @@
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: furnace.actions furnace.redirection
+http.server.dispatchers html.forms validators urls accessors
+math ;
+IN: webapps.calculator
+
+TUPLE: calculator < dispatcher ;
+
+: <calculator-action> ( -- action )
+    <page-action>
+
+    [
+        { { "z" [ [ v-number ] v-optional ] } } validate-params
+    ] >>init
+
+    { calculator "calculator" } >>template
+
+    [
+        {
+            { "x" [ v-number ] }
+            { "y" [ v-number ] }
+        } validate-params
+
+        URL" $calculator" "x" value "y" value + "z" set-query-param
+        <redirect>
+    ] >>submit ;
+
+: <calculator> ( -- responder )
+    calculator new-dispatcher
+        <calculator-action> >>default ;
+
+! Deployment example
+USING: db.sqlite furnace.alloy namespaces http.server ;
+
+: calculator-db ( -- params db ) "calculator.db" sqlite-db ;
+
+: run-calculator ( -- )
+    <calculator>
+        calculator-db <alloy>
+        main-responder set-global
+    8080 httpd ;
+
+MAIN: run-calculator