Class: Fig::Environment
- Inherits:
-
Object
- Object
- Fig::Environment
- Defined in:
- lib/fig/environment.rb
Overview
This class manages the program’s state, including the value of all environment variables, and which packages have already been applied.
Constant Summary collapse
- DEFAULT_VERSION_NAME =
'current'
Instance Method Summary collapse
-
#[](name) ⇒ Object
Returns the value of an envirionment variable.
-
#add_retrieve(name, path) ⇒ Object
Indicates that the values from a particular envrionment variable path.
- #apply_config(package, config_name, backtrace) ⇒ Object
- #apply_config_statement(base_package, statement, backtrace) ⇒ Object
- #direct_retrieve(package_name, source_path, target_path) ⇒ Object
- #execute_config(base_package, package_name, config_name, version_name, args) ⇒ Object
- #execute_shell(command) ⇒ Object
- #include_config(base_package, package_name, config_name, version_name, overrides, backtrace) ⇒ Object
-
#initialize(os, repository, variables, retriever) ⇒ Environment
constructor
A new instance of Environment.
- #register_package(package) ⇒ Object
Constructor Details
#initialize(os, repository, variables, retriever) ⇒ Environment
Returns a new instance of Environment.
17 18 19 20 21 22 23 24 25 |
# File 'lib/fig/environment.rb', line 17 def initialize(os, repository, variables, retriever) @os = os @repository = repository @variables = variables @retrieve_vars = {} @packages = {} @applied_configs = {} @retriever = retriever end |
Instance Method Details
#[](name) ⇒ Object
Returns the value of an envirionment variable
28 29 30 |
# File 'lib/fig/environment.rb', line 28 def [](name) @variables[name] end |
#add_retrieve(name, path) ⇒ Object
Indicates that the values from a particular envrionment variable path
34 35 36 |
# File 'lib/fig/environment.rb', line 34 def add_retrieve(name, path) @retrieve_vars[name] = path end |
#apply_config(package, config_name, backtrace) ⇒ Object
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/fig/environment.rb', line 47 def apply_config(package, config_name, backtrace) if (@applied_configs[package.package_name] ||= []).member?(config_name) return end new_backtrace = backtrace config = package[config_name] config.statements.each { |stmt| apply_config_statement(package, stmt, new_backtrace) } @applied_configs[package.package_name] << config_name end |
#apply_config_statement(base_package, statement, backtrace) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/fig/environment.rb', line 77 def apply_config_statement(base_package, statement, backtrace) case statement when Package::Path append_variable(base_package, statement.name, statement.value) when Package::Set set_variable(base_package, statement.name, statement.value) when Package::Include include_config(base_package, statement.package_name, statement.config_name, statement.version_name, statement.overrides, backtrace) when Package::Command # ignore else fail "Unexpected statement: #{statement}" end end |
#direct_retrieve(package_name, source_path, target_path) ⇒ Object
108 109 110 111 112 |
# File 'lib/fig/environment.rb', line 108 def direct_retrieve(package_name, source_path, target_path) package = lookup_package(package_name, nil, nil) FileUtils.mkdir_p(target_path) FileUtils.cp_r(File.join(package.directory, source_path, '.'), target_path) end |
#execute_config(base_package, package_name, config_name, version_name, args) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/fig/environment.rb', line 64 def execute_config(base_package, package_name, config_name, version_name, args) package = lookup_package(package_name || base_package.package_name, version_name, Backtrace.new(nil, package_name, version_name, config_name)) result = nil commands = package[config_name || 'default'].commands with_environment do # TODO nil check commands.each do |command| result = yield ("#{command.command} #{args.join(' ')}").gsub('@', package.directory).split(' ') end end result end |
#execute_shell(command) ⇒ Object
58 59 60 61 62 |
# File 'lib/fig/environment.rb', line 58 def execute_shell(command) with_environment do yield command.map{|arg| (arg)} end end |
#include_config(base_package, package_name, config_name, version_name, overrides, backtrace) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/fig/environment.rb', line 92 def include_config(base_package, package_name, config_name, version_name, overrides, backtrace) # Check to see if this include has been overridden. if backtrace override = backtrace.get_override(package_name || base_package.package_name) if override version_name = override end end new_backtrace = Backtrace.new(backtrace, package_name, version_name, config_name) overrides.each do |override| new_backtrace.add_override(override.package_name, override.version_name) end package = lookup_package(package_name || base_package.package_name, version_name, new_backtrace) apply_config(package, config_name || 'default', new_backtrace) end |
#register_package(package) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/fig/environment.rb', line 38 def register_package(package) name = package.package_name if @packages[name] Logging.fatal %Q<There is already a package with the name "#{name}".> raise RepositoryError.new end @packages[name] = package end |