Common Lisp / Caveman2でルーティングにアノテーション使う

このエントリーをはてなブックマークに追加
はてなブックマーク - Common Lisp / Caveman2でルーティングにアノテーション使う
Facebook にシェア
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]
[`tweetmeme` not found]

Ubuntu 12.04でCommon Lispやるよ!の続きです。

今日はまずCaveman2でルーティングにアノテーション使ってみるよ。
その前に

myappおさらい

「(caveman2:make-project #P”~/commonlisp/myapp/” :author “yosiwo”)」でmyappプロジェクトのひな形を作ったよ。
「~/commonlisp/myapp」にプロジェクトができるので中を見ると下記のとおりだよ。
「web.lisp」が本体で、ここにルーティングといわゆるコントローラ部分を書いていくイメージですね。

$ cd ~/commonlisp/myapp
$ ls
app.lisp  db  myapp.asd  myapp-test.asd  README.markdown  
shlyfile.lisp  src  static  t  templates
$ ls src/
config.lisp  main.lisp  view.lisp  web.lisp

ここまでが昨日のおさらい。

Caveman2でアノテーションを使ってみる

公式ページではトップにデデンとアノテーションで書いたサンプルがのっているのでさくっと試してみたくなるのだけれど、Caveman2からCommon Lispに入るという特殊(?)な経緯だとはまった。

こういう事だった。


あ、あと、cl-annotのインストールも先に必要。

時の羅針盤@blog: quicklispのインストールからcl-annotまで
このサイトを見るまで右往左往してたんだけどこれ見てなるほど!

cl-annotをインストール

相変わらずワンライナー

$ echo '(ql:quickload "cl-annot")' | sbcl

cl-annotを使う

(:use)に:cl-annot追加して、(enable-annot-syntax)する。標準ではdefrouteでルーティングが定義されているところにアノテーションで /welcomeannot ルールを追加した。(文字色紫色部分)

$ vim src/web.lisp 

(in-package :cl-user)
(defpackage myapp.web
  (:use :cl
        :caveman2
        :caveman2.db
        :myapp.config
        :myapp.view
        :cl-annot)
  (:export :*web*))
(in-package :myapp.web)

(enable-annot-syntax)

;;
;; Application

(defclass  () ())
(defparameter *web* (make-instance '))

;;
;; Routing rules

(defroute "/" ()
  (with-layout (:title "Welcome to Caveman2")
    (render #P"index.tmpl")))

(defroute "/welcome" (&key (|name| "Guest"))
  (format nil "Welcome, ~A" |name|))

@route GET "/welcomeannot"
(lambda (&key (|name| "AnnotGuest"))
  (format nil "Welcome, ~A, You are annot user!" |name|))

;;
;; Error pages

(defmethod on-exception ((app ) (code (eql 404)))
  (declare (ignore app))
  (merge-pathnames #P"_errors/404.html"
                   *template-directory*))

標準は5000番ポートを使うのだけど、何となく別ポートで動かしてみたかったのでポート変えて起動してみた。

(ql:quickload :myapp)
(myapp:start :port 8080)

http://localhost:8080/welcomeannot?name=hogehoge
にアクセスすると
「Welcome, hogehoge, You are annot user!」
と表示されるよ。やったね!センス無くてごめんね!

defroute で定義している「/」や、「/welcome」もそのまま動いた。併用問題なさそう。
次はDB周りをさわってみます!

Popular Posts:

“Common Lisp / Caveman2でルーティングにアノテーション使う” への1件の返信

  1. Hi, great work.

    What is the right way to test? I want to write unit-tests using db but use of :*.db package, :sxql or :datafly in :*-test package definition causes names import problems.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*