class Troy::Cli

def self.exit_on_failure?

def self.exit_on_failure?
  true
end

def export

def export
  runner = lambda do
    if options[:assets]
      site.export_assets
      site.export_files
    end
    options[:file]&.each do |file|
      site.export_pages(file)
    end
    site.export if !options[:assets] && !options[:file]
  end
  if options[:benchmark]
    require "benchmark"
    elapsed = Benchmark.realtime(&runner)
    puts "=> Finished in #{elapsed.round(2)}s"
  else
    runner.call
  end
end

def initialize(args = [], options = {}, config = {})

def initialize(args = [], options = {}, config = {})
  if (config[:current_task] || config[:current_command]).name == "new" && args.empty?
    raise Error, "The site path is required. For details run: troy help new"
  end
  super
end

def new(path)

def new(path)
  generator = Generator.new
  generator.destination_root = path
  generator.invoke_all
end

def server

def server
  begin
    handler = Rackup::Handler.pick(%i[puma thin webrick])
  rescue Exception
    raise Error,
          "No Rack handler found. Install a Rack handler (e.g. puma, thing, unicorn, webrick)"
  end
  handler.run Troy::Server.new(File.join(Dir.pwd, "public")),
              Port: options[:port],
              Host: options[:host]
end

def site

def site
  @site ||= Troy::Site.new(Dir.pwd, options)
end

def version

def version
  say "Troy #{Troy::VERSION}"
end