require 'hamster' require_relative 'utilities' require_relative 'command_line' require_relative 'subcommand_builder' module Lino class CommandLineBuilder include Lino::Utilities class <> join_with(@option_separator))), map_and_join(@subcommands) { |sub| sub.build(@option_separator, @option_quoting) }, map_and_join(@arguments, &join_with(' ')) ] command_string = components .reject { |item| item.empty? } .join(' ') CommandLine.new(command_string) end private def with **replacements CommandLineBuilder.new(**state.merge(replacements)) end def state { command: @command, subcommands: @subcommands, switches: @switches, arguments: @arguments, environment_variables: @environment_variables, option_separator: @option_separator, option_quoting: @option_quoting } end end end