Class: Orchparty::Transformations::Variable

Inherits:
Object
  • Object
show all
Defined in:
lib/orchparty/transformations/variable.rb

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Variable

Returns a new instance of Variable.



5
6
7
# File 'lib/orchparty/transformations/variable.rb', line 5

def initialize(opts = {})
  @force_variable_definition = opts[:force_variable_definition]
end

Instance Method Details

#build_context(variables, service) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'lib/orchparty/transformations/variable.rb', line 46

def build_context(variables, service)
  if service
    variables = variables.merge(service._variables)
    variables[:service] = service.merge(service._variables)
  end
  context = Context.new(variables)
  context._force_variable_definition = @force_variable_definition
  context
end

#eval_value(context, value) ⇒ Object



42
43
44
# File 'lib/orchparty/transformations/variable.rb', line 42

def eval_value(context, value)
  context.instance_exec(&value)
end

#resolve(app_variables, subject, service) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/orchparty/transformations/variable.rb', line 23

def resolve(app_variables, subject, service)
  context = build_context(app_variables, service)
  subject.deep_transform_values! do |v|
    if v.respond_to?(:call)
      eval_value(context, v) 
    elsif v.is_a? Array
      v.map do |v|
        if v.respond_to?(:call)
          eval_value(context, v) 
        else
          v
        end
      end
    else
      v
    end
  end
end

#transform(ast) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/orchparty/transformations/variable.rb', line 9

def transform(ast)
  ast.applications.each do |_, application|
    app_variables = application._variables || {}
    app_variables = app_variables.merge({application: application.merge(application._variables)})
    application.services = application.services.each do |_, service|
      resolve(app_variables, service, service)
    end
    application.volumes = application.volumes.each do |_, volume|
      resolve(app_variables, volume, nil) if volume
    end
  end
  ast
end