Forum: Ruby ASCII Menu in Ruby, is it possible?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ruby S. (Guest)
on 2009-02-19 21:47
(Received via mailing list)
Hello Team,

Is there a way in Ruby to create primitive ASCII menus?
At this point I am shying away from GUI as everything outthere, in the
GUI
world is too....
I just want to know if I can create simple menus of the type:

1 - Enter 1 and press Enter to continue
2 - Enter 2 or X and press Enter to exit
3 - Etc.

Thank you
Jason R. (Guest)
on 2009-02-19 21:59
(Received via mailing list)
Did you try anything or just jump straight here to ask?

puts "1. Do something here"
puts "2. I want this"
puts "3. Hmm"

x = gets

case x
when "1"
  ...
when "2"
  ...
when "3"
  ...
end

Unless you're not including enough detail for a proper answer, a quick
jaunt through any Ruby book/tutorial/website would get you at least
this far.

Jason
Justin C. (Guest)
on 2009-02-19 22:06
(Received via mailing list)
Ruby S. wrote:
>
> Thank you
>
>
Sure you can.

For example:

def menu
    loop do
        puts "1. Do something", "2. Do something else", "3. Nevermind"

        input = gets.strip

        case input
        when "1"
            puts "Did something"
        when "2"
            puts "Did something else"
        when "3"
            puts "Bye!"
            return
        else
            puts "Invalid option: #{input}"
        end
    end
end

menu

-Justin
Eleanor McHugh (Guest)
on 2009-02-19 22:13
(Received via mailing list)
On 19 Feb 2009, at 19:47, Ruby S. wrote:
> 3 - Etc.
>
> Thank you

You can find an example of doing this with the termios library by
following the link in my sig and reading the Camping presentation. For
more advanced text-based GUIs you could look at ncurses and highline.


Ellie

Eleanor McHugh
Games With Brains
http://slides.games-with-brains.net
----
raise ArgumentError unless @reality.responds_to? :reason
Ruby S. (Guest)
on 2009-02-19 22:23
(Received via mailing list)
On Thu, Feb 19, 2009 at 3:12 PM, Eleanor McHugh <
removed_email_address@domain.invalid> wrote:

>> 2 - Enter 2 or X and press Enter to exit
> Ellie
>
> Eleanor McHugh
> Games With Brains
> http://slides.games-with-brains.net
> ----
> raise ArgumentError unless @reality.responds_to? :reason
>
>
>
>

Eleanor,

Thank you for your help. It is highly appreciated!
Ruby S. (Guest)
on 2009-02-19 22:24
(Received via mailing list)
On Thu, Feb 19, 2009 at 3:04 PM, Justin C.
<removed_email_address@domain.invalid>wrote:

>> 2 - Enter 2 or X and press Enter to exit
> def menu
>       when "3"
>           puts "Bye!"
>           return           else             puts "Invalid option: #{input}"
>       end       end
> end
>
> menu
>
> -Justin
>
>

Dear Jason,

YES, I did first performed a google search, which is this:

"ruby" "menu" "ASCII menu"

and the above gave me this:
http://www.google.com/search?hl=en&q=%22ruby%22+%2...

As a routine, I religiously perform first a good search. I also traverse
the
gems repository. Then I come to the forum.
That been said, I appreciate your answer and justin answer. I truly
appreciate your help.
It was far from my mind using gets to perform this task.

Again, thank you!
James G. (Guest)
on 2009-02-19 22:33
(Received via mailing list)
On Feb 19, 2009, at 1:47 PM, Ruby S. wrote:

> Is there a way in Ruby to create primitive ASCII menus?
> At this point I am shying away from GUI as everything outthere, in
> the GUI
> world is too....
> I just want to know if I can create simple menus of the type:
>
> 1 - Enter 1 and press Enter to continue
> 2 - Enter 2 or X and press Enter to exit
> 3 - Etc.

Highline can build these menus for you.  See examples here:

http://github.com/JEG2/highline/blob/664a1f9d9d7e8...

James Edward G. II
Igor P. (Guest)
on 2009-02-20 02:03
If you are planning to do some data entry checking on Linux platforms
you may need to set the STDOUT.sync = true. I am including a simple
program to show you the difference. Indeed on MS Windows you will not
experience any difference if you comment out "STDOUT.sync = true"; on
Linux if buffering is turned on you will!

> STDOUT.sync = true

#!/usr/bin/env ruby

STDOUT.sync = true  # (cross-platform compatibility issue)

loop do
  print "\n\n\tPLEASE SELECT:\n\n"
  print "\t\t(1) ..... enter one number\n"
  print "\t\t(2) ..... enter two numbers "
  print "(no seoarators like commas, ...)\n"
  print "\t\t(Q) ..... Quit\n\n"
  print "\tPlease select one of the above: "
  answer = gets
  printf "You've selected %s\n", answer

  case answer.chomp
  when "1"
    num = nil
    while num !~ /\d+.*[^\d]*/
      print "Please enter a single number: "
      num = gets
      num.chomp!  # note exclamation mark (!)
      if num.split(/\s+/).size != 1|| num !~ /\d+/
        puts  "You should have entered a single number not [#{num}]"
        print "Press <Enter> to continue "
        any = gets
      else
        puts "Thank you for [#{num}]."
      end
    end
  when "2"
    num = nil
    while num !~ /\d+[\s,]+\d+/
      print "Please enter two numbers: "
      num = gets
      num.chomp!  # note exclamation mark (!)
      if num.split(/\s+/).size != 2 || num !~ /\d+\s+\d+/
        puts  "You must enter two numbers number, not [#{num}]"
        print "Press <Enter> to continue "
        any = gets
      else
        puts "Thank you for [#{num}]."
      end
    end
  when /q|Q/
    exit
  else
    print "Illegal selection; Please try again! "
    print "Please enter a single number:\n"
    print "Press <Enter> to continue "
    any = gets
  end
end
Ruby S. (Guest)
on 2009-02-20 15:45
(Received via mailing list)
On Thu, Feb 19, 2009 at 7:03 PM, Igor P. <removed_email_address@domain.invalid>
wrote:

> STDOUT.sync = true  # (cross-platform compatibility issue)
>
>        any = gets
>      if num.split(/\s+/).size != 2 || num !~ /\d+\s+\d+/
>    print "Illegal selection; Please try again! "
>    print "Please enter a single number:\n"
>    print "Press <Enter> to continue "
>    any = gets
>  end
> end
>
> --
> Posted via http://www.ruby-forum.com/.
>
>

I truly appreciate the abundance of suggestions from everyone. I will
try
every suggestion and pick one!

Thank you
This topic is locked and can not be replied to.