Lookup table support!

This commit is contained in:
Morgan 2015-03-09 05:05:19 +00:00
parent 945fa4e9a6
commit e3efc283be
2 changed files with 34 additions and 18 deletions

2
resources/pronouns.tab Normal file
View File

@ -0,0 +1,2 @@
ze hir hirs hirs hirself
ze zir zir zirs zirself

View File

@ -11,34 +11,48 @@
[ring.adapter.jetty :as jetty] [ring.adapter.jetty :as jetty]
[environ.core :refer [env]])) [environ.core :refer [env]]))
(def config {:default-server-port 5000}) (def config {:default-server-port 5000
:pronoun-table-path "resources/pronouns.tab"})
(defn slurp-tabfile [path]
(let [lines (s/split (slurp path) #"\n")]
(map #(s/split % #"\t") lines)))
(defn lookup [inputs]
(let [pronouns-table (slurp-tabfile (:pronoun-table-path config))
n (count inputs)
filtered-table (filter #(= inputs (take n %)) pronouns-table)]
(first filtered-table)))
(defn parse-pronouns-with-lookup [pronouns-string]
(let [inputs (s/split pronouns-string #"/")
n (count inputs)]
(if (>= n 5)
(take 5 inputs)
(lookup inputs))))
(defn render-examples-page (defn render-examples-page
[subject object possessive-determiner possessive-pronoun reflexive] ([subject object possessive-determiner possessive-pronoun reflexive]
(s/join "\n" (s/join "\n"
[(str subject " went to the park") [(str subject " went to the park")
(str "I went with " object) (str "I went with " object)
(str subject " brought " possessive-determiner " frisbee") (str subject " brought " possessive-determiner " frisbee")
(str "at least I think it was " possessive-pronoun) (str "at least I think it was " possessive-pronoun)
(str subject " threw it to " reflexive)])) (str subject " threw it to " reflexive)]))
([error-message]
error-message))
(defroutes app-routes (defroutes app-routes
(GET "/" [] (GET "/" []
{:status 200 {:status 200
:headers {"Content-Type" "text/plain"} :headers {"Content-Type" "text/plain"}
:body "a blurb explaining how to use this site"}) :body "a blurb explaining how to use this site"})
(GET "/:subject/:object/:possessive-determiner/:possessive-pronoun/:reflexive" {params :params} (GET "/*" {params :params}
{:status 200 {:status 200
:headers {"Content-Type" "text/plain"} :headers {"Content-Type" "text/plain"}
;; ew this is super gross there's certainly a better way :body (let [pronouns (parse-pronouns-with-lookup {:* params})]
:body (let [{:keys (apply render-examples-page pronouns))})
[subject object possessive-determiner possessive-pronoun reflexive]}
params]
(render-examples-page subject
object
possessive-determiner
possessive-pronoun
reflexive))})
(ANY "*" [] (ANY "*" []
(route/not-found (slurp (io/resource "404.html"))))) (route/not-found (slurp (io/resource "404.html")))))