From: James Edward Gray II Date: 2005-04-21T00:12:00+09:00 Subject: Re: [SOLUTION] Madlibs (#28) Here's a different approach that came to me while writing the summary. James Edward Gray II #!/usr/local/bin/ruby -w # use Ruby's standard template engine require "erb" # storage for keyed question reuse $answers = Hash.new # asks a madlib question and returns an answer def q_to_a( question ) question.gsub!(/\s+/, " ") # noramlize spacing if $answers.include? question # keyed question $answers[question] else # new question key = if question.sub!(/^\s*(.+?)\s*:\s*/, "") then $1 else nil end print "Give me #{question}: " answer = $stdin.gets.chomp $answers[key] = answer unless key.nil? answer end end # usage unless ARGV.size == 1 and test(?e, ARGV[0]) puts "Usage: #{File.basename(__FILE__)} MADLIB_FILE" exit end # load Madlib, with title madlib = "\n#{File.basename(ARGV[0], '.madlib').tr('_', ' ')}\n\n" + File.read(ARGV[0]) # convert ((...)) to <%= q_to_a('...') %> madlib.gsub!(/\(\(\s*(.+?)\s*\)\)/, "<%= q_to_a('\\1') %>") # run template ERB.new(madlib).run