module Potassium::CLI

Public Class Methods

find_closest_recipe(recipe_list, possible_recipe) click to toggle source
# File lib/potassium/cli/commands/install.rb, line 58
def self.find_closest_recipe(recipe_list, possible_recipe)
  return nil unless possible_recipe
  highest_distance = 100
  closest_match = nil
  recipe_list.each do |recipe|
    distance = Levenshtein.distance(recipe, possible_recipe)
    if distance < highest_distance
      highest_distance = distance
      closest_match = recipe
    end
  end
  closest_match
end
guess_recipe_name(args) click to toggle source
# File lib/potassium/cli/commands/install.rb, line 34
def self.guess_recipe_name(args)
  if recipe_exists?(args)
    args.first
  else
    find_closest_recipe(recipe_name_list, args.first)
  end
end
recipe_exists?(args) click to toggle source
# File lib/potassium/cli/commands/install.rb, line 30
def self.recipe_exists?(args)
  recipe_name_list.include?(args.first)
end
recipe_name_list() click to toggle source
# File lib/potassium/cli/commands/install.rb, line 42
def self.recipe_name_list
  list = []

  source_root = File.expand_path('../../../recipes', __FILE__)
  Dir.entries(source_root).each do |file_name|
    if file_name.end_with?('.rb')
      recipe_name = file_name.gsub('.rb', '')
      require "potassium/recipes/#{recipe_name}"
      recipe_class = Recipes.const_get(recipe_name.camelize)
      list << recipe_name if recipe_class.method_defined?(:install)
    end
  end

  list
end