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



33
34
35
# File 'lib/fig/environment.rb', line 33

def add_retrieve(name, path)
  @retrieve_vars[name] = path
end

#apply_config(package, config_name, backtrace) ⇒ Object



46
47
48
49
50
51
52
53
54
55
# File 'lib/fig/environment.rb', line 46

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



85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/fig/environment.rb', line 85

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



116
117
118
119
120
# File 'lib/fig/environment.rb', line 116

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



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/fig/environment.rb', line 63

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|
      argument =
        expand_command_line_argument(
          "#{command.command} #{args.join(' ')}"
        )

      result = yield expand_path(argument, package).split(' ')
    end
  end
  result
end

#execute_shell(command) ⇒ Object



57
58
59
60
61
# File 'lib/fig/environment.rb', line 57

def execute_shell(command)
  with_environment do
    yield command.map{|arg| expand_command_line_argument(arg)}
  end
end

#include_config(base_package, package_name, config_name, version_name, overrides, backtrace) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/fig/environment.rb', line 100

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



37
38
39
40
41
42
43
44
# File 'lib/fig/environment.rb', line 37

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