SSブログ

forgot_passwordを勉強がてらに直してみる(今度はプラグインごと) [プログラミング]

前回はとりあえず場当たり的にforgot_passwordを直してみた。でも、これだと何回も直さないと面倒なので、プラグインとしてそのまま適用できるように直してみたい。ただgitから取ってくるところとかを再現しないといけないので、そこの部分は端折るかもしれない。gitでそもそも管理してないし、SVNでさえ使ってないのよね。

今回分かったのは、

・script/plugin installでインストールするのは、リポジトリからファイル取ってきてコピーするだけ。
・実質的なインストール作業は、script/generate forgot_passwordうんぬんでやってる。

な感じ。



ええと、前回は雛形ファイルの記述ミスで、forgot_passwordがバグバグな状態になっていました。具体的には下記のファイル、

 vendor/plugins/forgot_password/generators/forgot_password/templates/controller.rb

が、雛形になってて、.erb的に設定が埋め込まれて、実際に使うファイル、app/controllers/forgot_passwords_controller.rbが生成される模様。その中の

flash[:error] = "We can't find a #{user_model_name} with that email. Please check the email address and try again..."

という行のuser_model_nameが、<%= %>でネストされていないので、そのままuser_model_nameが出てきちゃってるという寸法らしい。今回はここの修正のみで。



まずはプラグインのインストールはどうなっているのか調べたい。

 ruby script/plugin install git://github.com/greenisus/forgot_password.git

で、入れられる。たぶん、vendor/plugins/forgot_passwordディレクトリにコピーするだけだと思った。railsコマンドで作ったばかりのプロジェクトに、上記コマンドでプラグインをインストールする。そして、入れる前と後の、ディレクトリ同士をdiffをかけてみる。


MacでGUIなdiffと言ったら、FileMergeだそうで、/Developer/Applications/Utilities/FileMerge.appを使って差分を見る。Xcodeのツールって使うのスゴく久しぶりだな。Macとか開発してないし、iPhone開発はそもそもやってないし。にしても、そんなに使い良くない。でも、コマンドラインツールを使うよりかは分かりやすい。使いにくいが分かりやすい。ま、慣れでしょ、慣れ。

比較してみると、案の定、pluginディレクトリに、forgot_passwordフォルダ以下のディレクトリがコピーされるだけでした。変な事やられてなくて良かった。



実際に、プロジェクトにコードを反映させるのは、次の

 ruby script/generate forgot_password password user

というコマンド。実はこっちの方が実質的なインストール作業だったりする。コマンドのuser部分が、雛形ファイルに反映されて、コントローラのファイルが出力されるみたい。

      exists  app/models/
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/passwords
      create  app/views/password_mailer
      create  app/models/password.rb
      create  app/models/password_mailer.rb
      create  app/controllers/passwords_controller.rb
      create  app/helpers/passwords_helper.rb
      create  app/views/passwords/new.html.erb
      create  app/views/passwords/reset.html.erb
      create  db/migrate
      create  db/migrate/20101202085254_create_passwords.rb
      create  app/views/password_mailer/forgot_password.html.erb
      create  app/views/password_mailer/reset_password.html.erb
       route  map.resources :passwords
       route  map.change_password '/change_password/:reset_code', :controller => 'passwords', :action => 'reset'
       route  map.forgot_password '/forgot_password', :controller => 'passwords', :action => 'new'


roots.rbファイルに書かれる以外は、既存のファイルに手を出してなかった。Restful Authenticationに動作を依存するとはいえ、そこはプラグインなので切り分けはガッツリしてもらわないと困る。場当たり的に、ソースを書き換えてしまうような仕組みでは、お手軽でもバグが出た時には余計に困る。だから、こういう仕組みは妥当だなと思う。


ええと、直すべき部分は、vendor/plugins/forgot_password/generators/forgot_password/templates/controller.rbの26行目だった。


flash[:error] = "We can't find a #{<%= user_model_name %>} with that email. Please check the email address and try again..."


とネストするだけ。

 ruby script/generate forgot_password password user

で、ファイルを出力してあげると、

flash[:error] = "We can't find a #{:user} with that email. Please check the email address and try again..."


って、手で直したのと同じ出力になったよ。実際、適用して使ってないけど大丈夫でしょ、これで。



一番いいのが、SVNやgitのリポジトリのファイル自体を訂正するのがいいんだろうけど、外人って日本人をガン無視しやすいので、わざわざ英語メールとか書いて、バグ書いてんジャネェよと、ツッコミ入れるのは面倒くさい(英語の困難度:話す>書く>読む)。リポジトリにコミットするのも相手方に面倒を強いる感じでうれしくない(すげー日本人ぽい)。なので、インストールする時にリポジトリからじゃなく、自分のローカルに訂正したものを置いておいて、必要な時にコピーすればいいと思う。インストールでやってる事は、ファイルをコピーするだけだから、おんなじ。



今、突然、Rubyって定数とかどうするんだろ、と思って入門書を開いた。え?変数の頭文字を大文字にするだけ? 読んだんだろうけど忘れてた。にしても、すげー言語仕様。でも、暗黙に慣例でそうなってるんだよ、ってよりか全然いいな。ってか、今まで定数って使った事無かったのかよwww いい加減過ぎる。


タグ:Ruby Rails2
nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。