class Solano::RepoConfig

Public Class Methods

new(scm) click to toggle source
# File lib/solano/cli/config.rb, line 10
def initialize(scm)
  @scm = scm
  @config = load_config
end

Public Instance Methods

[](key) click to toggle source
# File lib/solano/cli/config.rb, line 15
def [](key)
  return @config[key.to_s]
end
config_filename() click to toggle source
# File lib/solano/cli/config.rb, line 19
def config_filename
  @config_filename
end
load_config() click to toggle source
# File lib/solano/cli/config.rb, line 23
def load_config
  config, raw_config = read_config(false)
  return config
end
read_config(raise_error) click to toggle source
# File lib/solano/cli/config.rb, line 28
def read_config(raise_error)
  config = nil
  raw_config = nil

  root = @scm.root
  cfgfile_pair = pick_config_pair(root, Config::CONFIG_PATHS)
  cfgfile_pair_depr = pick_config_pair(root, Config::CONFIG_PATHS_DEPRECATED)

  if cfgfile_pair && cfgfile_pair_depr then
    abort Text::Error::CONFIG_PATHS_COLLISION % [cfgfile_pair, cfgfile_pair_depr]
  end

  cfgfile_pair = cfgfile_pair_depr if cfgfile_pair.nil?

  if cfgfile_pair && cfgfile_pair.first then
    cfgfile = cfgfile_pair.first
    @config_filename = cfgfile_pair[1]
    begin
      raw_config = File.read(cfgfile)
      if raw_config && raw_config !~ /\A\s*\z/ then
        config = YAML.load(raw_config)
        config = hash_stringify_keys(config)
        config = config['solano'] || config['tddium'] || config
      end
    rescue Exception => e
      message = Text::Warning::YAML_PARSE_FAILED % cfgfile
      if raise_error then
        raise ::Solano::SolanoError.new(message)
      else
        say message
      end
    end
  end

  config ||= Hash.new
  raw_config ||= ''
  return [config, raw_config]
end

Private Instance Methods

pick_config_pair(root, config_paths) click to toggle source
# File lib/solano/cli/config.rb, line 69
def pick_config_pair(root, config_paths)
  files = config_paths.map { |fn| [ File.join(root, fn), fn ] }
  files.select { |p| File.exists?(p.first) }.first
end