Module: VivlioStarter::CLI::SamovarCommands::OptionTokenNormalizer::ClassMethods
- Defined in:
- lib/vivlio_starter/cli/samovar/option_token_normalizer.rb
Overview
コマンドクラス側に生えるヘルパー
Instance Method Summary collapse
-
#all_option_flags ⇒ Array<String>
options 定義に現れる全フラグ名。トークンを「オプション」と「位置引数」へ 仕分けるのに使う。BooleanFlag は
alternativesに--no-xxxを持つため、 prefix と併せて集めれば--no-cleanのような否定形も文字列一致で拾える。. -
#options_declared_first? ⇒ Boolean
オプション群を位置引数より前に並べるべきか。 Samovar の
Table#parseは行を宣言順に 1 回ずつ処理し、Optionsはinput.firstが既知フラグである間しか消費しない。つまりオプションは 「options 行が回ってくる時点で先頭に並んでいる」必要があり、寄せる向きは そのコマンドの宣言順で決まる。. -
#value_option_flags ⇒ Array<String>
options 定義から「値を取るフラグ」の名前を集める。 Samovar の ValueFlag は値なしフラグ(
--highなど)も表現するため、 値プレースホルダを持たないもの(boolean?)を除いて判定する。.
Instance Method Details
#all_option_flags ⇒ Array<String>
options 定義に現れる全フラグ名。トークンを「オプション」と「位置引数」へ
仕分けるのに使う。BooleanFlag は alternatives に --no-xxx を持つため、
prefix と併せて集めれば --no-clean のような否定形も文字列一致で拾える。
53 54 55 |
# File 'lib/vivlio_starter/cli/samovar/option_token_normalizer.rb', line 53 def all_option_flags @all_option_flags ||= option_flag_objects.flat_map { [it.prefix, *it.alternatives] }.freeze end |
#options_declared_first? ⇒ Boolean
オプション群を位置引数より前に並べるべきか。
Samovar の Table#parse は行を宣言順に 1 回ずつ処理し、Options は
input.first が既知フラグである間しか消費しない。つまりオプションは
「options 行が回ってくる時点で先頭に並んでいる」必要があり、寄せる向きは
そのコマンドの宣言順で決まる。
73 74 75 76 77 78 79 80 81 82 |
# File 'lib/vivlio_starter/cli/samovar/option_token_normalizer.rb', line 73 def return @options_declared_first unless @options_declared_first.nil? rows = table.merged.each.to_a.select { it.respond_to?(:parse) } = rows.index { it.is_a?(Samovar::Options) } argument_at = rows.index { it.is_a?(Samovar::Many) || it.is_a?(Samovar::One) } # 片方しか持たないコマンドは並べ替えの余地がない(どちらでも結果は同じ) @options_declared_first = .nil? || argument_at.nil? || < argument_at end |
#value_option_flags ⇒ Array<String>
options 定義から「値を取るフラグ」の名前を集める。
Samovar の ValueFlag は値なしフラグ(--high など)も表現するため、
値プレースホルダを持たないもの(boolean?)を除いて判定する。
61 62 63 64 65 66 |
# File 'lib/vivlio_starter/cli/samovar/option_token_normalizer.rb', line 61 def value_option_flags @value_option_flags ||= option_flag_objects .select { it.is_a?(Samovar::ValueFlag) && !it.boolean? } .flat_map { [it.prefix, *it.alternatives] } .freeze end |