Plagger実行中にconfigを対話的に入力するプラグイン(2)
Plagger実行中にconfigを対話的に入力するプラグイン - ヒルズで働く@robarioの技ログ
前エントリが長いので新規エントリです。
パスワードを対話的に聞くのはlib/Plagger/Crypt/Prompt.pmってのを作ればいいんじゃね? - otsune's SnakeOil - subtech
トラックバックありがとうございました!
名案だと思ったのでちょっと書いてみたのですが色々問題が出てしまいました。
decryptはpasswordフィールドでしか呼び出されません。
password以外のフィールドも対話入力したいことがあるので、$plagger->{conf}の全走査が必要になってしまいます。
つまり、対話入力したいフィールド全てに何か目印を付ける必要があります。
$plagger->{conf}はhashrefなので順番を制御することができません。
設定にorderを加える必要があります。
なお、IO::PromptではなくTerm::ReadKeyを使っているのは、Term::ReadKeyはCPAN::Shellで利用されるので入っている可能性が高いと思ったからです。
id:otsuneさんの意見を参考に、Plagger::Plugin#decrypt_configのもう一つ上のPlagger::Plugin::do_walkを上書きする形でやってみました。とりあえず以下のようなconfigで動くようにはなっています(ろくでもないので公開はしませんが)
id:miyagawaさんに怒られるかなーと思ってPlagger::Plugin::Acme::*以下に移動しています。
plugins: - module: Acme::CustomConfig - module: Subscription::LivedoorReader config: username: Acme::CustomConfig::ReadLine: prompt: What is your LDR username? default: holidays_l order: 1 password: Acme::CustomConfig::ReadPassword: prompt: What is your LDR password? default: abc123 order: 2 mark_read: 0
動作はするのですが、passwordフィールドが残ったままになってしまってPlagger [error] password: ******** not found in test.yaml などと言われてしまうので調整中です。もうちょっとマシなconfig書けるようにならないですかね、という独り言。