Skip to content

Instantly share code, notes, and snippets.

@jmcarbo
Created August 20, 2009 05:01
Show Gist options
  • Save jmcarbo/170849 to your computer and use it in GitHub Desktop.
Save jmcarbo/170849 to your computer and use it in GitHub Desktop.
#
# sample program of expect.rb
#
# by A. Ito #
# This program reports the latest version of ruby interpreter
# by connecting to ftp server at netlab.co.jp.
#
require 'pty'
require 'expect'
uri = ARGV.shift || "ftp.ruby-lang.org"
STDOUT.sync = true
STDERR.sync = true
$expect_verbose = false
username = ENV['USER'] || ENV['LOGNAME'] || username = 'guest'
versions = []
login_pat = %r/^\s*name.*:\s*/io
password_pat = %r/^\s*password:/io
prompt_pat = %r/^\s*ftp\s*>\s*/io
version_pat = %r/ruby-(\d\.\d.\d)(-[^\.]+)*\.tar\.gz/io
PTY.spawn("ftp ftp.ruby-lang.org") do |r_f,w_f,pid|
w_f.sync = true
r_f.expect(login_pat){ w_f.puts "ftp" }
r_f.expect(password_pat){ w_f.puts "#{ username }@" }
r_f.expect(prompt_pat){ w_f.puts "cd pub/ruby" }
r_f.expect(prompt_pat){ w_f.puts "dir" }
r_f.expect(prompt_pat) do |output|
output.first.each do |line|
m = version_pat.match(line)
versions.push m[1] if m
end
end
w_f.print("bye") rescue nil
end
puts versions.join(',')
puts "The latest ruby interpreter is <#{ versions.sort.last }>"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment