\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /opt/chef.upgrade/embedded/lib/ruby/gems/2.3.0/gems/highline-1.7.8/examples/

Viewing File: basic_usage.rb

#!/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