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



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

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)

  @links = spec['links'] || {}
end

Instance Attribute Details

#indexInteger (readonly)

Returns Template instance index.

Returns:

  • (Integer)

    Template instance index



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

def index
  @index
end

#nameString (readonly)

Returns Template name.

Returns:

  • (String)

    Template name



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

def name
  @name
end

#propertiesHash (readonly)

Returns Template properties.

Returns:

  • (Hash)

    Template properties



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

def properties
  @properties
end

#raw_propertiesHash (readonly)

Returns Raw template properties (no openstruct).

Returns:

  • (Hash)

    Raw template properties (no openstruct)



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

def raw_properties
  @raw_properties
end

#specHash (readonly)

Returns Template spec.

Returns:

  • (Hash)

    Template spec



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

def spec
  @spec
end

Instance Method Details

#get_bindingBinding

Returns Template binding.

Returns:

  • (Binding)

    Template binding



51
52
53
# File 'lib/bosh/template/evaluation_context.rb', line 51

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



104
105
106
107
108
109
110
111
112
113
# File 'lib/bosh/template/evaluation_context.rb', line 104

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

Raises:



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

def link(name)
  result = lookup_property(@links, name)
  return result unless result.nil?

  raise UnknownLink.new(name)
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.



118
119
120
121
122
123
124
125
126
127
128
# File 'lib/bosh/template/evaluation_context.rb', line 118

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:



82
83
84
85
86
87
88
89
90
91
92
# File 'lib/bosh/template/evaluation_context.rb', line 82

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