Files

28 lines
1.3 KiB
Ruby

# frozen_string_literal: true
require "optparse"
module MoonModel
class CLI
def self.run(argv)
options = {}
parser = OptionParser.new do |opts|
opts.banner = "Usage: moon_model [--config FILE] [--output DIR]"
opts.on("-c", "--config FILE", "Generate non-interactively from YAML") { |v| options[:config] = v }
opts.on("-o", "--output DIR", "Output directory (default: build/<model name>)") { |v| options[:output] = v }
opts.on("--version", "Print version") { puts VERSION; return 0 }
opts.on("-h", "--help", "Show help") { puts opts; return 0 }
end
parser.parse!(argv)
config = options[:config] ? Config.new(YAML.safe_load_file(options[:config], aliases: false)) : Wizard.new.run
result = Generator.new(config, output_dir: options[:output]).generate
puts "Generated #{result[:files].length} files in #{result[:output_dir]}"
puts "Datum diameter: #{format("%.2f", result[:statistics]["diameter_mm"])} mm; final envelope: #{format("%.2f", result[:statistics]["final_envelope_mm"])} mm; relief: #{format("%.3f", result[:statistics]["relief_range_mm"])} mm"
0
rescue OptionParser::ParseError, ArgumentError, Errno::ENOENT, Psych::Exception => e
warn "moon_model: #{e.message}"
2
end
end
end