class Codeowners::Cli::Wizards::NewOwnerWizard
Attempt to find a name similar to one provided in the owners list. Suggest to add new owner to the owners list. Only return decision without applying any modifications.
Constants
- DEFAULT_OPTIONS
Public Class Methods
new(owners_list)
click to toggle source
# File lib/codeowners/cli/wizards/new_owner_wizard.rb, line 21 def initialize(owners_list) @owners_list = owners_list end
Public Instance Methods
suggest_fixing(line, new_owner)
click to toggle source
# File lib/codeowners/cli/wizards/new_owner_wizard.rb, line 25 def suggest_fixing(line, new_owner) suggested_owner = suggest_name_from_owners_list(new_owner) case prompt(line, new_owner, suggested_owner) when 'y' then [:rename, suggested_owner] when 'a' then :add when 'r' then [:rename, keep_asking_until_valid_owner] when 'i' then :ignore when 'q' then :quit end end
Private Instance Methods
build_prompt_options(suggested_owner)
click to toggle source
# File lib/codeowners/cli/wizards/new_owner_wizard.rb, line 66 def build_prompt_options(suggested_owner) return DEFAULT_OPTIONS unless suggested_owner { 'y' => "(y) correct to #{suggested_owner}" }.merge(DEFAULT_OPTIONS) end
keep_asking_until_valid_owner()
click to toggle source
# File lib/codeowners/cli/wizards/new_owner_wizard.rb, line 72 def keep_asking_until_valid_owner loop do owner = ask('New owner: ') owner = '@' + owner unless owner[0] == '@' return owner if @owners_list.valid_owner?(owner) end end
prompt(line, new_owner, suggested_owner)
click to toggle source
# File lib/codeowners/cli/wizards/new_owner_wizard.rb, line 45 def prompt(line, new_owner, suggested_owner) prompt_options = build_prompt_options(suggested_owner) ask(<<~QUESTION, limited_to: prompt_options.keys) #{question_body(line, new_owner, suggested_owner)} #{question_options(prompt_options)} QUESTION end
question_body(line, new_owner, suggested_owner)
click to toggle source
# File lib/codeowners/cli/wizards/new_owner_wizard.rb, line 53 def question_body(line, new_owner, suggested_owner) prompt = "Unknown owner: #{new_owner} for pattern: #{line.pattern}." if suggested_owner prompt + " Did you mean #{suggested_owner}?" else prompt + ' Choose an option:' end end
question_options(accepted_options)
click to toggle source
# File lib/codeowners/cli/wizards/new_owner_wizard.rb, line 62 def question_options(accepted_options) accepted_options.values.join("\n") end
suggest_name_from_owners_list(new_owner)
click to toggle source
# File lib/codeowners/cli/wizards/new_owner_wizard.rb, line 38 def suggest_name_from_owners_list(new_owner) require 'fuzzy_match' search = FuzzyMatch.new(@owners_list.owners) (suggested_owner, dice, _lev) = search.find_with_score(new_owner) return suggested_owner if dice && dice > 0.6 end