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