Last active
November 23, 2015 19:43
-
-
Save pjagielski/2b9bfabc28c5dc176d7b to your computer and use it in GitHub Desktop.
clojure-web
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
(ns jinkubator.endpoint.api | |
(:require [compojure.api.sweet :refer :all] | |
[ring.util.http-response :refer [ok]] | |
[schema.core :as s])) | |
(s/defschema Message | |
{:message s/Str}) | |
(s/defschema MessageList | |
[Message]) | |
(s/defschema PosNumber | |
(s/constrained Long | |
pos? 'pos)) | |
(defn- string-to-numbers [s] | |
(map (fn [x] (Integer/parseInt (str x))) s)) | |
(defn- nip? [v] | |
(let [weights [6, 5, 7, 2, 3, 4, 5, 6, 7] | |
nip-numbers (string-to-numbers v)] | |
(as-> | |
nip-numbers $ | |
(map * $ weights) | |
(reduce + $) | |
(mod $ 11) | |
(= $ (last nip-numbers))))) | |
(s/defschema NIP | |
(s/constrained String | |
nip? 'nip)) | |
(defn api-endpoint [config] | |
(api | |
(swagger-ui "/swagger") | |
(swagger-docs) | |
(GET* "/nip/:nip" [] | |
:path-params [nip :- NIP] | |
(ok)) | |
(GET* "/messages" [] | |
:return MessageList | |
(ok | |
[{:message "Hello World"}])) | |
(GET* "/messages/:id" [] | |
:path-params [id :- PosNumber] | |
:return Message | |
(ok | |
{:message (str (inc id))})))) |
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
(ns jinkubator.endpoint.example | |
(:require [compojure.core :refer :all] | |
[compojure.api.sweet :as ca] | |
[clojure.java.io :as io] | |
[ring.util.http-response :refer [ok]])) | |
(defn example-endpoint [config] | |
(context "/wjug" [] | |
(GET "/prone" [] | |
(throw (RuntimeException. "hello"))) | |
(GET "/" [] | |
(io/resource "public/index.html")))) |
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
(ns jinkubator.system | |
(:require [com.stuartsierra.component :as component] | |
[duct.component.endpoint :refer [endpoint-component]] | |
[duct.component.handler :refer [handler-component]] | |
[duct.middleware.not-found :refer [wrap-not-found]] | |
[meta-merge.core :refer [meta-merge]] | |
[ring.component.jetty :refer [jetty-server]] | |
[ring.middleware.defaults :refer [wrap-defaults api-defaults]] | |
[prone.middleware :refer [wrap-exceptions]] | |
[jinkubator.endpoint.example :refer [example-endpoint]] | |
[jinkubator.endpoint.api :refer [api-endpoint]])) | |
(def base-config | |
{:app {:middleware [[wrap-not-found :not-found] | |
[wrap-defaults :defaults] | |
[wrap-exceptions]] | |
:not-found "Resource Not Found" | |
:defaults (meta-merge api-defaults {:static {:resources "public"}})}}) | |
(defn new-system [config] | |
(let [config (meta-merge base-config config)] | |
(-> (component/system-map | |
:app (handler-component (:app config)) | |
:http (jetty-server (:http config)) | |
:example (endpoint-component example-endpoint) | |
:api (endpoint-component api-endpoint)) | |
(component/system-using | |
{:http [:app] | |
:app [:example :api]})))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment