class CrConfig::Providers::ProfileFileConfigProvider

Overview

Handles and loads up an entire directory of configuration files

This provider is best used when there is a single "base" configuration file that has all configurations defined, and then other configuration files can be layered on top of that one, providing overrides based on the environment the application runs in.

This provider has lots of configuration switches that can be used when loading files from a directory

# Assume directory `configs` exists and contains `config-base.yaml`, `config-test.yaml`, `config-local.yaml`, and `config-prod.yaml`

CrConfig::Providers::ProfileFileConfigProvirer.new
  .folder("configs")
  .separator("-")
  .base_file("config.yaml")
  .profiles do
    # Here is where a list of "profiles" of configurations can be provided.
    # These can be obtained from anywhere that's appropriate (obviously before
    # configuration has completed being read in), such as an environment variable.
    ["base", "test", "prod"]
  end

The above provider, when its #populate method is called, will read in and load config-base.yaml, config-test.yaml, and config-prod.yaml, in that order, leaving the production configurations as having the highest precedence. config-local.yaml won't be read, and a file named config.yaml doesn't need to exist.

Defined in:

cr-config/abstract_provider.cr

Instance Method Summary

Instance methods inherited from class CrConfig::Providers::AbstractProvider

populate(builder : AbstractBuilder) populate

Instance Method Detail

def base_file(base_file : String) #

Base name for the configuration files


[View source]
def folder(folder_path : String) #

Base folder path to read config files from, relative from where the server is running from


[View source]
def populate(builder : AbstractBuilder) #

Will read in and and load files, used the SimpleFileProvider to perform the actual file reading, configuration files under "#{@filder_path}/#{file_name}", for every file name constructed from the @base_file and list of #profiles provided.

Given base file name config.json, a list of profiles ["prof1"], and separator of _, this will attempt to load all files in ["config_prof1.json"] under the provided folder_path. The profiles and separator are inserted where the file extension is found in the base file name.


[View source]
def profiles(&block : -> Array(String)) #

Block to be run when determining which "profiles" to load


[View source]
def separator(profile_separator : String) #

Seperator to use when constructing the different profile versions of the config file. See #populate for details on file construction


[View source]