Initial MoonModel implementation
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user