...
|
...
|
@@ -3,7 +3,7 @@
|
3
|
3
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
4
|
4
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
5
|
5
|
<head>
|
6
|
|
-<!-- 2019-08-30 Fri 16:33 -->
|
|
6
|
+<!-- 2019-09-10 Tue 16:30 -->
|
7
|
7
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
8
|
8
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
9
|
9
|
<title>TODO backend implementation using CL and fukamachi/ningle</title>
|
...
|
...
|
@@ -300,34 +300,34 @@ for the JavaScript code in this tag.
|
300
|
300
|
<h2>Table of Contents</h2>
|
301
|
301
|
<div id="text-table-of-contents">
|
302
|
302
|
<ul>
|
303
|
|
-<li><a href="#org45f170c">1. Setup</a></li>
|
304
|
|
-<li><a href="#org750f278">2. todo API</a>
|
|
303
|
+<li><a href="#org2c60c2a">1. Setup</a></li>
|
|
304
|
+<li><a href="#org8b48160">2. todo API</a>
|
305
|
305
|
<ul>
|
306
|
|
-<li><a href="#org47779f4">2.1. List-level APIs</a></li>
|
307
|
|
-<li><a href="#org57d2aea">2.2. Getting/Replacing a todo</a></li>
|
308
|
|
-<li><a href="#orgbf48fa4">2.3. Adding and modifying todos</a></li>
|
309
|
|
-<li><a href="#org87b91ac">2.4. Examples</a></li>
|
|
306
|
+<li><a href="#orgddfdad7">2.1. List-level APIs</a></li>
|
|
307
|
+<li><a href="#orge78579a">2.2. Getting/Replacing a todo</a></li>
|
|
308
|
+<li><a href="#org1d8273a">2.3. Adding and modifying todos</a></li>
|
|
309
|
+<li><a href="#orgd06e313">2.4. Examples</a></li>
|
310
|
310
|
</ul>
|
311
|
311
|
</li>
|
312
|
|
-<li><a href="#org6a09bc1">3. Routing</a>
|
|
312
|
+<li><a href="#orgf16a59b">3. Routing</a>
|
313
|
313
|
<ul>
|
314
|
|
-<li><a href="#org20ffa7f">3.1. Routing utilities</a></li>
|
315
|
|
-<li><a href="#org7bdd028">3.2. todo routes</a></li>
|
|
314
|
+<li><a href="#org8fa2aba">3.1. Routing utilities</a></li>
|
|
315
|
+<li><a href="#org104511b">3.2. todo routes</a></li>
|
316
|
316
|
</ul>
|
317
|
317
|
</li>
|
318
|
|
-<li><a href="#orgd46ec32">4. Source</a>
|
|
318
|
+<li><a href="#org27ea61c">4. Source</a>
|
319
|
319
|
<ul>
|
320
|
|
-<li><a href="#org9c84f34">4.1. model.lisp source code</a></li>
|
321
|
|
-<li><a href="#org76ec19a">4.2. routing.lisp source</a></li>
|
322
|
|
-<li><a href="#org98907a6">4.3. main.lisp source</a></li>
|
|
320
|
+<li><a href="#orgc9b940b">4.1. model.lisp source code</a></li>
|
|
321
|
+<li><a href="#orge55bf4b">4.2. routing.lisp source</a></li>
|
|
322
|
+<li><a href="#org714745a">4.3. main.lisp source</a></li>
|
323
|
323
|
</ul>
|
324
|
324
|
</li>
|
325
|
325
|
</ul>
|
326
|
326
|
</div>
|
327
|
327
|
</div>
|
328
|
328
|
|
329
|
|
-<div id="outline-container-org45f170c" class="outline-2">
|
330
|
|
-<h2 id="org45f170c"><span class="section-number-2">1</span> Setup</h2>
|
|
329
|
+<div id="outline-container-org2c60c2a" class="outline-2">
|
|
330
|
+<h2 id="org2c60c2a"><span class="section-number-2">1</span> Setup</h2>
|
331
|
331
|
<div class="outline-text-2" id="text-1">
|
332
|
332
|
<ul class="org-ul">
|
333
|
333
|
<li><code class="src src-sh">git clone https://github.com/fiddlerwoaroof/data-lens.git ~/quicklisp/local-projects/data-lens</code></li>
|
...
|
...
|
@@ -347,8 +347,8 @@ After this, all the tests <a href="http://www.todobackend.com/specs/index.html?h
|
347
|
347
|
</div>
|
348
|
348
|
</div>
|
349
|
349
|
|
350
|
|
-<div id="outline-container-org750f278" class="outline-2">
|
351
|
|
-<h2 id="org750f278"><span class="section-number-2">2</span> todo API</h2>
|
|
350
|
+<div id="outline-container-org8b48160" class="outline-2">
|
|
351
|
+<h2 id="org8b48160"><span class="section-number-2">2</span> todo API</h2>
|
352
|
352
|
<div class="outline-text-2" id="text-2">
|
353
|
353
|
<p>
|
354
|
354
|
We use a fairly simple structure for our "database": a fset map (a
|
...
|
...
|
@@ -358,8 +358,8 @@ referenced as <code>*todo*</code>, but this is a detail hidden behind the API.
|
358
|
358
|
</p>
|
359
|
359
|
</div>
|
360
|
360
|
|
361
|
|
-<div id="outline-container-org47779f4" class="outline-3">
|
362
|
|
-<h3 id="org47779f4"><span class="section-number-3">2.1</span> List-level APIs</h3>
|
|
361
|
+<div id="outline-container-orgddfdad7" class="outline-3">
|
|
362
|
+<h3 id="orgddfdad7"><span class="section-number-3">2.1</span> List-level APIs</h3>
|
363
|
363
|
<div class="outline-text-3" id="text-2-1">
|
364
|
364
|
<p>
|
365
|
365
|
These are functions for getting the todo list and clearing
|
...
|
...
|
@@ -368,7 +368,7 @@ and <code>clear-todos</code> for DELETE requests.
|
368
|
368
|
</p>
|
369
|
369
|
|
370
|
370
|
<div class="org-src-container">
|
371
|
|
-<pre class="src src-lisp" id="orgc8a4ff2"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">todos</span> <span style="color: #93a8c6;">()</span>
|
|
371
|
+<pre class="src src-lisp" id="org2fa86a6"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">todos</span> <span style="color: #93a8c6;">()</span>
|
372
|
372
|
<span style="color: #93a8c6;">(</span>gmap:gmap <span style="font-weight: bold;">:seq</span>
|
373
|
373
|
<span style="color: #b0b1a3;">(</span><span style="color: #F0DFAF;">lambda</span> <span style="color: #97b098;">(</span>_ b<span style="color: #97b098;">)</span>
|
374
|
374
|
<span style="color: #97b098;">(</span><span style="color: #F0DFAF;">declare</span> <span style="color: #aebed8;">(</span>ignore _<span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span>
|
...
|
...
|
@@ -383,8 +383,8 @@ and <code>clear-todos</code> for DELETE requests.
|
383
|
383
|
</div>
|
384
|
384
|
</div>
|
385
|
385
|
|
386
|
|
-<div id="outline-container-org57d2aea" class="outline-3">
|
387
|
|
-<h3 id="org57d2aea"><span class="section-number-3">2.2</span> Getting/Replacing a todo</h3>
|
|
386
|
+<div id="outline-container-orge78579a" class="outline-3">
|
|
387
|
+<h3 id="orge78579a"><span class="section-number-3">2.2</span> Getting/Replacing a todo</h3>
|
388
|
388
|
<div class="outline-text-3" id="text-2-2">
|
389
|
389
|
<p>
|
390
|
390
|
This uses lisp's <a href="http://www.lispworks.com/documentation/HyperSpec/Body/05_a.htm">generalized references</a> to abstract away the
|
...
|
...
|
@@ -394,7 +394,7 @@ the GET request for a specific todo by id.
|
394
|
394
|
</p>
|
395
|
395
|
|
396
|
396
|
<div class="org-src-container">
|
397
|
|
-<pre class="src src-lisp" id="org404baac"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">todo</span> <span style="color: #93a8c6;">(</span>id<span style="color: #93a8c6;">)</span>
|
|
397
|
+<pre class="src src-lisp" id="orge96683a"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">todo</span> <span style="color: #93a8c6;">(</span>id<span style="color: #93a8c6;">)</span>
|
398
|
398
|
<span style="color: #93a8c6;">(</span><span style="color: #F0DFAF;">let</span> <span style="color: #b0b1a3;">(</span><span style="color: #97b098;">(</span>todo <span style="color: #aebed8;">(</span>fset:@ *todos* id<span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span><span style="color: #b0b1a3;">)</span>
|
399
|
399
|
todo<span style="color: #93a8c6;">)</span><span style="color: #8c8c8c;">)</span>
|
400
|
400
|
|
...
|
...
|
@@ -410,8 +410,8 @@ the GET request for a specific todo by id.
|
410
|
410
|
</div>
|
411
|
411
|
</div>
|
412
|
412
|
|
413
|
|
-<div id="outline-container-orgbf48fa4" class="outline-3">
|
414
|
|
-<h3 id="orgbf48fa4"><span class="section-number-3">2.3</span> Adding and modifying todos</h3>
|
|
413
|
+<div id="outline-container-org1d8273a" class="outline-3">
|
|
414
|
+<h3 id="org1d8273a"><span class="section-number-3">2.3</span> Adding and modifying todos</h3>
|
415
|
415
|
<div class="outline-text-3" id="text-2-3">
|
416
|
416
|
<p>
|
417
|
417
|
<code>new-todo</code> is fairly trivial. It's main feature is that it has to
|
...
|
...
|
@@ -421,7 +421,7 @@ properly. <code>new-todo</code> backs POST requests to the root endpoint.
|
421
|
421
|
</p>
|
422
|
422
|
|
423
|
423
|
<div class="org-src-container">
|
424
|
|
-<pre class="src src-lisp" id="orgc417af0"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defvar</span> <span style="color: #DC8CC3;">*external-host*</span>
|
|
424
|
+<pre class="src src-lisp" id="orgf6c3a44"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defvar</span> <span style="color: #DC8CC3;">*external-host*</span>
|
425
|
425
|
<span style="color: #D0BF8F;">"localhost"</span><span style="color: #8c8c8c;">)</span>
|
426
|
426
|
<span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defvar</span> <span style="color: #DC8CC3;">*external-port*</span>
|
427
|
427
|
5000<span style="color: #8c8c8c;">)</span>
|
...
|
...
|
@@ -450,7 +450,7 @@ todo endpoint for a specific ID.
|
450
|
450
|
</p>
|
451
|
451
|
|
452
|
452
|
<div class="org-src-container">
|
453
|
|
-<pre class="src src-lisp" id="orga2be00f"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">update-todo</span> <span style="color: #93a8c6;">(</span>id v<span style="color: #93a8c6;">)</span>
|
|
453
|
+<pre class="src src-lisp" id="org0a1e71e"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">update-todo</span> <span style="color: #93a8c6;">(</span>id v<span style="color: #93a8c6;">)</span>
|
454
|
454
|
<span style="color: #93a8c6;">(</span><span style="color: #F0DFAF;">let*</span> <span style="color: #b0b1a3;">(</span><span style="color: #97b098;">(</span>old-todo <span style="color: #aebed8;">(</span>or <span style="color: #b0b0b3;">(</span>todo id<span style="color: #b0b0b3;">)</span>
|
455
|
455
|
<span style="color: #b0b0b3;">(</span>make-hash-table <span style="font-weight: bold;">:test</span> 'equal<span style="color: #b0b0b3;">)</span><span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span>
|
456
|
456
|
<span style="color: #97b098;">(</span>in-hash-table <span style="color: #aebed8;">(</span>alexandria:alist-hash-table v <span style="font-weight: bold;">:test</span> 'equal<span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span>
|
...
|
...
|
@@ -465,8 +465,8 @@ todo endpoint for a specific ID.
|
465
|
465
|
</div>
|
466
|
466
|
</div>
|
467
|
467
|
|
468
|
|
-<div id="outline-container-org87b91ac" class="outline-3">
|
469
|
|
-<h3 id="org87b91ac"><span class="section-number-3">2.4</span> Examples</h3>
|
|
468
|
+<div id="outline-container-orgd06e313" class="outline-3">
|
|
469
|
+<h3 id="orgd06e313"><span class="section-number-3">2.4</span> Examples</h3>
|
470
|
470
|
<div class="outline-text-3" id="text-2-4">
|
471
|
471
|
<div class="org-src-container">
|
472
|
472
|
<pre class="src src-lisp"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">in-package</span> <span style="font-weight: bold;">:fwoar.todo</span><span style="color: #8c8c8c;">)</span>
|
...
|
...
|
@@ -481,10 +481,10 @@ todo endpoint for a specific ID.
|
481
|
481
|
</div>
|
482
|
482
|
|
483
|
483
|
<pre class="example">
|
484
|
|
-(#<hash-table "url": "http://localhost:5000/todo/175",
|
|
484
|
+(#<hash-table "url": "http://localhost:5000/todo/9",
|
485
|
485
|
"title": "get groceries",
|
486
|
486
|
"completed": YASON:FALSE>
|
487
|
|
- #<hash-table "url": "http://localhost:5000/todo/176",
|
|
487
|
+ #<hash-table "url": "http://localhost:5000/todo/10",
|
488
|
488
|
"title": "write-better-documentation",
|
489
|
489
|
"completed": YASON:FALSE>)
|
490
|
490
|
</pre>
|
...
|
...
|
@@ -493,12 +493,12 @@ todo endpoint for a specific ID.
|
493
|
493
|
</div>
|
494
|
494
|
|
495
|
495
|
|
496
|
|
-<div id="outline-container-org6a09bc1" class="outline-2">
|
497
|
|
-<h2 id="org6a09bc1"><span class="section-number-2">3</span> Routing</h2>
|
|
496
|
+<div id="outline-container-orgf16a59b" class="outline-2">
|
|
497
|
+<h2 id="orgf16a59b"><span class="section-number-2">3</span> Routing</h2>
|
498
|
498
|
<div class="outline-text-2" id="text-3">
|
499
|
499
|
</div>
|
500
|
|
-<div id="outline-container-org20ffa7f" class="outline-3">
|
501
|
|
-<h3 id="org20ffa7f"><span class="section-number-3">3.1</span> Routing utilities</h3>
|
|
500
|
+<div id="outline-container-org8fa2aba" class="outline-3">
|
|
501
|
+<h3 id="org8fa2aba"><span class="section-number-3">3.1</span> Routing utilities</h3>
|
502
|
502
|
<div class="outline-text-3" id="text-3-1">
|
503
|
503
|
<p>
|
504
|
504
|
The core utility here is the <code>defroutes</code> macro. This takes a
|
...
|
...
|
@@ -508,13 +508,13 @@ routes.
|
508
|
508
|
</p>
|
509
|
509
|
|
510
|
510
|
<div class="org-src-container">
|
511
|
|
-<pre class="src src-lisp" id="org95e4a72"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defmacro</span> <span style="color: #8CD0D3;">defroutes</span> <span style="color: #93a8c6;">(</span>app <span style="color: #CC9393;">&body</span> routes<span style="color: #93a8c6;">)</span>
|
|
511
|
+<pre class="src src-lisp" id="org2c1405a"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defmacro</span> <span style="color: #8CD0D3;">defroutes</span> <span style="color: #93a8c6;">(</span>app <span style="color: #CC9393;">&body</span> routes<span style="color: #93a8c6;">)</span>
|
512
|
512
|
<span style="color: #93a8c6;">(</span>alexandria:once-only <span style="color: #b0b1a3;">(</span>app<span style="color: #b0b1a3;">)</span>
|
513
|
513
|
`<span style="color: #b0b1a3;">(</span>setf
|
514
|
514
|
,@<span style="color: #97b098;">(</span><span style="color: #F0DFAF;">loop</span> for <span style="color: #aebed8;">(</span>target . descriptors<span style="color: #aebed8;">)</span> in routes
|
515
|
515
|
append <span style="color: #aebed8;">(</span><span style="color: #F0DFAF;">loop</span> for <span style="color: #b0b0b3;">(</span>method callback<span style="color: #b0b0b3;">)</span> in descriptors
|
516
|
516
|
append `<span style="color: #b0b0b3;">(</span><span style="color: #90a890;">(</span>ningle:route ,app ,target
|
517
|
|
- <span style="font-weight: bold;">:method</span> method<span style="color: #90a890;">)</span>
|
|
517
|
+ <span style="font-weight: bold;">:method</span> ,method<span style="color: #90a890;">)</span>
|
518
|
518
|
,callback<span style="color: #b0b0b3;">)</span><span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span><span style="color: #b0b1a3;">)</span><span style="color: #93a8c6;">)</span><span style="color: #8c8c8c;">)</span>
|
519
|
519
|
</pre>
|
520
|
520
|
</div>
|
...
|
...
|
@@ -537,19 +537,13 @@ a list of verbs <code>(:GET :POST)</code> in the head of each handler clause.
|
537
|
537
|
|
538
|
538
|
|
539
|
539
|
<pre class="example">
|
540
|
|
-(LET ((#:APP1882 APP))
|
541
|
|
- (SETF (NINGLE/APP:ROUTE #:APP1882 "/" :METHOD METHOD)
|
542
|
|
- (HANDLER NIL
|
543
|
|
- (TODOS))
|
544
|
|
- (NINGLE/APP:ROUTE #:APP1882 "/" :METHOD METHOD)
|
545
|
|
- (HANDLER (V)
|
546
|
|
- (NEW-TODO V))
|
547
|
|
- (NINGLE/APP:ROUTE #:APP1882 "/" :METHOD METHOD)
|
548
|
|
- (HANDLER NIL
|
549
|
|
- (CLEAR-TODOS))))
|
550
|
|
-T
|
|
540
|
+(DEFROUTES APP
|
|
541
|
+ ("/" (:GET (HANDLER NIL (TODOS))) (:POST (HANDLER (V) (NEW-TODO V)))
|
|
542
|
+ (:DELETE (HANDLER NIL (CLEAR-TODOS)))))
|
|
543
|
+NIL
|
551
|
544
|
</pre>
|
552
|
545
|
|
|
546
|
+
|
553
|
547
|
<p>
|
554
|
548
|
Finally, there are some simple helpers to handle some of the
|
555
|
549
|
boilerplate in a clack webserver. Of particular interest is the
|
...
|
...
|
@@ -558,7 +552,7 @@ that all the API results get JSON encoded.
|
558
|
552
|
</p>
|
559
|
553
|
|
560
|
554
|
<div class="org-src-container">
|
561
|
|
-<pre class="src src-lisp" id="orgb9cfd08"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">success</span> <span style="color: #93a8c6;">(</span>value<span style="color: #93a8c6;">)</span>
|
|
555
|
+<pre class="src src-lisp" id="orgd63e2a0"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">success</span> <span style="color: #93a8c6;">(</span>value<span style="color: #93a8c6;">)</span>
|
562
|
556
|
<span style="color: #93a8c6;">(</span>list 200 '<span style="color: #b0b1a3;">(</span><span style="font-weight: bold;">:conent-type</span> <span style="color: #D0BF8F;">"application/json"</span><span style="color: #b0b1a3;">)</span> value<span style="color: #93a8c6;">)</span><span style="color: #8c8c8c;">)</span>
|
563
|
557
|
|
564
|
558
|
<span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defmacro</span> <span style="color: #8CD0D3;">handler</span> <span style="color: #93a8c6;">(</span><span style="color: #b0b1a3;">(</span><span style="color: #CC9393;">&optional</span> <span style="color: #97b098;">(</span>sym <span style="color: #aebed8;">(</span>gensym <span style="color: #D0BF8F;">"PARAMS"</span><span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span><span style="color: #b0b1a3;">)</span> <span style="color: #CC9393;">&body</span> body<span style="color: #93a8c6;">)</span>
|
...
|
...
|
@@ -572,8 +566,8 @@ that all the API results get JSON encoded.
|
572
|
566
|
</div>
|
573
|
567
|
</div>
|
574
|
568
|
|
575
|
|
-<div id="outline-container-org7bdd028" class="outline-3">
|
576
|
|
-<h3 id="org7bdd028"><span class="section-number-3">3.2</span> todo routes</h3>
|
|
569
|
+<div id="outline-container-org104511b" class="outline-3">
|
|
570
|
+<h3 id="org104511b"><span class="section-number-3">3.2</span> todo routes</h3>
|
577
|
571
|
<div class="outline-text-3" id="text-3-2">
|
578
|
572
|
<p>
|
579
|
573
|
<code>setup-routes</code> binds the endpoints to handlers: <code>"/"</code> to handlers
|
...
|
...
|
@@ -585,7 +579,7 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id
|
585
|
579
|
</p>
|
586
|
580
|
|
587
|
581
|
<div class="org-src-container">
|
588
|
|
-<pre class="src src-lisp" id="org1538a61"><span style="color: #A6A689; background-color: #2B2B2B;">;; </span><span style="color: #A6A689; background-color: #2B2B2B;">routing</span>
|
|
582
|
+<pre class="src src-lisp" id="org8c6228c"><span style="color: #A6A689; background-color: #2B2B2B;">;; </span><span style="color: #A6A689; background-color: #2B2B2B;">routing</span>
|
589
|
583
|
<span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">get-id</span> <span style="color: #93a8c6;">(</span>params<span style="color: #93a8c6;">)</span>
|
590
|
584
|
<span style="color: #93a8c6;">(</span>parse-integer <span style="color: #b0b1a3;">(</span>serapeum:assocdr <span style="font-weight: bold;">:id</span> params<span style="color: #b0b1a3;">)</span><span style="color: #93a8c6;">)</span><span style="color: #8c8c8c;">)</span>
|
591
|
585
|
|
...
|
...
|
@@ -607,12 +601,12 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id
|
607
|
601
|
</div>
|
608
|
602
|
</div>
|
609
|
603
|
|
610
|
|
-<div id="outline-container-orgd46ec32" class="outline-2">
|
611
|
|
-<h2 id="orgd46ec32"><span class="section-number-2">4</span> Source</h2>
|
|
604
|
+<div id="outline-container-org27ea61c" class="outline-2">
|
|
605
|
+<h2 id="org27ea61c"><span class="section-number-2">4</span> Source</h2>
|
612
|
606
|
<div class="outline-text-2" id="text-4">
|
613
|
607
|
</div>
|
614
|
|
-<div id="outline-container-org9c84f34" class="outline-3">
|
615
|
|
-<h3 id="org9c84f34"><span class="section-number-3">4.1</span> model.lisp source code</h3>
|
|
608
|
+<div id="outline-container-orgc9b940b" class="outline-3">
|
|
609
|
+<h3 id="orgc9b940b"><span class="section-number-3">4.1</span> model.lisp source code</h3>
|
616
|
610
|
<div class="outline-text-3" id="text-4-1">
|
617
|
611
|
<div class="org-src-container">
|
618
|
612
|
<pre class="src src-lisp"><span style="color: #A6A689; background-color: #2B2B2B;">;; </span><span style="color: #A6A689; background-color: #2B2B2B;">[[file:~/git_repos/lisp-sandbox/todo/README.org::package-include][package-include]]</span>
|
...
|
...
|
@@ -704,8 +698,8 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id
|
704
|
698
|
</div>
|
705
|
699
|
</div>
|
706
|
700
|
|
707
|
|
-<div id="outline-container-org76ec19a" class="outline-3">
|
708
|
|
-<h3 id="org76ec19a"><span class="section-number-3">4.2</span> routing.lisp source</h3>
|
|
701
|
+<div id="outline-container-orge55bf4b" class="outline-3">
|
|
702
|
+<h3 id="orge55bf4b"><span class="section-number-3">4.2</span> routing.lisp source</h3>
|
709
|
703
|
<div class="outline-text-3" id="text-4-2">
|
710
|
704
|
<div class="org-src-container">
|
711
|
705
|
<pre class="src src-lisp"><span style="color: #A6A689; background-color: #2B2B2B;">;; </span><span style="color: #A6A689; background-color: #2B2B2B;">[[file:~/git_repos/lisp-sandbox/todo/README.org::package-include][package-include]]</span>
|
...
|
...
|
@@ -720,7 +714,7 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id
|
720
|
714
|
,@<span style="color: #97b098;">(</span><span style="color: #F0DFAF;">loop</span> for <span style="color: #aebed8;">(</span>target . descriptors<span style="color: #aebed8;">)</span> in routes
|
721
|
715
|
append <span style="color: #aebed8;">(</span><span style="color: #F0DFAF;">loop</span> for <span style="color: #b0b0b3;">(</span>method callback<span style="color: #b0b0b3;">)</span> in descriptors
|
722
|
716
|
append `<span style="color: #b0b0b3;">(</span><span style="color: #90a890;">(</span>ningle:route ,app ,target
|
723
|
|
- <span style="font-weight: bold;">:method</span> method<span style="color: #90a890;">)</span>
|
|
717
|
+ <span style="font-weight: bold;">:method</span> ,method<span style="color: #90a890;">)</span>
|
724
|
718
|
,callback<span style="color: #b0b0b3;">)</span><span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span><span style="color: #b0b1a3;">)</span><span style="color: #93a8c6;">)</span><span style="color: #8c8c8c;">)</span>
|
725
|
719
|
<span style="color: #A6A689; background-color: #2B2B2B;">;; </span><span style="color: #A6A689; background-color: #2B2B2B;">defroutes ends here</span>
|
726
|
720
|
|
...
|
...
|
@@ -759,8 +753,8 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id
|
759
|
753
|
</div>
|
760
|
754
|
</div>
|
761
|
755
|
|
762
|
|
-<div id="outline-container-org98907a6" class="outline-3">
|
763
|
|
-<h3 id="org98907a6"><span class="section-number-3">4.3</span> main.lisp source</h3>
|
|
756
|
+<div id="outline-container-org714745a" class="outline-3">
|
|
757
|
+<h3 id="org714745a"><span class="section-number-3">4.3</span> main.lisp source</h3>
|
764
|
758
|
<div class="outline-text-3" id="text-4-3">
|
765
|
759
|
<div class="org-src-container">
|
766
|
760
|
<pre class="src src-lisp"><span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">in-package</span> <span style="font-weight: bold;">:fwoar.todo</span><span style="color: #8c8c8c;">)</span>
|
...
|
...
|
@@ -776,8 +770,8 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id
|
776
|
770
|
<span style="color: #93a8c6;">(</span>and <span style="color: #b0b1a3;">(</span>boundp '*handler*<span style="color: #b0b1a3;">)</span>
|
777
|
771
|
*handler*<span style="color: #93a8c6;">)</span><span style="color: #8c8c8c;">)</span>
|
778
|
772
|
|
779
|
|
-<span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">ensure-started</span> <span style="color: #93a8c6;">(</span><span style="color: #CC9393;">&rest</span> r <span style="color: #CC9393;">&key</span> port<span style="color: #93a8c6;">)</span>
|
780
|
|
- <span style="color: #93a8c6;">(</span><span style="color: #F0DFAF;">declare</span> <span style="color: #b0b1a3;">(</span>ignore port<span style="color: #b0b1a3;">)</span><span style="color: #93a8c6;">)</span>
|
|
773
|
+<span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">ensure-started</span> <span style="color: #93a8c6;">(</span><span style="color: #CC9393;">&rest</span> r <span style="color: #CC9393;">&key</span> <span style="color: #b0b1a3;">(</span>address <span style="color: #D0BF8F;">"127.0.0.1"</span><span style="color: #b0b1a3;">)</span> <span style="color: #b0b1a3;">(</span>port 5000<span style="color: #b0b1a3;">)</span><span style="color: #93a8c6;">)</span>
|
|
774
|
+ <span style="color: #93a8c6;">(</span><span style="color: #F0DFAF;">declare</span> <span style="color: #b0b1a3;">(</span>ignore address port<span style="color: #b0b1a3;">)</span><span style="color: #93a8c6;">)</span>
|
781
|
775
|
<span style="color: #93a8c6;">(</span><span style="color: #F0DFAF;">let</span> <span style="color: #b0b1a3;">(</span><span style="color: #97b098;">(</span>app <span style="color: #aebed8;">(</span>setup<span style="color: #aebed8;">)</span><span style="color: #97b098;">)</span><span style="color: #b0b1a3;">)</span>
|
782
|
776
|
<span style="color: #b0b1a3;">(</span>values app
|
783
|
777
|
<span style="color: #97b098;">(</span>setf *handler*
|
...
|
...
|
@@ -798,6 +792,11 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id
|
798
|
792
|
<span style="color: #97b098;">(</span>makunbound '*handler*<span style="color: #97b098;">)</span>
|
799
|
793
|
nil<span style="color: #b0b1a3;">)</span>
|
800
|
794
|
nil<span style="color: #93a8c6;">)</span><span style="color: #8c8c8c;">)</span>
|
|
795
|
+
|
|
796
|
+<span style="color: #8c8c8c;">(</span><span style="color: #F0DFAF;">defun</span> <span style="color: #8CD0D3;">main</span> <span style="color: #93a8c6;">(</span><span style="color: #CC9393;">&rest</span> _<span style="color: #93a8c6;">)</span>
|
|
797
|
+ <span style="color: #93a8c6;">(</span><span style="color: #F0DFAF;">declare</span> <span style="color: #b0b1a3;">(</span>ignore _<span style="color: #b0b1a3;">)</span><span style="color: #93a8c6;">)</span>
|
|
798
|
+ <span style="color: #93a8c6;">(</span>ensure-started <span style="font-weight: bold;">:address</span> <span style="color: #D0BF8F;">"0.0.0.0"</span> <span style="font-weight: bold;">:port</span> 5000<span style="color: #93a8c6;">)</span>
|
|
799
|
+ <span style="color: #93a8c6;">(</span><span style="color: #F0DFAF;">loop</span> <span style="color: #b0b1a3;">(</span>sleep 5<span style="color: #b0b1a3;">)</span><span style="color: #93a8c6;">)</span><span style="color: #8c8c8c;">)</span>
|
801
|
800
|
</pre>
|
802
|
801
|
</div>
|
803
|
802
|
</div>
|
...
|
...
|
@@ -806,7 +805,7 @@ alist. <code>get-id</code> handles this, and extracts an integer for the id
|
806
|
805
|
</div>
|
807
|
806
|
<div id="postamble" class="status">
|
808
|
807
|
<p class="author">Author: Langley</p>
|
809
|
|
-<p class="date">Created: 2019-08-30 Fri 16:33</p>
|
|
808
|
+<p class="date">Created: 2019-09-10 Tue 16:30</p>
|
810
|
809
|
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
|
811
|
810
|
</div>
|
812
|
811
|
</body>
|