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



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)



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

def index
  @index
end

#nameString (readonly)



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

def name
  @name
end

#propertiesHash (readonly)



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

def properties
  @properties
end

#raw_propertiesHash (readonly)



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

def raw_properties
  @raw_properties
end

#specHash (readonly)



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

def spec
  @spec
end

Instance Method Details

#get_bindingBinding



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

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



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

  • #p(names, default_value) ⇒ Object

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

  • #p(names) ⇒ Object

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

  • #p(name) ⇒ Object

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

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