summaryrefslogtreecommitdiff
path: root/examples/basic_usage.rb
diff options
context:
space:
mode:
authorGregory Brown <gregory.t.brown@gmail.com>2009-02-02 11:59:04 -0500
committerGregory Brown <gregory.t.brown@gmail.com>2009-02-02 11:59:04 -0500
commit6ff9ffe5fabf766183db9ed1d548b70e21f02eb6 (patch)
tree19a69d22f4c15a7ec1dfb69988f2fa51365b08fe /examples/basic_usage.rb
parent37cd9cff1783911ab51afd90ba6588ce12c58b57 (diff)
downloadhighline-6ff9ffe5fabf766183db9ed1d548b70e21f02eb6.tar.gz
restructuring
Diffstat (limited to 'examples/basic_usage.rb')
-rw-r--r--examples/basic_usage.rb75
1 files changed, 75 insertions, 0 deletions
diff --git a/examples/basic_usage.rb b/examples/basic_usage.rb
new file mode 100644
index 0000000..60ecdc1
--- /dev/null
+++ b/examples/basic_usage.rb
@@ -0,0 +1,75 @@
+#!/usr/local/bin/ruby -w
+
+# basic_usage.rb
+#
+# Created by James Edward Gray II on 2005-04-28.
+# Copyright 2005 Gray Productions. All rights reserved.
+
+require "rubygems"
+require "highline/import"
+require "yaml"
+
+contacts = [ ]
+
+class NameClass
+ def self.parse( string )
+ if string =~ /^\s*(\w+),\s*(\w+)\s*$/
+ self.new($2, $1)
+ else
+ raise ArgumentError, "Invalid name format."
+ end
+ end
+
+ def initialize(first, last)
+ @first, @last = first, last
+ end
+
+ attr_reader :first, :last
+end
+
+begin
+ entry = Hash.new
+
+ # basic output
+ say("Enter a contact:")
+
+ # basic input
+ entry[:name] = ask("Name? (last, first) ", NameClass) do |q|
+ q.validate = /\A\w+, ?\w+\Z/
+ end
+ entry[:company] = ask("Company? ") { |q| q.default = "none" }
+ entry[:address] = ask("Address? ")
+ entry[:city] = ask("City? ")
+ entry[:state] = ask("State? ") do |q|
+ q.case = :up
+ q.validate = /\A[A-Z]{2}\Z/
+ end
+ entry[:zip] = ask("Zip? ") do |q|
+ q.validate = /\A\d{5}(?:-?\d{4})?\Z/
+ end
+ entry[:phone] = ask( "Phone? ",
+ lambda { |p| p.delete("^0-9").
+ sub(/\A(\d{3})/, '(\1) ').
+ sub(/(\d{4})\Z/, '-\1') } ) do |q|
+ q.validate = lambda { |p| p.delete("^0-9").length == 10 }
+ q.responses[:not_valid] = "Enter a phone numer with area code."
+ end
+ entry[:age] = ask("Age? ", Integer) { |q| q.in = 0..105 }
+ entry[:birthday] = ask("Birthday? ", Date)
+ entry[:interests] = ask( "Interests? (comma separated list) ",
+ lambda { |str| str.split(/,\s*/) } )
+ entry[:description] = ask("Enter a description for this contact.") do |q|
+ q.whitespace = :strip_and_collapse
+ end
+
+ contacts << entry
+# shortcut for yes and no questions
+end while agree("Enter another contact? ", true)
+
+if agree("Save these contacts? ", true)
+ file_name = ask("Enter a file name: ") do |q|
+ q.validate = /\A\w+\Z/
+ q.confirm = true
+ end
+ File.open("#{file_name}.yaml", "w") { |file| YAML.dump(contacts, file) }
+end