summaryrefslogtreecommitdiff
path: root/examples/basic_usage.rb
diff options
context:
space:
mode:
Diffstat (limited to 'examples/basic_usage.rb')
-rw-r--r--examples/basic_usage.rb49
1 files changed, 28 insertions, 21 deletions
diff --git a/examples/basic_usage.rb b/examples/basic_usage.rb
index 62e3ccb..c97b89f 100644
--- a/examples/basic_usage.rb
+++ b/examples/basic_usage.rb
@@ -1,4 +1,5 @@
#!/usr/bin/env ruby
+# encoding: utf-8
# basic_usage.rb
#
@@ -12,32 +13,35 @@ require "yaml"
puts "Using: #{HighLine.default_instance.terminal.class}"
puts
-contacts = [ ]
+contacts = []
+# Just define a parse class method and use the class
+# as a parser for HighLine#ask
+#
class NameClass
- def self.parse( string )
- if string =~ /^\s*(\w+),\s*(\w+)\s*$/
- self.new($2, $1)
- else
- raise ArgumentError, "Invalid name format."
- end
+ def self.parse(string)
+ raise ArgumentError, "Invalid name format." unless
+ string =~ /^\s*(\w+),\s*(\w+)\s*$/
+
+ new(Regexp.last_match(2), Regexp.last_match(1))
end
def initialize(first, last)
- @first, @last = first, last
+ @first = first
+ @last = last
end
attr_reader :first, :last
end
-begin
- entry = Hash.new
+loop do
+ entry = {}
# basic output
say("Enter a contact:")
# basic input
- entry[:name] = ask("Name? (last, first) ", NameClass) do |q|
+ entry[:name] = ask("Name? (last, first) ", NameClass) do |q|
q.validate = /\A\w+, ?\w+\Z/
end
entry[:company] = ask("Company? ") { |q| q.default = "none" }
@@ -47,27 +51,30 @@ begin
q.case = :up
q.validate = /\A[A-Z]{2}\Z/
end
- entry[:zip] = ask("Zip? ") do |q|
+ 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 }
+ entry[:phone] = ask("Phone? ",
+ lambda { |p|
+ p.delete("^0-9").
+ sub(/\A(\d{3})/, '(\1) ').
+ sub(/(\d{4})\Z/, '-\1')
+ }) do |q|
+ q.validate = ->(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[:interests] = ask("Interests? (comma separated list) ",
+ ->(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)
+ # shortcut for yes and no questions
+ break unless agree("Enter another contact? ", true)
+end
if agree("Save these contacts? ", true)
file_name = ask("Enter a file name: ") do |q|