Ruby on Rails

機能を見極めてmoduleに抜き出す

restful_authenticationは、ログイン認証という限定された機能を、適度なサイズで提供してくれている。ログイン認証には多くのRailsの技が駆使される傾向にあり、コードを眺めていると勉強になることが多い。今回はモジュールの使い方に注目してみた。 restf…

observerを利用して嬉しくなること

以前の日記で、restful_authenticaionのobserverを利用しないコードに変更してしまったが、その後、修正を繰り返すうちに、observerにはobserverの良さがあることに気付き始めた。 以前の発想 observerを利用した場合 # コントローラー class UsersControlle…

includeする時にクラスメソッドの呼び出しと定義を行うmodule書式

今までrestful_authenticationは以下のURLを指定してインストールしていたのだが... script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/ ふと思い立って、プラグイン名だけ指定してインストールコマンドを実行し…

restful_authentication + ruby-gettext + form_forで権限管理付きログインページの雛形を作る(日本語版)

restful_authenticationに権限(role)管理を追加して、実用的に利用するカスタマイズ例として、Restful Authentication with all the bells and whistlesを参考にいろいろ考えてみた。コードを読みながら、次第に以下のような疑問や考えが浮かんできた。 メー…

よりシンプルに日付と時刻の表示書式を整えるには...

Rails 2.1からの日付と時刻の表示はUTCが標準になり、そのままの環境では以下のように表示されてしまう...。 <%= user.updated_at %> 2008-08-08 04:52:49 UTC 以前に比べれば日本人にとっては分かり易い表示だが、決定的に問題なのは日本の時刻と9時間ずれ…

railsforumのrestful_authenticationは素晴らしい!それを見てRESTfulの理解も深まる

最近、restful_authenticationで試行錯誤していて感じたこと。restful_authenticationはユーザー認証に関する必要最小限の機能を提供してくれるが、実際に運用できるレベルに仕上げるには、要点を押さえた的確な修正が必要になる。ユーザー認証のscaffold的…

restful_authenticationでユーザー別のTodoリストを管理する

前回からの続き。現状のTodoでは、ログインしたユーザーは共通のTodoを利用する仕様になってしまっている。これをユーザー別のTodoに変更したい。restful_authenticationは、そのユーザーが認証された状態かどうかをチェックして、そのユーザーが誰であるか…

restful_authenticationでパスワードを忘れた時の処理を考える

パスワードは必ず忘れられる運命にある...。開発者側の立場であれば「パスワードくらい自分でちゃんと管理しておくべき」と言いたくなる。しかし、自分がユーザーであれば、パスワードを忘れて不便を感じている時「パスワードを忘れた場合」なんてリンクがあ…

restful_authenticationで認証メールをgmailから送信して、エイリアスアドレスで受信する

現状は動作確認のため自分の.Mac(MobileMe)を利用して認証メールを送信するようにしているが、本当はgmailを利用して送信したかった...。.Macメールでちゃんと送信できれば、そのまま設定を置き換えればgmailでも送信できそうなのもだが、何度やってもgmai…

restful_authenticationを利用してみる(An introduction log of restful_authentication)

以前は専らlogin_engine、user_engineのお世話になっていたのだが、Rails2.0以降は手軽に利用できる環境ではなくなってしまった...。ということで、restful_authenticationを利用したログイン管理を試してみることに。 todoプロジェクトの作成(The making of…

Rails2.1のrender :partialとform_forで可能な限り重複を排除していくと...

Rails2.0の頃から出来たようなのだが、つい最近まで自分は知らなかった...ということがたくさんある。ずいぶん損をしていた気がする。断片的な知識が増えてきたので、サンプルコードを作りながらの自分用のメモ。サンプルコードは前回に引き続きQandAプロジ…

Rails2.1でhas_manyな関連を設定してscaffold出来たとしたら...

scaffoldはモデル同士の関連は無視して*1、最も基本的なwebアプリケーションとしての骨格を生成してくれる。自分ではそれをお手本に、少しずつ拡張していくことが多い。しかし、モデル同士が無関係という状況はほとんどなく、ほとんど例外なくモデルにhas_ma…

Rails2.1でform_forブロックの中のrender :partialの悩み解決!

以前、form_forブロック内の共通する部分を、パーシャルファイル(render :partial)として抜き出すときの書き方で悩んでいたい時期があった。実務的にはどうとでも書けてしまうので、そんなに深く悩む必要も無いのだが、徹底的なDRYを目指すRailsらしい書き…

自分のブログの索引の作り方...試行錯誤

ブログの目次を自動的に生成するサービス"Mokuji"というのがあって、面白そうだなーと思ってアクセスしてみると、緑と黒ベースのシンプルな美しさのページにさらに惹かれてしまい、登録してみた。暫くすると、自分のブログの目次が出来上がった。 自分の目次…

MacBookでsqlite3-rubyをアップデートする時の悩み

目的 MacBook OSX 10.5.3 Leopard環境で、 sqlite3-rubyを1.2.1から1.2.2へアップデートしたい! 結論 散々悩んだ挙げ句、以下のコマンドでアップデートできた。(アーキテクチャフラグというのをマシンに合わせて適切に設定する必要があったのだ。) Intel…

Rails2.0から2.1への移行を試してみる

ここ最近、MacBookの作業環境改善に努めている間に、Railsは2.1にバージョンアップしていた。相変わらずの進化のスピード。すでに出遅れた感はあるが、自分のRails環境も2.1にしてみた。Railsの複数バージョン環境は共存できることが分かっているので結構気…

行数が少ない時でも、フッタ位置を常にページの一番下に表示してくれるCSS

PicLensのWebmaster's Guideによると、PicLens対応の手順が、以下のように書かれている。 How It Works Learn By Example: A Basic PicLens Gallery Step-by-Step Instructions 1. Create a Media RSS Feed 2. Enable RSS Autodiscovery 3. Match Your HTML …

iPhotoLensの書き直し

前回のiPhotoLensのコードは酷かった...。 コントローラーの命名レベルが変。(「pictures」...お手本のPicLens Publisherは「gallery」) アクション名が名詞(photos)だったり、 それを強引にルート設定(:collection => { :photos => :get })したり、 R…

MacBookをPicLens対応サーバにしてiPhoto Libraryを覗いてみる

PicLensは脳みそに直接響くソフトウェアだ。一度使うと、その感動的な操作性にハマってしまう。最初は今までにない操作感にちょっと戸惑うが、3D空間に魅せられて触っているうちにすぐに慣れた。2本指スクロール可能なMacBooKのトラックパッドとの相性はとて…

MacOSX 10.5 LeopardのファイアウォールでRailsアプリが許可されない時

10.5 Leopardになって、ファイアウォールの仕組みが大きく変更された。これまでの10.4 Tigerまでのポートを指定する方式から、アプリケーションを指定する方式(Mac OS X 10.5 Leopard: アプリケーション・ファイアウォールについて)になったのだ。この変更…

Aptana 1.1.6 + RadRails 1.0.1の日本語環境が快適

ふと、以前導入を諦めた*1Aptanaを試してみた。すると、以前の環境で悩んでいた問題はすべて解決され、予想以上の快適さだった!Railsでコードを書くには、シンプルで軽快なコードエディタとタブ管理機能付きのターミナルでも十分なのだけど、至れり尽くせり…

flash.nowの内容を直接テストすることは不可能

目指す例外ActiveRecord::StaleObjectErrorの発生を確認できたので、その状況を適切に表示するようにしたい。またしてもテストを先に書いてみる。そして、またしてもハマった...。 テスト 欲しいメッセージが、flash[:notice]に入っていれば良いと考えた。 #…

テストの実行環境の違いを意識する

integrationテストで二人のユーザーが操作するテストを書いていた時に、また問題に気付いてしまった。現状では、二人が同時に同じ伝票を開いて、その後「修正ボタン」を押した時に、最後に「修正ボタン」を押した人の内容で保存されてしまう。これでは、最後…

テストを書いてからコードを実装してみる

これまでテストした中で、いくつかの動作は、現状のままでは問題があることも分かってきた。その一つは、伝票の明細行を削除するところ。調子よく削除していくと、最後の1件も削除できてしまう。そして、伝票には明細行が無い状態になり、挿入する方法も無い…

assertの基本から

前回の日記と順番は前後してしまったが、今まで適当に使っていたassertについても見直してみた。 assertのマニュアルページ Test::Unit - Rubyリファレンスマニュアル Rails Edge API documentation http://caboo.se/doc/classes/Test/Unit/Assertions.html …

assert_selectの使い方

webアプリケーションは、結局のところ適切なHTML文書を返すサーバーなので、最終的にはレスポンスとして返すHTMLが予想通りであれば良いということになる。ところが、HTMLを比較する時には単純に文字列として比較するのは問題がある。ブラウザの描画には影響…

マウスでクリックするようにテストしたい

モデルやコントローラー単体での動きが予想通りであることを確認できると、やはり最後はサーバーを起動して、マウスでクリックしながら全体の動きに問題が無いか確認したくなる。1アクションで複数モデルを同時に保存するサンプルプロジェクトでは、ある段階…

autotestのGrowl通知をカスタマイズする

以下の設定ファイルでGrowlを有効にしたautotestは、テスト結果をGrowlメッセージとして教えてくれるのでとても快適なのだが、いくつか気になる点も出てきた。 # autotest設定ファイル: ~/.autotest require 'autotest/growl' 現状では、failuresやerrorsが…

テスト結果を常に分かり易く

require 'autotest/redgreen'を有効にしてautotestを実行しておけば、テスト結果の下に緑や赤のバー「====」が表示されてそれなりに見易い環境なのだが、たまに特定のテストをrake testコマンドで実行した時はガックリする...。(黒1色でテスト結果が目立た…

そのコードはテストされているか?

テストコードを書いていると、ふと疑問を感じて心配になることがある。 果たして、このテストコードで漏れなく動作確認できているのだろうか? テストが漏れているところが、どこかに無いだろうか? 特にテストを書くことに慣れていない現状では、何処でどん…