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っぽくブロックもできたらいいなと思いました。
PRaggerPlaggerに関心のある人たちから、ぜひこれに関する意見を聞きたいです。でも、俺自身PlaggerPRaggerを触ったのはほんの数日前なのでお手柔らかにお願いします…。