Class: Bosh::Common::TemplateEvaluationContext

Inherits:
Object
  • Object
show all
Includes:
PropertyHelper
Defined in:
lib/common/properties/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) ⇒ TemplateEvaluationContext

Returns a new instance of TemplateEvaluationContext.

Parameters:

  • spec (Hash)

    Template spec



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/common/properties/template_evaluation_context.rb', line 24

def initialize(spec)
  unless spec.is_a?(Hash)
    raise TemplateEvaluationFailed,
          "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



12
13
14
# File 'lib/common/properties/template_evaluation_context.rb', line 12

def index
  @index
end

#nameString (readonly)

Returns Template name.

Returns:

  • (String)

    Template name



9
10
11
# File 'lib/common/properties/template_evaluation_context.rb', line 9

def name
  @name
end

#propertiesHash (readonly)

Returns Template properties.

Returns:

  • (Hash)

    Template properties



15
16
17
# File 'lib/common/properties/template_evaluation_context.rb', line 15

def properties
  @properties
end

#raw_propertiesHash (readonly)

Returns Raw template properties (no openstruct).

Returns:

  • (Hash)

    Raw template properties (no openstruct)



18
19
20
# File 'lib/common/properties/template_evaluation_context.rb', line 18

def raw_properties
  @raw_properties
end

#specHash (readonly)

Returns Template spec.

Returns:

  • (Hash)

    Template spec



21
22
23
# File 'lib/common/properties/template_evaluation_context.rb', line 21

def spec
  @spec
end

Instance Method Details

#get_bindingBinding

Returns Template binding.

Returns:

  • (Binding)

    Template binding



44
45
46
# File 'lib/common/properties/template_evaluation_context.rb', line 44

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



90
91
92
93
94
95
96
97
98
99
# File 'lib/common/properties/template_evaluation_context.rb', line 90

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.



104
105
106
107
108
109
110
111
112
113
114
# File 'lib/common/properties/template_evaluation_context.rb', line 104

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:

  • #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:

Raises:



75
76
77
78
79
80
81
82
83
84
85
# File 'lib/common/properties/template_evaluation_context.rb', line 75

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