2011-02-10
■ [book] 昨年売れた本ランキングとか
やろうと思ってたら2月になってしまったという。
1位
B003L7H9SA
2位
4774143898
3位
4798025623
4位
4873114454
5位
4777512924 4774142727 4774143243 4774143073 477414164X 4798119172 4797352604
というわけで1位は松江ラーメンでした(本じゃない!)
■ [rails] "Simple Omniauth"に従ってログイン処理を書いてみたのだが
- http://railscasts.com/episodes/241-simple-omniauth
- http://asciicasts.com/episodes/241-simple-omniauth
RailsCastsの「Simple Omniauth」という回で、Omniauthを使ってTwitterログインを実装する方法が紹介されている。 「Simple」というのは、deviseとか使ってパスワードでもTwitterでもログインできるようにするんじゃなくて、OmniauthによるTwitterログインのみ提供する、という意味。
んでそれに従うと本当に簡単にTwitterログインができるんだけど、テストを書こうとしてちょっと困った。
config/routes.rbでは、以下のように〜/auth/twitter/callbackというURLにsessions#createを割り当てている。「resources :sessions」ではないので、〜/sessions/createというURLは存在しない。
match "/auth/:provider/callback" => "sessions#create"
さて、test/functionals/sessions_controller_test.rbでcreateアクションのテストをしようとして
post :create
と書くと、「:controller => "sessions", :action => "create"というルーティングは定義されていない」というエラーになってしまう。
こういうケースってどうしたら良いんでしょう?
ちなみにtest/integraton/でやろうとすると、post "/auth/twitter/callback" はできるんだけど、その前にrequest.env["omniauth.auth"]に値を入れる方法がないという…
とりあえず config/routes.rbにresources :sessionsを追加してテストを書いた。