add flags
[ruby_quiz.git] / madlibs.rb
index 6cb83ac..3d095c2 100755 (executable)
@@ -11,6 +11,7 @@ end
 madlibstr = IO.read(ARGV[0]) # the madlib
 
 # Parse and replace the tokens with unique placeholder strings.
+# Token format: ((name:prompt:flags))
 pos = 1
 madlibstr.gsub!(/\(\(([^)]+)\)\)/) do |token|
   token.delete!("()") # clean up token
@@ -18,13 +19,19 @@ madlibstr.gsub!(/\(\(([^)]+)\)\)/) do |token|
   if token =~ /^(\w+):(.*)$/
     # we have a named token, so record the name and position
     names[$1] = pos
-    token = $2
+    token     = $2
   elsif names[token]
     # we are using a named token
     next "<<#{names[token]}>>"
   end
   # otherwise, we have a new token
-  tokens << { :token => token, :pos => pos }
+  if token =~ /^(.*):(\w+)$/
+    token = $1
+    flags = $2
+  else
+    flags = ""
+  end
+  tokens << { :token => token, :pos => pos, :flags => flags}
 
   pos += 1
   "<<#{pos - 1}>>"
@@ -34,6 +41,11 @@ end
 tokens.each do |token|
   print "Tell me #{token[:token]}? "
   value = $stdin.gets.chomp
+
+  value.capitalize! if token[:flags].include? ?c
+  value.upcase!     if token[:flags].include? ?u
+  value.downcase!   if token[:flags].include? ?d
+
   madlibstr.gsub!("<<#{token[:pos]}>>", value)
 end