/usr/share/doc/ruby-highline/examples/basic_usage.rb is in ruby-highline 1.6.21-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | #!/usr/bin/env ruby
# 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
|