Class: Bosh::Template::EvaluationContext

Inherits:
Object
  • Object
show all
Includes:
PropertyHelper
Defined in:
lib/bosh/template/evaluation_context.rb

Overview

Helper class to evaluate templates. Used by Director, CLI and Agent.

Defined Under Namespace

Classes: ActiveElseBlock, InactiveElseBlock

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from PropertyHelper

#copy_property, #lookup_property

Constructor Details

#initialize(spec) ⇒ EvaluationContext

Returns a new instance of EvaluationContext.

Parameters:

  • spec (Hash)

    Template spec



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/bosh/template/evaluation_context.rb', line 28

def initialize(spec)
  unless spec.is_a?(Hash)
    raise EvaluationFailed,
          'Invalid spec provided for template evaluation context, ' +
              "Hash expected, #{spec.class} given"
  end

  if spec['job'].is_a?(Hash)
    @name = spec['job']['name']
  else
    @name = nil
  end

  @index = spec['index']
  @spec = openstruct(spec)
  @raw_properties = spec['properties'] || {}
  @properties = openstruct(@raw_properties)
end

Instance Attribute Details

#indexInteger (readonly)

Returns Template instance index.

Returns:

  • (Integer)

    Template instance index



16
17
18
# File 'lib/bosh/template/evaluation_context.rb', line 16

def index
  @index
end

#nameString (readonly)

Returns Template name.

Returns:

  • (String)

    Template name



13
14
15
# File 'lib/bosh/template/evaluation_context.rb', line 13

def name
  @name
end

#propertiesHash (readonly)

Returns Template properties.

Returns:

  • (Hash)

    Template properties



19
20
21
# File 'lib/bosh/template/evaluation_context.rb', line 19

def properties
  @properties
end

#raw_propertiesHash (readonly)

Returns Raw template properties (no openstruct).

Returns:

  • (Hash)

    Raw template properties (no openstruct)



22
23
24
# File 'lib/bosh/template/evaluation_context.rb', line 22

def raw_properties
  @raw_properties
end

#specHash (readonly)

Returns Template spec.

Returns:

  • (Hash)

    Template spec



25
26
27
# File 'lib/bosh/template/evaluation_context.rb', line 25

def spec
  @spec
end

Instance Method Details

#get_bindingBinding

Returns Template binding.

Returns:

  • (Binding)

    Template binding



48
49
50
# File 'lib/bosh/template/evaluation_context.rb', line 48

def get_binding
  binding.taint
end

#if_p(*names) {|Object| ... } ⇒ Object

Run a block of code if all given properties are defined

Parameters:

  • names (Array<String>)

    Property names

Yields:

  • (Object)

    property values



94
95
96
97
98
99
100
101
102
103
# File 'lib/bosh/template/evaluation_context.rb', line 94

def if_p(*names)
  values = names.map do |name|
    value = lookup_property(@raw_properties, name)
    return ActiveElseBlock.new(self) if value.nil?
    value
  end

  yield *values
  InactiveElseBlock.new
end

#openstruct(object) ⇒ Object

Returns Object representation where all hashes are unrolled into OpenStruct objects. This exists mostly for backward compatibility, as it doesn’t provide good error reporting.

Returns:

  • (Object)

    Object representation where all hashes are unrolled into OpenStruct objects. This exists mostly for backward compatibility, as it doesn’t provide good error reporting.



108
109
110
111
112
113
114
115
116
117
118
# File 'lib/bosh/template/evaluation_context.rb', line 108

def openstruct(object)
  case object
    when Hash
      mapped = object.inject({}) { |h, (k, v)| h[k] = openstruct(v); h }
      OpenStruct.new(mapped)
    when Array
      object.map { |item| openstruct(item) }
    else
      object
  end
end

#p(name, default_value) ⇒ Object #p(names, default_value) ⇒ Object #p(names) ⇒ Object #p(name) ⇒ Object

Property lookup helper

Overloads:

  • #p(name, default_value) ⇒ Object

    Returns property value or default value if property not set

    Parameters:

    • name (String)

      Property name

    • default_value (Object)

      Default value

    Returns:

    • (Object)

      Property value

  • #p(names, default_value) ⇒ Object

    Returns first property from the list that is set or default value if none of them are set

    Parameters:

    • names (Array<String>)

      Property names

    • default_value (Object)

      Default value

    Returns:

    • (Object)

      Property value

  • #p(names) ⇒ Object

    Looks up first property from the list that is set, raises an error if none of them are set.

    Parameters:

    • names (Array<String>)

      Property names

    Returns:

    • (Object)

      Property value

    Raises:

    • (Bosh::Common::UnknownProperty)
  • #p(name) ⇒ Object

    Looks up property and raises an error if it’s not set

    Parameters:

    • name (String)

      Property name

    Returns:

    • (Object)

      Property value

    Raises:

    • (Bosh::Common::UnknownProperty)

Raises:



79
80
81
82
83
84
85
86
87
88
89
# File 'lib/bosh/template/evaluation_context.rb', line 79

def p(*args)
  names = Array(args[0])

  names.each do |name|
    result = lookup_property(@raw_properties, name)
    return result unless result.nil?
  end

  return args[1] if args.length == 2
  raise UnknownProperty.new(names)
end