class ChefCLI::Command::Generate

Constants

GeneratorCommand

Public Class Methods

banner() click to toggle source
banner_headline() click to toggle source
generator(name, class_name, description) click to toggle source
# File lib/chef-cli/command/generate.rb, line 44
def self.generator(name, class_name, description)
  generators << GeneratorCommand.new(name, class_name, description)
end
generator_list() click to toggle source
# File lib/chef-cli/command/generate.rb, line 68
def self.generator_list
  justify_size = generators.map { |g| g.name.size }.max + 2
  generators.map { |g| "  #{g.name.to_s.ljust(justify_size)}#{g.description}" }.join("\n")
end
generators() click to toggle source
# File lib/chef-cli/command/generate.rb, line 40
def self.generators
  @generators ||= []
end
new(*args) click to toggle source

chef generate app path/to/basename –skel=path/to/skeleton –example chef generate file name [path/to/cookbook_root] (inferred from cwd) –from=source_file

Calls superclass method ChefCLI::Command::Base::new
# File lib/chef-cli/command/generate.rb, line 80
def initialize(*args)
  super
end

Public Instance Methods

generator_for(arg) click to toggle source
# File lib/chef-cli/command/generate.rb, line 107
def generator_for(arg)
  self.class.generators.find { |g| g.name.to_s == arg }
end
have_generator?(name) click to toggle source
# File lib/chef-cli/command/generate.rb, line 121
def have_generator?(name)
  self.class.generators.map { |g| g.name.to_s }.include?(name)
end
needs_help?(params) click to toggle source

In the Base class, this is defined to be true if any args match “-h” or “–help”. Here we override that behavior such that if the first argument is a valid generator name, like `chef generate cookbook -h`, we delegate the request to the specified generator.

Calls superclass method ChefCLI::Command::Base#needs_help?
# File lib/chef-cli/command/generate.rb, line 115
def needs_help?(params)
  return false if have_generator?(params[0])

  super
end
run(params) click to toggle source
# File lib/chef-cli/command/generate.rb, line 84
def run(params)
  if params[0] == "build-cookbook"
    warn "[DEPRECATION] Chef Workflow (Delivery) is end of life (EOL) as of December 31, 2020 and this generator subcommand has been removed".freeze
    return 1
  end
  if ( generator_spec = generator_for(params[0]) )
    params.shift
    generator = GeneratorCommands.build(generator_spec.class_name, params)
    generator.run
  else
    msg(banner)
    1
  end
rescue OptionParser::InvalidOption, OptionParser::MissingArgument => e
  # ChefCLI::Command::Base also handles this error in the same way, but it
  # does not have access to the correct option parser, so it cannot print
  # the usage correctly. Therefore, invalid CLI usage needs to be handled
  # here.
  err("ERROR: #{e.message}\n")
  msg(generator.opt_parser)
  1
end