Initial MoonModel implementation

This commit is contained in:
Nick Estes
2026-08-11 14:41:33 -07:00
commit 518fe64b13
36 changed files with 2587 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
# 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