これをきれいに書く方法はありますか?
概要
したがって、機能を無効または有効にするフラグがあります。そして、必要な変数に基づいてフラグを切り替えます
flag_a、flag_b は私の 2 つの機能フラグで、変数入力文字列は none、all、flag_a、flag_b を入力文字列として指定でき、さらに flag_c や flag_d などのフラグを追加することもできます。
def input
variable = stdin "value"
update_flag(value.upcase)
end
def update_flag(value)
case value
when "ALL"
toggle_flag(flag_a, true)
toogle_flag(flag_b, true)
when "FLAG_A"
toggle_flag(flag_a, true)
toogle_flag(flag_b, false)
when "FLAG_B"
toggle_flag(flag_a, false)
toogle_flag(flag_b, true)
when "NONE"
toggle_flag(flag_a, flase)
toogle_flag(flag_b, false)
end
def toggle_flag(name, flag)
if flag
Featureflag.user(@id).enable(name.to_sym)
else
Featureflag.user(@id).disable(name.to_sym)
end
end
この入力が入力としてコンソールを介してのみ送信される変数に値を送信する方法が必要です。
柔軟な方法で簡単にできるように、ドライかつ楽観的なものにするよう努める 注「入力は入力としてコンソールを介してのみ送信されます」 また、flag_C を追加する場合は、複数の入力を取得する方法が必要になります。これらの入力は有効にする必要があり、REST は無効にする必要があります。
解決策
これには when 条件は必要ありません。次のように、フラグ名を使用して、機能を有効にする必要があるか無効にする必要があるかを確認するだけです。
def input
variable = stdin "value"
update_flag(value.upcase)
end
def update_flag(value)
toggle_flag("flag_a", value)
toggle_flag("flag_b", value)
end
def enable_feature?(name, flag)
return true if flag == "BOTH"
return false if flag == "NONE"
flag.downcase == name
end
def toggle_flag(name, flag)
if enable_feature?(name, flag)
Featureflag.user(@id).enable(name.to_sym)
else
Featureflag.user(@id).disable(name.to_sym)
end
end
アップデート:
提案によると:
より大きな case ステートメントの場合
FLAGS = [
"flag_a",
"flag_b",
"flag_c",
]
def input
value = prompt_input("Enter value:").upcase
update_flags(value)
end
def update_flag(value)
FLAGS.each do { |flag_name| toggle_flag(flag_name, value) }
end
def enable_feature?(name, flag)
return true if flag == "BOTH" || flag == "ALL"
return false if flag == "NONE"
flag.downcase == name
end
def toggle_flag(name, flag)
if enable_feature?(name, flag)
Featureflag.user(@id).enable(name.to_sym)
else
Featureflag.user(@id).disable(name.to_sym)
end
end