-
-
Save ayato-p/668f78af41919218885f13f2212eb96a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(require | |
'[bidi.bidi :as bidi] | |
'[bidi.ring] | |
'[hiccup.core :as h] | |
'[integrant.core :as ig] | |
'[kuuga.growing :as k.growing] | |
'[kuuga.tool :as k.tool] | |
'[kuuga.ultimate :as k.ultimate] | |
'[ring.adapter.jetty :as jetty] | |
'[ring.middleware.keyword-params :as mw.keyword-params] | |
'[ring.middleware.nested-params :as mw.nested-params] | |
'[ring.middleware.params :as mw.params] | |
'[ring.util.response :as res]) | |
(defonce +system+ (atom nil)) | |
(defmethod ig/init-key :demo/server | |
[_ opts] | |
(->> (select-keys opts [:host :port :join?]) | |
(jetty/run-jetty (or (:handler opts) identity)))) | |
(defmethod ig/halt-key! :demo/server | |
[_ server] | |
(.stop server)) | |
(def routes | |
["/" {:get :handler/get-handler | |
:post :handler/post-handler}]) | |
(defmulti handler-resolver identity) | |
(alter-var-root #'mw.keyword-params/keyword-syntax? (fn [v] (constantly true))) | |
(defmethod ig/init-key :demo/endpoint | |
[_ _] | |
(-> (bidi.ring/make-handler routes handler-resolver) | |
mw.keyword-params/wrap-keyword-params | |
mw.nested-params/wrap-nested-params | |
mw.params/wrap-params)) | |
(def system-config | |
{:demo/endpoint {} | |
:demo/server {:port 3000 | |
:join? false | |
:handler (ig/ref :demo/endpoint)}}) | |
(defn start [] | |
(when-not @+system+ | |
(reset! +system+ (ig/init system-config))) | |
:started) | |
(defn stop [] | |
(when @+system+ (ig/halt! @+system+)) | |
(reset! +system+ nil) | |
:stoped) | |
;;; --- | |
(defmethod k.growing/transform-by-tag :input | |
[_ _ tagvec] | |
(let [[tag tagopts contents] (k.tool/parse-tag-vector tagvec)] | |
`[~tag | |
(update ~tagopts :name #(if (keyword? %) (subs (str %) 1) %)) | |
~@contents])) | |
(def view | |
(h/html | |
(k.ultimate/transform* | |
[:form {:method :post} | |
[:div | |
[:label "アリス:出身地"] | |
[:input {:name :alice/hometown}]] | |
[:div | |
[:label "アリス:年齢"] | |
[:input {:name :alice/age}]] | |
[:div | |
[:label "ボブ:出身地"] | |
[:input {:name :bob/hometown}]] | |
[:div | |
[:label "ボブ:年齢"] | |
[:input {:name :bob/age}]] | |
[:button {:type :submit} "submit"]]))) | |
(defn get-handler [req] | |
(-> view | |
res/response | |
(res/content-type "text/html; charset=utf8"))) | |
(defmethod handler-resolver :handler/get-handler | |
[_] | |
get-handler) | |
(defn post-handler [req] | |
(-> (:params req) | |
pr-str | |
res/response | |
(res/content-type "text/plain; charset=utf8"))) | |
(defmethod handler-resolver :handler/post-handler | |
[_] | |
post-handler) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defproject demo "0.1.0-SNAPSHOT" | |
:dependencies [[ayato_p/kuuga "0.1.1"] | |
[bidi "2.1.2" :exclusions [ring/ring-core]] | |
[hiccup "2.0.0-alpha1"] | |
[integrant "0.6.1"] | |
[org.clojure/clojure "1.9.0-RC2"] | |
[ring "1.6.3"]]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment