git.fiddlerwoaroof.com
Browse code

Minor improvements to atom and the test server

fiddlerwoaroof authored on 23/05/2016 17:49:30
Showing 2 changed files
... ...
@@ -134,12 +134,11 @@
134 134
      (defconstants ,@constants)))
135 135
 
136 136
 (defmethod %generate-xml ((feed feed) (feed-type (eql :atom)) &key partial)
137
-  (let ((parent (or ($ (inline partial) "feed" (node))
137
+  (let ((feed-root (or ($1 (inline partial) "feed")
138 138
                     (plump:make-element (plump:make-root) "feed"))))
139
-    (prog1 parent
140
-      (let ((feed-root (make-element parent "feed")))
141
-        (with-slots (title id updated link feed-link description) feed
142
-          ($ (inline (make-element feed-root "title")) (text title)
139
+    (prog1 feed-root
140
+      (with-slots (title id updated link feed-link description) feed
141
+        ($ (inline (make-element feed-root "title")) (text title)
143 142
 
144 143
              (inline (make-element feed-root "link"))
145 144
              (attr "href" feed-link) (attr "rel" "self")
... ...
@@ -150,12 +149,13 @@
150 149
              (inline (make-element feed-root "id")) (text id) (node)
151 150
              (inline (make-element feed-root "summary")) (text description) (node)
152 151
              (inline (make-element feed-root "updated")) (text updated) (node)
153
-             ))))))
152
+             )))))
154 153
 
155 154
 
156 155
 (defmethod %generate-xml ((item item) (feed-type (eql :atom)) &key partial)
157
-  (let ((parent (or ($ (inline partial) "feed" (node))
158
-                    (plump:make-element (plump:make-root) "feed"))))
156
+  (let ((parent (if (string-equal (tag-name partial) "feed")
157
+                  partial
158
+                  (plump:make-element (plump:make-root) "feed"))))
159 159
     (prog1 parent
160 160
       (let ((item-root (make-element parent "entry")))
161 161
         (with-slots (title id date link content (author alimenta::author) author-uri) item
... ...
@@ -77,9 +77,27 @@
77 77
          (feed (alimenta.pull-feed::fetch-doc-from-url url)))
78 78
     (alimenta:to-feed feed :feed-link url)))
79 79
 
80
+(araneus:define-view feed-to-atom (feed)
81
+  `(200
82
+    (:content-type "application/xml+atom")
83
+    (,(concatenate 'string
84
+               "<?xml version=\"1.0\"?>"
85
+               (plump:serialize (alimenta:generate-xml feed :feed-type :atom)
86
+                   nil)))))
87
+
88
+(araneus:define-view feed-to-rss (feed)
89
+  `(200
90
+    (:content-type "application/xml+rss")
91
+    (,(concatenate 'string
92
+               "<?xml version=\"1.0\"?>"
93
+               (plump:serialize (alimenta:generate-xml feed :feed-type :rss)
94
+                   nil)))))
95
+
80 96
 (defvar *app* (make-instance 'ningle:<app>))
81 97
 
82 98
 (araneus:defroutes *app*
83
-  (("/") (araneus:as-route 'root)))
99
+  (("/") (araneus:as-route 'root))
100
+  (("/.rss") (araneus::compose-route (root) feed-to-rss)) 
101
+  (("/.atom") (araneus::compose-route (root) feed-to-atom)))
84 102
 
85
-(defvar *handler* (clack:clackup *app* :port 4939))
103
+(defvar *handler* (clack:clackup *app* :port 9090 ))