Class: Fig::Environment

Inherits:
Object
  • Object
show all
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

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 expand_arg("#{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| expand_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