class Prefab::ConfigLoader

Attributes

highwater_mark[R]

Public Class Methods

new(base_client) click to toggle source
# File lib/prefab/config_loader.rb, line 6
def initialize(base_client)
  @base_client = base_client
  @highwater_mark = 0
  @classpath_config = load_classpath_config
  @local_overrides = load_local_overrides
  @api_config = Concurrent::Map.new
end

Public Instance Methods

calc_config() click to toggle source
# File lib/prefab/config_loader.rb, line 14
def calc_config
  rtn = @classpath_config.clone
  @api_config.each_key do |k|
    rtn[k] = @api_config[k].value
  end
  rtn = rtn.merge(@local_overrides)
  rtn
end
get_api_deltas() click to toggle source
# File lib/prefab/config_loader.rb, line 41
def get_api_deltas
  deltas = Prefab::ConfigDeltas.new
  @api_config.each_value do |config_value|
    deltas.deltas << config_value
  end
  deltas
end
rm(key) click to toggle source
# File lib/prefab/config_loader.rb, line 37
def rm(key)
  @api_config.delete key
end
set(delta) click to toggle source
# File lib/prefab/config_loader.rb, line 23
def set(delta)
  # don't overwrite newer values
  if @api_config[delta.key] && @api_config[delta.key].id > delta.id
    return
  end

  if delta.value.nil?
    @api_config.delete(delta.key)
  else
    @api_config[delta.key] = delta
  end
  @highwater_mark = [delta.id, @highwater_mark].max
end

Private Instance Methods

load(filename) click to toggle source
# File lib/prefab/config_loader.rb, line 72
def load(filename)
  if File.exist? filename
    @base_client.log_internal Logger::INFO, "Load #{filename}"
    YAML.load_file(filename)
  else
    @base_client.log_internal Logger::INFO, "No file #{filename}"
    {}
  end
end
load_classpath_config() click to toggle source
# File lib/prefab/config_loader.rb, line 51
def load_classpath_config
  classpath_dir = ENV['PREFAB_CONFIG_CLASSPATH_DIR'] || "."
  load_glob(File.join(classpath_dir, ".prefab*config.yaml"))
end
load_glob(glob) click to toggle source
# File lib/prefab/config_loader.rb, line 61
def load_glob(glob)
  rtn = {}
  Dir.glob(glob).each do |file|
    yaml = load(file)
    yaml.each do |k, v|
      rtn[k] = Prefab::ConfigValue.new(value_from(v))
    end
  end
  rtn
end
load_local_overrides() click to toggle source
# File lib/prefab/config_loader.rb, line 56
def load_local_overrides
  override_dir = ENV['PREFAB_CONFIG_OVERRIDE_DIR'] || Dir.home
  load_glob(File.join(override_dir, ".prefab*config.yaml"))
end
value_from(raw) click to toggle source
# File lib/prefab/config_loader.rb, line 82
def value_from(raw)
  case raw
  when String
    { string: raw }
  when Integer
    { int: raw }
  when TrueClass, FalseClass
    { bool: raw }
  when Float
    { double: raw }
  end
end