class Menu
Public Class Methods
new(options, prompt)
click to toggle source
# File lib/menu.rb, line 5 def initialize(options, prompt) @prompt = prompt.center(33) @options = options @selected = 0 @done = false end
Public Instance Methods
done?()
click to toggle source
# File lib/menu.rb, line 61 def done? @done end
increment_selected(num)
click to toggle source
# File lib/menu.rb, line 55 def increment_selected(num) return nil unless @options[@selected][:type] == :increment new_val = @options[@selected][:value] + num @options[@selected][:value] = [new_val, 1].max end
open()
click to toggle source
# File lib/menu.rb, line 12 def open until done? system "clear" or system "cls" render input = STDIN.getch take_action(input) end return @options[@selected] end
render()
click to toggle source
# File lib/menu.rb, line 22 def render str = @options.map.with_index do |option, i| if option[:type] == :increment line = "◀ #{option[:title]}: #{option[:value]} #{option[:unit]} ►".center(33) else line = "#{option[:title]}".center(33) end i == @selected ? line.on_yellow : line end.join("\n") puts @prompt puts str end
take_action(input)
click to toggle source
# File lib/menu.rb, line 35 def take_action(input) case input when "w" @selected = (@selected - 1) % @options.length when "a" increment_selected(-1) when "s" @selected = (@selected + 1) % @options.length when "d" increment_selected(1) when "\r" @done = true when "p" @done = true when "\e" @done = true end nil end