class SshMenu::Config

Attributes

config_file[R]
connections[R]
general[R]

Public Class Methods

default_config_file() click to toggle source
# File lib/sshmenu/config.rb, line 68
def self.default_config_file
  File.join(Dir.home, '.config', 'sshmenu', 'config.yml')
end
default_editor() click to toggle source
# File lib/sshmenu/config.rb, line 64
def self.default_editor
  ENV['EDITOR'] || 'vi'
end
default_ssh_client() click to toggle source
# File lib/sshmenu/config.rb, line 60
def self.default_ssh_client
  'ssh'
end
new(cfg_file = nil) click to toggle source
# File lib/sshmenu/config.rb, line 11
def initialize(cfg_file = nil)
  @config_file = cfg_file || self.class.default_config_file
  create_config_file(@config_file) unless File.exist? @config_file

  config = YAML.load_file(@config_file)
  config = {} unless config

  merge_defaults config
  validate_config config
  gen_user_host config['connections']

  @general = config['general']
  @connections = config['connections']

  puts "Config is #{config.inspect}" if $DEBUG
rescue Psych::SyntaxError => e
  raise ConfigException, "YAML syntax error: #{e.message}"
end

Public Instance Methods

create_config_file(cfg_file) click to toggle source
# File lib/sshmenu/config.rb, line 40
def create_config_file(cfg_file)
  puts "Create sample config file #{cfg_file}"
  project_dir = File.dirname(File.dirname(File.dirname(File.expand_path(__FILE__))))
  sample_cfg = File.join(project_dir, 'data', 'sshmenu', 'sampleconfig.yml');
  FileUtils.mkdir_p(File.dirname(cfg_file))
  FileUtils.cp(sample_cfg, cfg_file)
end
gen_user_host(conns) click to toggle source
# File lib/sshmenu/config.rb, line 54
def gen_user_host(conns)
  conns.each do |conn|
    conn['user_host'] = conn['user'] ? "#{conn['user']}@#{conn['host']}" : conn['host']
  end
end
merge_defaults(config) click to toggle source
# File lib/sshmenu/config.rb, line 30
def merge_defaults(config)
  config['general'] ||= {}
  gen = config['general']
  gen['ssh_exec'] ||= self.class.default_ssh_client
  gen['ssh_opts'] ||= ''
  gen['editor'] ||= self.class.default_editor

  config['connections'] ||= []
end
validate_config(config) click to toggle source
# File lib/sshmenu/config.rb, line 48
def validate_config(config)
  unless config['connections'].all? {|conn| conn['host']}
    raise ConfigException, "invalid connection found in #{@config_file}: missing host"
  end
end