factor out pages and util namespaces per #6
This commit is contained in:
parent
1ff93e23bc
commit
d88f645e26
33
src/pronouns/pages.clj
Normal file
33
src/pronouns/pages.clj
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
(ns pronouns.pages
|
||||||
|
(:require [clojure.string :as s]
|
||||||
|
[pronouns.util :as u]))
|
||||||
|
|
||||||
|
(defn format-pronoun-examples
|
||||||
|
[subject object possessive-determiner possessive-pronoun reflexive]
|
||||||
|
(s/join "\n"
|
||||||
|
[(str subject " went to the park")
|
||||||
|
(str "I went with " object)
|
||||||
|
(str subject " brought " possessive-determiner " frisbee")
|
||||||
|
(str "at least I think it was " possessive-pronoun)
|
||||||
|
(str subject " threw it to " reflexive)]))
|
||||||
|
|
||||||
|
(defn parse-pronouns-with-lookup [pronouns-string pronouns-table]
|
||||||
|
(let [inputs (s/split pronouns-string #"/")
|
||||||
|
n (count inputs)]
|
||||||
|
(if (>= n 5)
|
||||||
|
(take 5 inputs)
|
||||||
|
(u/table-lookup inputs pronouns-table))))
|
||||||
|
|
||||||
|
(defn front []
|
||||||
|
(str "pronoun.is is a www site for showing people how to use pronouns"))
|
||||||
|
|
||||||
|
(defn not-found []
|
||||||
|
(str "We couldn't find those pronouns in our database, please ask us to "
|
||||||
|
"add them, or issue a pull request at "
|
||||||
|
"https://github.com/witch-house/pronoun.is/blob/master/resources/pronouns.tab"))
|
||||||
|
|
||||||
|
(defn pronouns [path pronouns-table]
|
||||||
|
(let [pronouns (parse-pronouns-with-lookup path pronouns-table)]
|
||||||
|
(if pronouns
|
||||||
|
(apply format-pronoun-examples pronouns)
|
||||||
|
(not-found))))
|
16
src/pronouns/util.clj
Normal file
16
src/pronouns/util.clj
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
(ns pronouns.util
|
||||||
|
(:require [clojure.string :as s]))
|
||||||
|
|
||||||
|
(defn slurp-tabfile [path]
|
||||||
|
(let [lines (s/split (slurp path) #"\n")]
|
||||||
|
(map #(s/split % #"\t") lines)))
|
||||||
|
|
||||||
|
(defn table-lookup
|
||||||
|
[query-key table]
|
||||||
|
(let [arity (count query-key)
|
||||||
|
filtered-table (filter #(= query-key (take arity %)) table)]
|
||||||
|
(first filtered-table)))
|
||||||
|
|
||||||
|
(defn tabfile-lookup
|
||||||
|
[query-key tabfile]
|
||||||
|
(table-lookup query-key (slurp-tabfile tabfile)))
|
@ -9,51 +9,24 @@
|
|||||||
[ring.middleware.session :as session]
|
[ring.middleware.session :as session]
|
||||||
[ring.middleware.session.cookie :as cookie]
|
[ring.middleware.session.cookie :as cookie]
|
||||||
[ring.adapter.jetty :as jetty]
|
[ring.adapter.jetty :as jetty]
|
||||||
[environ.core :refer [env]]))
|
[environ.core :refer [env]]
|
||||||
|
[pronouns.util :as u]
|
||||||
|
[pronouns.pages :as pages]))
|
||||||
|
|
||||||
(def config {:default-server-port 5000
|
(def config {:default-server-port 5000
|
||||||
:pronoun-table-path "resources/pronouns.tab"})
|
:pronoun-table-path "resources/pronouns.tab"})
|
||||||
|
(def pronouns-table (u/slurp-tabfile (:pronoun-table-path config)))
|
||||||
(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
|
|
||||||
([subject object possessive-determiner possessive-pronoun reflexive]
|
|
||||||
(s/join "\n"
|
|
||||||
[(str subject " went to the park")
|
|
||||||
(str "I went with " object)
|
|
||||||
(str subject " brought " possessive-determiner " frisbee")
|
|
||||||
(str "at least I think it was " possessive-pronoun)
|
|
||||||
(str subject " threw it to " reflexive)]))
|
|
||||||
([nothing]
|
|
||||||
(str "We couldn't find those pronouns in our database, please ask us to "
|
|
||||||
"add them, or issue a pull request at "
|
|
||||||
"https://github.com/witch-house/pronoun.is/blob/master/resources/pronouns.tab")))
|
|
||||||
|
|
||||||
(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 (pages/front)})
|
||||||
|
|
||||||
(GET "/*" {params :params}
|
(GET "/*" {params :params}
|
||||||
{:status 200
|
{:status 200
|
||||||
:headers {"Content-Type" "text/plain"}
|
:headers {"Content-Type" "text/plain"}
|
||||||
:body (let [pronouns (parse-pronouns-with-lookup (:* params))]
|
:body (pages/pronouns (:* params) pronouns-table)})
|
||||||
(apply render-examples-page (or pronouns [:error])))})
|
|
||||||
|
|
||||||
(ANY "*" []
|
(ANY "*" []
|
||||||
(route/not-found (slurp (io/resource "404.html")))))
|
(route/not-found (slurp (io/resource "404.html")))))
|
||||||
|
Loading…
Reference in New Issue
Block a user