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部分が、雛形ファイルに反映されて、コントローラのファイルが出力されるみたい。
roots.rbファイルに書かれる以外は、既存のファイルに手を出してなかった。Restful Authenticationに動作を依存するとはいえ、そこはプラグインなので切り分けはガッツリしてもらわないと困る。場当たり的に、ソースを書き換えてしまうような仕組みでは、お手軽でもバグが出た時には余計に困る。だから、こういう仕組みは妥当だなと思う。
ええと、直すべき部分は、vendor/plugins/forgot_password/generators/forgot_password/templates/controller.rbの26行目だった。
とネストするだけ。
ruby script/generate forgot_password password user
で、ファイルを出力してあげると、
って、手で直したのと同じ出力になったよ。実際、適用して使ってないけど大丈夫でしょ、これで。
一番いいのが、SVNやgitのリポジトリのファイル自体を訂正するのがいいんだろうけど、外人って日本人をガン無視しやすいので、わざわざ英語メールとか書いて、バグ書いてんジャネェよと、ツッコミ入れるのは面倒くさい(英語の困難度:話す>書く>読む)。リポジトリにコミットするのも相手方に面倒を強いる感じでうれしくない(すげー日本人ぽい)。なので、インストールする時にリポジトリからじゃなく、自分のローカルに訂正したものを置いておいて、必要な時にコピーすればいいと思う。インストールでやってる事は、ファイルをコピーするだけだから、おんなじ。
今、突然、Rubyって定数とかどうするんだろ、と思って入門書を開いた。え?変数の頭文字を大文字にするだけ? 読んだんだろうけど忘れてた。にしても、すげー言語仕様。でも、暗黙に慣例でそうなってるんだよ、ってよりか全然いいな。ってか、今まで定数って使った事無かったのかよwww いい加減過ぎる。
今回分かったのは、
・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 いい加減過ぎる。
コメント 0