Class: Bosh::Template::EvaluationContext
- Inherits:
-
Object
- Object
- Bosh::Template::EvaluationContext
- 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
-
#index ⇒ Integer
readonly
Template instance index.
-
#name ⇒ String
readonly
Template name.
-
#properties ⇒ Hash
readonly
Template properties.
-
#raw_properties ⇒ Hash
readonly
Raw template properties (no openstruct).
-
#spec ⇒ Hash
readonly
Template spec.
Instance Method Summary collapse
-
#get_binding ⇒ Binding
Template binding.
-
#if_p(*names) {|Object| ... } ⇒ Object
Run a block of code if all given properties are defined.
-
#initialize(spec) ⇒ EvaluationContext
constructor
A new instance of EvaluationContext.
-
#openstruct(object) ⇒ Object
Object representation where all hashes are unrolled into OpenStruct objects.
-
#p(*args) ⇒ Object
Property lookup helper.
Methods included from PropertyHelper
#copy_property, #lookup_property
Constructor Details
#initialize(spec) ⇒ EvaluationContext
Returns a new instance of EvaluationContext.
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
#index ⇒ Integer (readonly)
Returns Template instance index.
16 17 18 |
# File 'lib/bosh/template/evaluation_context.rb', line 16 def index @index end |
#name ⇒ String (readonly)
Returns Template name.
13 14 15 |
# File 'lib/bosh/template/evaluation_context.rb', line 13 def name @name end |
#properties ⇒ Hash (readonly)
Returns Template properties.
19 20 21 |
# File 'lib/bosh/template/evaluation_context.rb', line 19 def properties @properties end |
#raw_properties ⇒ Hash (readonly)
Returns Raw template properties (no openstruct).
22 23 24 |
# File 'lib/bosh/template/evaluation_context.rb', line 22 def raw_properties @raw_properties end |
#spec ⇒ Hash (readonly)
Returns Template spec.
25 26 27 |
# File 'lib/bosh/template/evaluation_context.rb', line 25 def spec @spec end |
Instance Method Details
#get_binding ⇒ Binding
Returns 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
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.
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
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 |