Rails3でクエリパラメータでルーティング(Advanced Constraints)
少し前にsendagaya.rbで発表したRails3のAdvanced Constraintsをここでも紹介。
routes.rbの中でURLを定義する時にsubdomainとかを条件に含めるときに使うのがconstraintsというオプションなんですが、これを使ってURLの「?」以降を条件にしたりもできます。
方法はrequestオブジェクトを受け付けるmatches?というメソッドを実装したクラスを定義してインスタンスをconstraintsに渡してあげるだけです。
ここではpostというリソースの集合であるindex、つまり /posts というURLにGETで ?q=hoge 等のパラメータが付いている時に posts_controller#search というアクションに紐付けるということを行なっています。
ただしこのままだと q に対するvalueが空の状態 /posts?q でもsearchアクションに処理が渡るので、コントローラ側で何かしらの対応が必要です。
基本的にはrequestオブジェクトを使って判別できるならどんな条件でもいいので、Accept-languageで振り分けるとかIPアドレスでブラックリストを作るとかもできてしまいます。
今回はindexアクションの中でifで分岐させておくことでも十分対応可能ですが、render以外はほとんど共通処理がないよとかになると、アクションそのものを分けてしまったほうが綺麗なコードになりそうですよね。
オープンソースになったTextMate2をbuildしてみた
すっかりVimに慣れてしまった今日この頃ですが、お世話になったTextMateの2がオープンソースになったのでbuildしてみました。ちなみに環境は OS X lion 10.7.4です。
-
Githubへ行ってみる
https://github.com/textmate/textmate.git
READMEにbuild方法は書かれていますね。
-
必要なライブラリをインストール
とりあえず brew install ragel boost multimarkdown hg ninja とやってみたのですが ninja なんてないよって怒られちゃいました
というわけで先に brew update してから再度実行したらちゃんと入りました
-
リポジトリをclone
git clone https://github.com/textmate/textmate.git でホームディレクトリにcloneしました
textmate というフォルダができているはずなのでそこに移動 cd textmate
-
build実行
の前に、READMEをみると git submodule update --init とやってねと書いてあるので実行
そして ./configure && ninja 実行!したら clang が古いと言われてしまいました
brew install --HEAD llvm --with-clang で入るはずなんですが、Error: can't convert nil into String とか言われる
brew update も brew doctor も問題ないんだよなぁ
Githubのbug-fixing-checklistを見るとXCodeのupdateして見た方が良さそうだなと思ったので Apple からCommando line tools for XCodeの割と最近のやつをDLした
でやり直しても駄目だなぁ。とよく見てみたらXCode 4.4+と書いてある、手元のXCodeは4.3でした。App Storeから入れ直そう。
-
XCodeをupdateしたので
気を取り直して ./configure && ninja を再度実行してみた。そしたら今度は pgrep が無いよと言われた
brew install pgrep を実行。(そろそろめんどくさくなってきた)
./configure && ninja よし。こんどこそうまく行ってそう。(なにやらwarningとかdepricatedが出てきてますが)
-
build成功した
やっと成功した。
へー2からはPreferencesでbundleとかthemeを追加できるようになってるんですね。逆に言うと最初は何も入ってないからハイライトも何も無いのだけど。
めでたし
bashでgitの現在のbranch名を表示させる
git-completionというシェルスクリプトを使えばできるということを知ったのでやってみた。
-
gitのバージョンを調べる
$ git --version $ 1.7.7.5
-
github(http://github.com/gitster/git)に行きcodeのtreeを同じバージョンに切り替える(ブランチの切り替え部分と同じところです)
-
git-completion.bashまでtreeをたどりraw表示に切り替えて保存
自分はhttps://raw.github.com/gitster/git/v1.7.7.5/contrib/completion/git-completion.bashでした -
DLしたファイルに使い方は大体書いてあるのでその通りにやれば動くと思います
$ cd ~ $ mv git-completion.bash .git-completion.sh $ vim .bashrc (or .bash_profile) $ PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' を追記 $ source .bashrc
-
こんなかんじで表示されました
[kozo@kozo-mp current_dir (master)]$