require 'getoptlong' require 'tk' class DummyFtpClient def initialize @host = nil @user = nil @password = nil opts = GetoptLong.new( [ "--host", "-h", GetoptLong::OPTIONAL_ARGUMENT ], [ "--user", "-u", GetoptLong::OPTIONAL_ARGUMENT ], [ "--password", "-p", GetoptLong::OPTIONAL_ARGUMENT ] ) opts.each { |opt,arg| case opt when '--host' @host = arg when '--user' @user = arg when '--password' @password = arg end } if @host.nil? || @user.nil? || @password.nil? get_missed_arguments end end def get_missed_arguments root = TkRoot.new('title' => 'Connection parameters') hostVar = add_entry(root, 'Host:', @host) userVar = add_entry(root, 'User:', @user) passwordVar = add_entry(root, 'Password:', @password) onConnect = proc { @host = hostVar.value unless hostVar.nil? @user = userVar.value unless userVar.nil? @password = passwordVar.value unless passwordVar.nil? Tk.exit } TkButton.new(root) { text 'Connect' command onConnect }.pack('padx' => 10, 'pady' => 10) Tk.mainloop end def add_entry(root, prompt, value) if value.nil? tkVar = TkVariable.new tkVar.value = value TkLabel.new(root) { text prompt pack { padx 5; pady 5 } } TkEntry.new(root, 'textvariable' => tkVar) { pack { padx 5; pady 5 } } return tkVar else return nil end end def connect puts "About to connect to #{@host} as #{@user}/#{@password}" end end client = DummyFtpClient.new client.connect