class RDialogs

A ruby wrapper for ncurses dialog and newt whiptail.

Constants

COMMON_OPTIONS_TABLE
DEFAULT_DIALOG_SIZE
DIALOGS_TABLE
SUPPORTED_TOOLS
VERSION

Public Class Methods

new(dialog_cmd = 'dialog') click to toggle source
# File lib/rdialogs.rb, line 46
def initialize(dialog_cmd = 'dialog')
  raise "#{dialog_cmd}: command not supported" unless SUPPORTED_TOOLS.include?(File.basename(dialog_cmd))
  raise "#{dialog_cmd}: command not found" unless command_exists?(dialog_cmd)

  @dialog_cmd = dialog_cmd
end

Private Instance Methods

build_cmd_args(dialog, params) click to toggle source
# File lib/rdialogs.rb, line 118
def build_cmd_args(dialog, params)
  options = params.size > dialog[:params].size ? params.last : {}

  text = process_text(params.first)
  default_value = process_default_value(dialog, params[1])
  list_values = process_list_values(dialog, params[1])

  sizes = process_sizes(options, list_values ? params[1].size : nil)
  common_options = process_common_options(options)

  "#{common_options} --#{dialog[:arg_name]} #{text} #{sizes} #{default_value || list_values}".strip
end
cmd_run(cmd_args) click to toggle source
# File lib/rdialogs.rb, line 131
def cmd_run(cmd_args)
  output = `#{@dialog_cmd} #{cmd_args} 3>&1 1>&2 2>&3`

  $CHILD_STATUS.success? ? output : false
end
command_exists?(cmd) click to toggle source
# File lib/rdialogs.rb, line 61
def command_exists?(cmd)
  ENV['PATH'].split(File::PATH_SEPARATOR).any? do |path|
    File.executable?(File.join(path, cmd))
  end
end
dialog_size(options) click to toggle source
# File lib/rdialogs.rb, line 67
def dialog_size(options)
  width = options[:width] || DEFAULT_DIALOG_SIZE[:width]
  height = options[:height] || DEFAULT_DIALOG_SIZE[:height]

  { width: width, height: height }
end
process_common_options(options) click to toggle source
# File lib/rdialogs.rb, line 106
def process_common_options(options)
  out = options.map do |k, v|
    option = COMMON_OPTIONS_TABLE.detect { |x| x[:name] == k.to_s }

    unless option.nil?
      option[:has_value] ? "--#{option[:arg_name]} #{v.shellescape}" : "--#{option[:arg_name]}"
    end
  end

  out.join(' ').strip
end
process_default_value(dialog, default_value) click to toggle source
# File lib/rdialogs.rb, line 78
def process_default_value(dialog, default_value)
  dialog[:params].include?(:default_value) && default_value ? default_value.shellescape : nil
end
process_list_values(dialog, list) click to toggle source
# File lib/rdialogs.rb, line 82
def process_list_values(dialog, list)
  if dialog[:params].include?(:list)
    list.map do |k, v|
      if v.class == Array
        "#{k.to_s.shellescape} #{v[0].shellescape} #{v[1] ? 'ON' : 'OFF'}"
      else
        "#{k.to_s.shellescape} #{v.shellescape}"
      end
    end.join(' ')
  end
end
process_sizes(options, list_count) click to toggle source
# File lib/rdialogs.rb, line 94
def process_sizes(options, list_count)
  dialog_size = dialog_size(options)

  if list_count
    list_height = list_count < dialog_size[:height] - 8 ? list_count : dialog_size[:height] - 8

    "#{dialog_size[:height]} #{dialog_size[:width]} #{list_height}"
  else
    "#{dialog_size[:height]} #{dialog_size[:width]}"
  end
end
process_text(text) click to toggle source
# File lib/rdialogs.rb, line 74
def process_text(text)
  text.shellescape
end