Class: Bosh::Common::TemplateEvaluationContext
- Inherits:
-
Object
- Object
- Bosh::Common::TemplateEvaluationContext
- 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
-
#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) ⇒ TemplateEvaluationContext
constructor
A new instance of TemplateEvaluationContext.
-
#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) ⇒ TemplateEvaluationContext
Returns a new instance of 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
#index ⇒ Integer (readonly)
Returns Template instance index.
12 13 14 |
# File 'lib/common/properties/template_evaluation_context.rb', line 12 def index @index end |
#name ⇒ String (readonly)
Returns Template name.
9 10 11 |
# File 'lib/common/properties/template_evaluation_context.rb', line 9 def name @name end |
#properties ⇒ Hash (readonly)
Returns Template properties.
15 16 17 |
# File 'lib/common/properties/template_evaluation_context.rb', line 15 def properties @properties end |
#raw_properties ⇒ Hash (readonly)
Returns Raw template properties (no openstruct).
18 19 20 |
# File 'lib/common/properties/template_evaluation_context.rb', line 18 def raw_properties @raw_properties end |
#spec ⇒ Hash (readonly)
Returns Template spec.
21 22 23 |
# File 'lib/common/properties/template_evaluation_context.rb', line 21 def spec @spec end |
Instance Method Details
#get_binding ⇒ Binding
Returns 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
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.
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
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 |