Module: Gonfic

Defined in:
lib/gonfic.rb,
lib/gonfic/config.rb,
lib/gonfic/version.rb,
lib/gonfic/directories.rb,
lib/gonfic/env_extractor.rb

Overview

external interface to creating a Config with data loaded from files

Defined Under Namespace

Classes: Config, Directories, EnvExtractor

Constant Summary collapse

YAML_FILE_LOADER =
->(filename){ YAML.safe_load(File.read(filename)) }
VERSION =
'0.6.2'.freeze

Class Method Summary collapse

Class Method Details

.configs_from_defaults(defaults:) ⇒ Object



25
26
27
# File 'lib/gonfic.rb', line 25

def self.configs_from_defaults(defaults:)
	[Config.new(defaults)]
end

.configs_from_env(env_variable_prefix:, defaults:) ⇒ Object



47
48
49
50
51
# File 'lib/gonfic.rb', line 47

def self.configs_from_env(env_variable_prefix:, defaults:)
	return [] unless env_variable_prefix

	[EnvExtractor.extract_variables_from_env(prefix: env_variable_prefix, defaults: defaults)]
end

.configs_from_files(filename:, file_loader:, directories:) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/gonfic.rb', line 29

def self.configs_from_files(filename:, file_loader:, directories:)
	return [] unless filename

	directories.map do |directory|
		filepath = File.expand_path(File.join(directory, filename))
		load_configuration_file(filepath, file_loader)
	end
end

.load_configuration_file(filename, file_loader) ⇒ Object



38
39
40
41
42
43
44
45
# File 'lib/gonfic.rb', line 38

def self.load_configuration_file(filename, file_loader)
	return {} unless File.exist?(filename)

	file_loader.call(filename)
rescue StandardError => e
	Hashie.logger.error(e)
	{}
end

.new(defaults: {}, filename: nil, file_loader: YAML_FILE_LOADER, directories: Directories.home_then_here, env_variable_prefix: EnvExtractor.env_prefix_from_filename(filename)) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/gonfic.rb', line 12

def self.new(
	defaults: {},
	filename: nil, file_loader: YAML_FILE_LOADER, directories: Directories.home_then_here,
	env_variable_prefix: EnvExtractor.env_prefix_from_filename(filename)
)
	configs =
		configs_from_defaults(defaults: defaults) +
		configs_from_files(filename: filename, file_loader: file_loader, directories: directories) +
		configs_from_env(env_variable_prefix: env_variable_prefix, defaults: defaults)

	configs.reduce(:merge!)
end