Menuboy
Ultrasimple command-line menu/submenu DSL
WARNING: I didn't use TDD to develop this -- it is an extraction out of a custom script I developed for the non-backend-coders to use for managing our node.js/mongodb/redis stack in a super simple way. You can see the basic idea of that in test/example.rb, which was used to develop menuboy.
v0.2.0
- Add ability to pass input from the command line.
e.g.
test/example.rb 2 q 2 1 1
will enter these inputs immediately as though typed by the user, navigating through the menus and selecting options
v0.1.1
- Fix bug where STDIN would not return to normal under linux
v0.1.0
- Remove
STDIN.getch
loop approach which was causing formatting issues with other programs trying to write to STDOUT - Use EventMachine to capture keyboard input
- Use ruby-termios to enable raw keyboard capture
- Provide
Menuboy#fix_stdin
public helper method to temporary re-enable normal stdin behavior
Installation
Add this line to your application's Gemfile:
gem 'menuboy'
And then execute:
$ bundle
Or install it yourself as:
$ gem install menuboy
Usage
Say you write a menuboy script like this:
require 'menuboy'
include Menuboy::DSL
mainmenu "Main Menu" do
option "say cheese!" do
puts "CHEESE!"
end
submenu "animal sounds" do
submenu "duck sounds" do
option "loud quack" do
puts "QUACK!!!"
end
option "soft quack" do
puts "quack!"
end
end
end
end
You can then run the script and have such an interaction:
$prompt> ruby simple.rb
1 - say cheese!
2 - animal sounds
q - quit / go back
(Main Menu)> 1
CHEESE!
(Main Menu)> 2
1 - duck sounds
q - quit / go back
(animal sounds)> h
1 - duck sounds
q - quit / go back
(animal sounds)> 1
1 - loud quack
2 - soft quack
q - quit / go back
(duck sounds)> 1
QUACK!!!
(duck sounds)> 2
quack!
(duck sounds)> q
(animal sounds)> h
1 - duck sounds
q - quit / go back
(animal sounds)> q
(Main Menu)> q
$prompt>
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request