Thor のコマンドラインオプションに hash 値を渡す

渡し方がよくわからなかったので覚書。

コード

require "thor"


class CLI < Thor
    desc "", ""
    # オプションの引数を hash 値で受けとる
    option :config, type: :hash
    def sub
        puts options[:config]
    end
end


# hash 値を渡す場合
# {key}:{value} {key}:{value}... と渡す
CLI.start %w(sub --config=key1:value1 key2:value2)
# => {"key1"=>"value1", "key2"=>"value2"}

オプションに対して key1:value1 key2:value2 みたいなフォーマットで渡せば hash 値としてパースされます。
key1: value みたいに : の前後にスペースが合ったり、 { key1: value1, key2: value2 } みたいな Ruby 形式だとうまく渡せないので注意。