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
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)
12 13 14 |
# File 'lib/common/properties/template_evaluation_context.rb', line 12 def index @index end |
#name ⇒ String (readonly)
9 10 11 |
# File 'lib/common/properties/template_evaluation_context.rb', line 9 def name @name end |
#properties ⇒ Hash (readonly)
15 16 17 |
# File 'lib/common/properties/template_evaluation_context.rb', line 15 def properties @properties end |
#raw_properties ⇒ Hash (readonly)
18 19 20 |
# File 'lib/common/properties/template_evaluation_context.rb', line 18 def raw_properties @raw_properties end |
#spec ⇒ Hash (readonly)
21 22 23 |
# File 'lib/common/properties/template_evaluation_context.rb', line 21 def spec @spec end |
Instance Method Details
#get_binding ⇒ 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
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 |