class Nehm::UI::Menu

Public Class Methods

new() { |self| ... } click to toggle source
# File lib/nehm/menu.rb, line 5
def initialize
  @choices = {}
  @inc_index = 1
  @items = []

  yield self
  select
end

Public Instance Methods

call_selected_block(selected) click to toggle source
# File lib/nehm/menu.rb, line 64
def call_selected_block(selected)
  loop do
    if @choices.keys.include? selected
      block = @choices[selected]
      block.call unless block.nil?
      break
    else
      selected = UI.ask "You must choose one of [#{@choices.keys.join(', ')}]"
    end
  end
end
choice(index, desc, &block) click to toggle source
# File lib/nehm/menu.rb, line 14
def choice(index, desc, &block)
  # Visual index - index that you see in menu
  # Select index - index than can be selected
  # For example, if you use ':added' index
  # In menu you see 'A', but you can select it by number
  # You receive a warning though

  visual_index = select_index = index

  if index == :inc
    visual_index = select_index = @inc_index.to_s
    @inc_index += 1
  end

  if index == :added
    visual_index = 'A'.green
    select_index = @inc_index.to_s
    @inc_index += 1
  end

  @choices[select_index] = block
  @items << "#{visual_index} #{desc}"
end
header=(value) click to toggle source
# File lib/nehm/menu.rb, line 38
def header=(value)
  @items.unshift(value)
end
newline() click to toggle source
# File lib/nehm/menu.rb, line 42
def newline
  @items << "\n"
end
select() click to toggle source
# File lib/nehm/menu.rb, line 46
def select
  # Add exit option
  newline
  choice('e', 'Exit'.red) { UI.term }

  # Output items
  @items.each do |item|
    UI.say item
  end

  UI.newline

  selected = UI.ask('Enter option'.yellow.freeze)
  call_selected_block(selected)

  UI.newline
end