class StackedConfig::Orchestrator

Attributes

command_line_layer[R]
env_layer[R]
executable_gem_layer[R]
global_layer[R]
project_layer[R]
provided_config_file_layer[R]
system_layer[R]
user_layer[R]

Public Class Methods

default_config_file_base_name() click to toggle source
# File lib/stacked_config/orchestrator.rb, line 18
def self.default_config_file_base_name
  File.basename($PROGRAM_NAME).gsub /\.[^\.]+$/, ''
end
new() click to toggle source
Calls superclass method
# File lib/stacked_config/orchestrator.rb, line 9
def initialize
  super
  self.merge_policy = SuperStack::MergePolicies::FullMergePolicy
  setup_layers
  default_name = self.class.default_config_file_base_name
  describes_application config_file_base_name: default_name, app_name: default_name
end

Public Instance Methods

include_env_layer(filter = nil, priority = 70) click to toggle source
# File lib/stacked_config/orchestrator.rb, line 29
def include_env_layer(filter = nil, priority = 70)
  @env_layer = StackedConfig::Layers::EnvLayer.new filter
  env_layer.name = 'Environment variables level'
  env_layer.priority = priority
  self << env_layer
end
include_gem_layer_for(gem_name, priority = 30) click to toggle source
# File lib/stacked_config/orchestrator.rb, line 36
def include_gem_layer_for(gem_name, priority = 30)
  gem_layer  = StackedConfig::Layers::GemLayer.new
  gem_layer.gem_name = gem_name
  raise "No config found in gem #{gem_name}" if gem_layer.file_name.nil?
  gem_layer.name = "#{gem_name} Gem configuration level"
  gem_layer.priority = priority
  self << gem_layer
end
include_project_layer(file_or_directory, project_file_basename=nil, priority = 65) click to toggle source
# File lib/stacked_config/orchestrator.rb, line 22
def include_project_layer(file_or_directory, project_file_basename=nil, priority = 65)
  @project_layer = StackedConfig::Layers::ProjectLayer.new file_or_directory, project_file_basename
  project_layer.name = 'Project level'
  project_layer.priority = priority
  self << project_layer
end

Private Instance Methods

setup_layer(class_type, name, priority) click to toggle source
# File lib/stacked_config/orchestrator.rb, line 73
def setup_layer(class_type, name, priority)
  layer = class_type.new
  layer.name = name
  layer.priority = priority
  self << layer
  layer
end
setup_layers() click to toggle source
# File lib/stacked_config/orchestrator.rb, line 47
def setup_layers
  # The command line level.
  @command_line_layer = setup_layer StackedConfig::Layers::CommandLineLayer, 'Command line configuration level', 100

  # The system level
  @system_layer = setup_layer StackedConfig::Layers::SystemLayer, 'System-wide configuration level', 10

  # The executable gem level
  @executable_gem_layer = setup_layer StackedConfig::Layers::ExecutableGemLayer, 'Gem associated to the executable running configuration level', 20

  # The global level
  @global_layer = setup_layer StackedConfig::Layers::GlobalLayer, 'Global configuration level', 40

  # The user level
  @user_layer = setup_layer StackedConfig::Layers::UserLayer, 'User configuration level', 50

  # The specifically provided config file level
  @provided_config_file_layer = setup_layer StackedConfig::Layers::ProvidedConfigFileLayer, 'Specific config file configuration level', 60

  # The layer to write something
  override_layer = setup_layer SuperStack::Layer, 'Overridden configuration level', 1000
  self.write_layer = override_layer

  reload_layers
end