Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
[ANN] EasyPrompt 0.1.0
Francis Hwang
1/14/2005 3:28:00 AM
Hi all,
I've just released EasyPrompt 0.1.0, the initial release of a new
library that makes it easier to prompt the user interactively in a
command-line program.
http://easyprompt.ruby...
EasyPrompt handles defaults, and a few different kinds of expected
values. Here's a sample irb session:
irb(main):001:0> require 'easyprompt'
=> true
irb(main):002:0> prompt = EasyPrompt.new
=> #<EasyPrompt:0x5a42a0 @stdout=#<EasyPrompt::MockableStdout:0x5a3e04>>
irb(main):003:0> fname = prompt.ask( "What's your first name?" )
What's your first name? John
=> "John"
irb(main):004:0> lname = prompt.ask( "What's your last name?", "Doe" )
What's your last name? [Doe]
=> "Doe"
irb(main):005:0> correct = prompt.ask( "Is your name #{ fname } #{
lname }?", true, :boolean )
Is your name John Doe? [y]
=> true
Note that "Doe" is the default value for the last name question, so
it's what is returned when the user just presses Return. Also, the last
question is expecting to return a boolean value, so it returns the
value true instead of a string like "y" or a Fixnum 1.
One cool hack contained in EasyPrompt is the MockCommandLineUser, which
actually allows you to mock out the human being for purposes of
testing.
irb(main):001:0> require 'easyprompt'
=> true
irb(main):002:0> user = EasyPrompt::MockCommandLineUser.new
=> #<EasyPrompt::MockCommandLineUser:0x595818 @match_count={},
@mock_stdout=#<StringIO:0x5949b8>, @mock_stdin=#<StringIO:0x595750>,
@responses={}>
irb(main):003:0> prompt = EasyPrompt.new
=> #<EasyPrompt:0x57d894 @stdout=#<StringIO:0x5949b8>>
irb(main):004:0> prompt.ask( "Prepared for this one?" )
RuntimeError: Can't match "Prepared for this one? "
from /usr/local/lib/ruby/site_ruby/1.8/easyprompt.rb:79:in
`match_regexp'
from /usr/local/lib/ruby/site_ruby/1.8/easyprompt.rb:95:in
`update'
from /usr/local/lib/ruby/1.8/observer.rb:185:in
`notify_observers'
from /usr/local/lib/ruby/1.8/observer.rb:184:in `each'
from /usr/local/lib/ruby/1.8/observer.rb:184:in
`notify_observers'
from /usr/local/lib/ruby/site_ruby/1.8/easyprompt.rb:128:in
`gets'
from /usr/local/lib/ruby/site_ruby/1.8/easyprompt.rb:36:in
`ask'
from (irb):4
irb(main):005:0> user.set_response( /about this one/, "sure!" )
=> ["sure!", nil]
irb(main):006:0> prompt.ask( "How about this one?" )
=> "sure!"
irb(main):007:0> user.set_response( /twice/, "no", 1 )
=> ["no", 1]
irb(main):008:0> prompt.ask( "Can I ask you this twice?" )
=> "no"
irb(main):009:0> prompt.ask( "Can I ask you this twice?" )
RuntimeError: Exceeded limit of 1 for (?-mix:twice)
from /usr/local/lib/ruby/site_ruby/1.8/easyprompt.rb:101:in
`update'
from /usr/local/lib/ruby/1.8/observer.rb:185:in
`notify_observers'
from /usr/local/lib/ruby/1.8/observer.rb:184:in `each'
from /usr/local/lib/ruby/1.8/observer.rb:184:in
`notify_observers'
from /usr/local/lib/ruby/site_ruby/1.8/easyprompt.rb:128:in
`gets'
from /usr/local/lib/ruby/site_ruby/1.8/easyprompt.rb:36:in
`ask'
from (irb):9
Ah, if only real users were this easy to control.
Francis Hwang
http://f...
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
[ANN] EasyPrompt 0.1.0
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password