PlaggerやPRaggerを使って思った事
数日前にPlaggerの勉強会があった。
config.yamlに数行書くだけで、すでに作られたプラグインが様々な成果物を作っていく過程は面白いと思った。
これを使えば、あんな事やこんな事も・・・!
でも俺はRuby派で、どうもPerlはいやだ。Rubyにも、PlaggerインスパイアであるPRaggerがあるから、勉強会後、そっちを触ってみた。
その時違和感が…。どうしてこんなシーケンシャルな操作しかないの?みんな気持ち悪くないんだろうか。制御構文が一つも出てこないじゃないかと。
せめて、ifは欲しい!と思ったので書いてみた。
Cond/cond.rb
## select action by condition -- Meguu def cond(config,data) data_cond = data.dup res_cond = eval_pragger(config["condition"], data_cond) if res_cond eval_pragger(config["true"], data.dup) else eval_pragger(config["false"], data.dup) end end
return_true.rb
# Return true def return_true(config,data) TRUE end
return_false.rb
# Return false def return_false(config,data) false end
config.yaml
- module: Cond::cond config: condition: - module: return_false "true": - module: RSS::load config: url: http://d.hatena.ne.jp/Meguu/rss "false": - module: RSS::load config: url: http://b.hatena.ne.jp/Meguu/rss - module: RSS::save config: filename: a.rss
Cond::condを使えば、conditionでtrueを返せばtrueの処理を、falseを返せばfalseの処理をする。
moduleを複数並べる事も可能。
ちなみに、このconfig.yamlは、めんどくさかったので直にfalse返してるが、真偽値を返すようなプラグインを作れば、置き換えることが可能です。
こんな感じで、for文とか、Rubyっぽくブロックもできたらいいなと思いました。
PRaggerやPlaggerに関心のある人たちから、ぜひこれに関する意見を聞きたいです。でも、俺自身PlaggerやPRaggerを触ったのはほんの数日前なのでお手柔らかにお願いします…。