Skip to content

Commit b47d640

Browse files
committed
Add RSS feed
1 parent 59e4485 commit b47d640

File tree

5 files changed

+46
-15
lines changed

5 files changed

+46
-15
lines changed

project.clj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
[alekcz/storyblok-clj "1.2.0"]
1818
[camel-snake-kebab/camel-snake-kebab "0.4.3"]
1919
[clojure.java-time "1.3.0"]
20-
[superstructor/re-highlight "2.0.2"]]
20+
[superstructor/re-highlight "2.0.2"]
21+
[clj-rss "0.4.0"]]
2122
:plugins [[lein-environ "1.1.0"]]
2223
:main ^:skip-aot com.sagar.casa
2324
:target-path "target/%s"

src/com/sagar/casa/rss.clj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
(ns com.sagar.casa.rss
2+
(:require [com.sagar.casa.api.storyblok :as api]
3+
[clj-rss.core :as rss]))
4+
5+
6+
(defn rss-feed
7+
[]
8+
(->> (api/get-story :blogs)
9+
(map #(select-keys % [:title :slug :description]))
10+
(map #(assoc % :link (str "https://sagarvrajalal.com/" (:slug %))))
11+
(map #(dissoc % :slug))
12+
(apply rss/channel-xml)))

src/com/sagar/casa/server.clj

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22
(:require [com.sagar.casa.middleware :as middleware]
33
com.sagar.casa.ui
44
[donut.system :as ds]
5+
[com.sagar.casa.rss :as rss]
56
[hyperfiddle.electric :as e]
67
[hyperfiddle.electric-ring-adapter :as electric-ring]
78
[ring.adapter.jetty :as ring]
89
[ring.middleware.cookies :as cookies]
910
[ring.middleware.params :refer [wrap-params]]
1011
[shadow.cljs.devtools.api :as shadow-api]
1112
[shadow.cljs.devtools.server :as shadow-server]
12-
[taoensso.timbre :as timbre])
13+
[taoensso.timbre :as timbre]
14+
[ring.util.response :as res])
1315
(:import (org.eclipse.jetty.server.handler.gzip
1416
GzipHandler)
1517
(org.eclipse.jetty.websocket.server.config
@@ -21,6 +23,18 @@
2123
;; See Dockerfile
2224
(not-empty (System/getProperty "HYPERFIDDLE_ELECTRIC_APP_VERSION")))
2325

26+
(def entrypoint
27+
(fn [handler]
28+
(e/boot-server {} com.sagar.casa.ui/Root handler)))
29+
30+
31+
(defn rss-middleware
32+
[handler]
33+
(fn [request]
34+
(if (= (:uri request) "/feed.xml")
35+
(-> (res/response (rss/rss-feed))
36+
(res/content-type "application/xml"))
37+
(handler request))))
2438

2539
(defn electric-websocket-middleware
2640
"Open a websocket and boot an Electric server program defined by `entrypoint`.
@@ -30,15 +44,16 @@
3044
- see `hyperfiddle.electric-ring-adapter/wrap-reject-stale-client`
3145
- an Electric `entrypoint`: a function (fn [ring-request] (e/boot-server {} my-ns/My-e-defn ring-request))
3246
"
33-
[next-handler config entrypoint]
47+
[next-handler config]
3448
(-> (electric-ring/wrap-electric-websocket next-handler entrypoint)
3549
(cookies/wrap-cookies)
3650
(electric-ring/wrap-reject-stale-client config)
3751
(wrap-params)))
3852

39-
(defn middleware [config entrypoint]
53+
(defn middleware [config]
4054
(-> (middleware/http-middleware config) ; 2. serve regular http content
41-
(electric-websocket-middleware config entrypoint))) ; 1. intercept electric websocket
55+
(electric-websocket-middleware config) ; 1. intercept electric websocket
56+
(rss-middleware)))
4257

4358
(defn- add-gzip-handler!
4459
"Makes Jetty server compress responses. Optional but recommended."
@@ -69,16 +84,11 @@
6984
(.setMaxTextMessageSize wsContainer (* 100 1024 1024))))))
7085

7186

72-
(def entrypoint
73-
(fn [handler]
74-
(e/boot-server {} com.sagar.casa.ui/Root handler)))
75-
76-
7787
(def server
7888
#::ds{:start (fn [{{:keys [host port] :as opts} ::ds/config}]
7989
;; Start electric compiler and server
8090
(timbre/warn (str "Starting server on " host ":" port))
81-
(ring/run-jetty (middleware opts entrypoint) opts))
91+
(ring/run-jetty (middleware opts) opts))
8292
:config {:host (ds/ref [:env :http-host])
8393
:port (ds/ref [:env :http-port])
8494
:join? false
@@ -98,7 +108,7 @@
98108
(shadow-api/dev :dev)
99109
;; Start electric compiler and server
100110
(timbre/warn (str "Starting server on " host ":" port))
101-
(ring/run-jetty (middleware opts entrypoint) opts))
111+
(ring/run-jetty (middleware opts) opts))
102112
:stop (fn [{server ::ds/instance}]
103113
(timbre/warn "Stopping HTTP Server...")
104114
(.stop server)

src/com/sagar/casa/ui/blog.cljc

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,16 @@
7979
:fluid true
8080
:class-name "pt-3 col-md-6 overflow-auto mx-auto"}
8181
[:> Stack {:gap 2}
82-
[:a {:style {:text-decoration :none}
83-
:href routes/home}
84-
"↰ Home"]
82+
83+
[:> Row
84+
[:> Col {:class-name "text-start"}
85+
[:a {:style {:text-decoration :none}
86+
:href routes/home}
87+
"↰ Home"]]
88+
[:> Col {:class-name "text-end"}
89+
[:a {:style {:text-decoration :none}
90+
:href routes/rss}
91+
"RSS " [:i {:class-name "fa fa-rss"}]]]]
8592
[:div
8693
[:h2 "Blog"]
8794
[:hr {:style {:border-color :black}}]]

src/com/sagar/casa/ui/routes.cljc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@
66
(def blogpost (partial str blog "/"))
77
(def not-found "/not-found")
88
(def literature "/literature")
9+
(def rss "/feed.xml")

0 commit comments

Comments
 (0)