# = TITLE: # # Console # # = COPYING: # # Copyright (c) 2007 Psi T Corp. # # This file is part of the ProUtils' Ratch program. # # Ratch is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ratch is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ratch. If not, see . module Ratch module Dsl module Console # Convenient method to get simple console reply. def ask(question, answers=nil) print "#{question}" print " [#{answers}] " if answers until inp = $stdin.gets ; sleep 1 ; end inp end # Ask for a password. (FIXME: only for unix so far) def password(prompt=nil) msg ||= "Enter Password: " inp = '' print "#{prompt} " begin system "stty -echo" #inp = gets.chomp until inp = $stdin.gets sleep 1 end ensure system "stty echo" end return inp.chomp end # Internal status report. # Only output if dryrun or trace mode. def status(message) puts message if dryrun? or trace? end end end end class Array # Not empty? def not_empty? !empty? end # Convert an array into command line parameters. # The array is accepted in the format of Ruby # method arguments --ie. [arg1, arg2, ..., hash] def to_console flags = (Hash===last ? pop : {}) flags = flags.to_console flags + ' ' + join(" ") end alias_method :to_params, :to_console # def to_console # flags = (Hash===last ? pop : {}) # flags = flags.collect do |f,v| # m = f.to_s.size == 1 ? '-' : '--' # case v # when Array # v.collect{ |e| "#{m}#{f} '#{e}'" }.join(' ') # when true # "#{m}#{f}" # when false, nil # '' # else # "#{m}#{f} '#{v}'" # end # end # return (flags + self).join(" ") # end end class Hash # Convert an array into command line parameters. # The array is accepted in the format of Ruby # method arguments --ie. [arg1, arg2, ..., hash] def to_console flags = collect do |f,v| m = f.to_s.size == 1 ? '-' : '--' case v when Array v.collect{ |e| "#{m}#{f}='#{e}'" }.join(' ') when true "#{m}#{f}" when false, nil '' else "#{m}#{f}='#{v}'" end end flags.join(" ") end # Turn a hash into arguments. # # h = { :list => [1,2], :base => "HI" } # h.argumentize #=> [ [], { :list => [1,2], :base => "HI" } ] # h.argumentize(:list) #=> [ [1,2], { :base => "HI" } ] # def argumentize(args_field=nil) config = dup if args_field args = [config.delete(args_field)].flatten.compact else args = [] end args << config return args end alias_method :command_vector, :argumentize end