github.com
宜しくお願いします。こんな感じです。
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
t["c"].value
t["n"].value
t["s"].value
t.glossry
テストという名のサンプル もあります。
optparseのmruby移植もあったんですけど、せっかくなので練習も兼ねCの argtable をラップする奴を書いた。
今の所、mgemを入れる時に取得するようにしています。なんかリポジトリに最初から含めた方がいい気もしている。
mgem-listには申請中ですマージされました。→ Add mruby-argtable by udzura · Pull Request #179 · mruby/mgem-list · GitHub
MRuby::Gem::Specification.new('your-cli') do |spec|
spec.bins = ["your-cli"]
spec.add_dependency 'mruby-argtable', mgem: 'mruby-argtable'
end
mruby-cli 本体にはオプションパーサーは添付されていないので、組み合わせると幸せになるかも。
github.com
今の所、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必ず呼ぶところとか)なので、必要なものは暗黙に呼んだりする今の形に変更した。
「Rubyらしさ」というか「Rubyとして使いたいか」みたいな設計の感じは、CRubyと一緒な感じがする。