Sha256: 01159a19e79ae59710e8277f6b6756f3b3ca6bfb4fe20fd6614cffb35a4f2a8e

Contents?: true

Size: 1.46 KB

Versions: 3

Compression:

Stored size: 1.46 KB

Contents

require 'yaml'

module Forger
  class Setting
    def initialize(check_project=true)
      @check_project = check_project
    end

    # data contains the settings.yml config.  The order or precedence for settings
    # is the project lono/settings.yml and then the ~/.lono/settings.yml.
    @@data = nil
    def data
      return @@data if @@data

      if @check_project && !File.exist?(project_settings_path)
        puts "ERROR: No settings file at #{project_settings_path}.  Are you sure you are in a forger project?".color(:red)
        exit 1
      end

      all_envs = load_file(project_settings_path)
      all_envs = merge_base(all_envs)
      @@data = all_envs[Forger.env] || all_envs["base"] || {}
      @@data
    end

  private
    def load_file(path)
      return Hash.new({}) unless File.exist?(path)

      content = RenderMePretty.result(path)
      data = YAML.load(content)
      # If key is is accidentally set to nil it screws up the merge_base later.
      # So ensure that all keys with nil value are set to {}
      data.each do |env, _setting|
        data[env] ||= {}
      end
      data
    end

    # automatically add base settings to the rest of the environments
    def merge_base(all_envs)
      base = all_envs["base"] || {}
      all_envs.each do |env, settings|
        all_envs[env] = base.merge(settings) unless env == "base"
      end
      all_envs
    end

    def project_settings_path
      "#{Forger.root}/config/settings.yml"
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
forger-3.0.2 lib/forger/setting.rb
forger-3.0.1 lib/forger/setting.rb
forger-3.0.0 lib/forger/setting.rb