宜しくお願いします。こんな感じです。
t = Argtable.new t.literal("v", "verbose", "You are verbose") t.integer("c", "count", "<c>", "My count") t.double("s", "seconds", "<t>", "My seconds") t.string("n", "name", "<n>", "My name") t.parse(["prog", "-c", "9999", "--verbose", "--name=udzura", "-s", "12.25"]) t["v"].count #=> 1, no value t["c"].value #=> 9999 t["n"].value #=> "udzura" t["s"].value #=> 12.25 t.glossry # -v, --verbose You are verbose # -c, --count=<c> My count # -s, --seconds=<t> My seconds # -n, --name=<n> My name
テストという名のサンプル もあります。
optparseのmruby移植もあったんですけど、せっかくなので練習も兼ねCの argtable をラップする奴を書いた。
今の所、mgemを入れる時に取得するようにしています。なんかリポジトリに最初から含めた方がいい気もしている。
mgem-listには申請中ですマージされました。→ Add mruby-argtable by udzura · Pull Request #179 · mruby/mgem-list · GitHub
# mgemの依存に追加する例。 MRuby::Gem::Specification.new('your-cli') do |spec| spec.bins = ["your-cli"] spec.add_dependency 'mruby-argtable', mgem: 'mruby-argtable' #... end
mruby-cli 本体にはオプションパーサーは添付されていないので、組み合わせると幸せになるかも。
今の所、mrubyのHEADだと??な感じでテストが失敗するので、何かをします。 (mruby-cliがデフォルトで使うっぽい) 1.2.0
ならOK。
mruby-argtable のAPI、最初は元のCのインタフェースに忠実な感じで、こうだった(一応今も動く)けど、
a = Argtable::Literal.new("a", "aaa", "aaa aaa") b = Argtable::Literal.new("b", "bbb", "bbb bbb") t = Argtable.new t.push a; t.push b t.compile t.parse(["prog", "-a"]) a.count
あまりに、罠が多そう(例えばcompile必ず呼ぶところとか)なので、必要なものは暗黙に呼んだりする今の形に変更した。