28 lines
1.3 KiB
Ruby
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
|