Sha256: 68ef364b79befc489876d60874da1cb2b87f07905e9c6887bd128803e47d7ffe

Contents?: true

Size: 1.8 KB

Versions: 3

Compression:

Stored size: 1.8 KB

Contents

require 'yaml'
module Prefab
  class ConfigLoader
    def initialize(base_client)
      @base_client = base_client
      @classpath_config = load_classpath_config
      @local_overrides = load_local_overrides
      @api_config = Concurrent::Map.new
    end

    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

    def set(delta)
      if delta.value.nil?
        @api_config.delete(delta.key)
      else
        @api_config[delta.key] = delta
      end
    end

    def rm(key)
      @api_config.delete key
    end

    def get_api_deltas
      deltas = Prefab::ConfigDeltas.new
      @api_config.each_value do |config_value|
        deltas.deltas << config_value
      end
      deltas
    end

    private

    def load_classpath_config
      classpath_dir = ENV['PREFAB_CONFIG_CLASSPATH_DIR'] || ""
      load_glob(File.join(classpath_dir, ".prefab*config.yaml"))
    end

    def load_local_overrides
      override_dir = ENV['PREFAB_CONFIG_OVERRIDE_DIR'] || Dir.home
      load_glob(File.join(override_dir, ".prefab*config.yaml"))
    end

    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

    def load(filename)
      if File.exist? filename
        YAML.load_file(filename)
      else
        @base_client.logger.info "No file #{filename}"
        {}
      end
    end

    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
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
prefab-cloud-ruby-0.0.13 lib/prefab/config_loader.rb
prefab-cloud-ruby-0.0.12 lib/prefab/config_loader.rb
prefab-cloud-ruby-0.0.11 lib/prefab/config_loader.rb