module Rails::Generators

def invoke(namespace, args = ARGV, config = {})

commands.
It's used as the default entry point for generate, destroy, and update
Receives a namespace, arguments, and the behavior to invoke the generator.
def invoke(namespace, args = ARGV, config = {})
  names = namespace.to_s.split(":")
  if klass = find_by_namespace(names.pop, names.any? && names.join(":"))
    args << "--help" if args.empty? && klass.arguments.any?(&:required?)
    klass.start(args, config)
    run_after_generate_callback if config[:behavior] == :invoke
  else
    options = sorted_groups.flat_map(&:last)
    error   = Command::Base::CorrectableError.new("Could not find generator '#{namespace}'.", namespace, options)
    if error.respond_to?(:detailed_message)
      formatted_message = error.detailed_message
    else
      formatted_message = error.message
    end
    puts <<~MSG
      #{formatted_message}
      Run `bin/rails generate --help` for more options.
    MSG
  end
end