System Engineer
June 22, 2022

Конфигурация для проекта на ruby

Один из возможных вариантов для подгрузки файла конфигурации проекта на ruby. Если вы знаете как можно сделать еще лучше, напишите мне на почту или в телеграм. Цель данного поста - обмен опыта.

module Example
  DefaultConfig = Struct.new(:file, :settings) do
    def initialize
      self.file = '.examples.yaml'
      begin
        self.settings = YAML.safe_load(ERB.new(File.read(file)).result)
      rescue => e
        STDERR.puts "Error when load YAML config: #{e}"
        raise "Can't load default settings"
      end
    end
  end
  def self.configure
    @config ||= DefaultConfig.new.settings
    yield(@config) if block_given?
    @config
  end
  def self.config
    @config || configure
  end
  def self.reset
    @config = nil
  end
end

Конфигурацию можно менять на лету следующим способом

    Example.configure do |config|
      config[:date_now] = DateTime.now()
    end

Для доступа к любому значению в конфигурации можно использовать метод dig

Example.config.dig 'config','path'