bosh-template 1.3202.0 → 1.3213.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b1ad3d84cc1e4053e22cc43929b254b3b05913f
4
- data.tar.gz: eba2aceec64d8af1737997f960dff028e75a7383
3
+ metadata.gz: 8a2e0f6e8214ef6fe94b23e3dccc8de6f75b926e
4
+ data.tar.gz: 2ccf9bbb42af66e7daed05c5ff4cd49a4bc8021a
5
5
  SHA512:
6
- metadata.gz: 794f91934905f8a93991152875bdf39200b1f588b522802ef9be191654d3d88d9029d272075cc20b94336c8588e5ec1a4c4fa0622124cf188b5e0c69ab95a8c5
7
- data.tar.gz: 929ae1f132e637c873b65b09112aa1818d9da26aeba494a20782dcdb58e4098f8ad51246b214ffefdf594cd2959fe3fb45d415b5ec343be3d187df38250ff33a
6
+ metadata.gz: bcdf735a7df58356a46612b2c5de56b9341d789b67e5b511432cb5f6e7f1062d7b49647a288316d7aee044cd0a28016841b5522d9c1a806bd91307a059bb2052
7
+ data.tar.gz: a922bdade2b486692709411d0188adf71c45edd576dc26367b2d43f8c0889f8cfb0a0fec36dc0a880ddcfd2750963dd9883f49d17031b500ae0bec50e402a285
@@ -3,6 +3,8 @@ require 'bosh/template/evaluation_failed'
3
3
  require 'bosh/template/unknown_property'
4
4
  require 'bosh/template/unknown_link'
5
5
  require 'bosh/template/property_helper'
6
+ require 'bosh/template/evaluation_link_instance'
7
+ require 'bosh/template/evaluation_link'
6
8
 
7
9
  module Bosh
8
10
  module Template
@@ -93,8 +95,14 @@ module Bosh
93
95
 
94
96
  def link(name)
95
97
  result = lookup_property(@links, name)
96
- return result unless result.nil?
98
+ raise UnknownLink.new(name) if result.nil?
97
99
 
100
+ if result.has_key?("instances")
101
+ instance_array = result["instances"].map do |link_spec|
102
+ EvaluationLinkInstance.new(link_spec["name"], link_spec["index"], link_spec["id"], link_spec["az"], link_spec["address"], link_spec["properties"])
103
+ end
104
+ return EvaluationLink.new(instance_array, result["properties"])
105
+ end
98
106
  raise UnknownLink.new(name)
99
107
  end
100
108
 
@@ -112,6 +120,23 @@ module Bosh
112
120
  InactiveElseBlock.new
113
121
  end
114
122
 
123
+ # Run a block of code if the link given exists
124
+ # @param [String] name of the link
125
+ # @yield [Object] link, which is an array of instances
126
+ def if_link(name)
127
+ link_found = lookup_property(@links, name)
128
+ if link_found.nil? || !link_found.has_key?("instances")
129
+ return ActiveElseBlock.new(self)
130
+ else
131
+ instance_array = link_found["instances"].map do |link_spec|
132
+ EvaluationLinkInstance.new(link_spec["name"], link_spec["index"], link_spec["id"], link_spec["az"], link_spec["address"], link_spec["properties"])
133
+ end
134
+
135
+ yield EvaluationLink.new(instance_array, link_found["properties"])
136
+ InactiveElseBlock.new
137
+ end
138
+ end
139
+
115
140
  # @return [Object] Object representation where all hashes are unrolled
116
141
  # into OpenStruct objects. This exists mostly for backward
117
142
  # compatibility, as it doesn't provide good error reporting.
@@ -139,6 +164,10 @@ module Bosh
139
164
  def else_if_p(*names, &block)
140
165
  @context.if_p(*names, &block)
141
166
  end
167
+
168
+ def else_if_link(name, &block)
169
+ @context.if_link(name, &block)
170
+ end
142
171
  end
143
172
 
144
173
  class InactiveElseBlock
@@ -148,6 +177,10 @@ module Bosh
148
177
  def else_if_p(*names)
149
178
  InactiveElseBlock.new
150
179
  end
180
+
181
+ def else_if_link(name)
182
+ InactiveElseBlock.new
183
+ end
151
184
  end
152
185
  end
153
186
  end
@@ -0,0 +1,38 @@
1
+ module Bosh
2
+ module Template
3
+ class EvaluationLink
4
+ include PropertyHelper
5
+
6
+ attr_reader :instances
7
+ attr_reader :properties
8
+
9
+ def initialize(instances, properties)
10
+ @instances = instances
11
+ @properties = properties
12
+ end
13
+
14
+ def p(*args)
15
+ names = Array(args[0])
16
+
17
+ names.each do |name|
18
+ result = lookup_property(@properties, name)
19
+ return result unless result.nil?
20
+ end
21
+
22
+ return args[1] if args.length == 2
23
+ raise UnknownProperty.new(names)
24
+ end
25
+
26
+ def if_p(*names)
27
+ values = names.map do |name|
28
+ value = lookup_property(@properties, name)
29
+ return ActiveElseBlock.new(self) if value.nil?
30
+ value
31
+ end
32
+
33
+ yield *values
34
+ InactiveElseBlock.new
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,48 @@
1
+ require 'bosh/template/property_helper'
2
+
3
+ module Bosh
4
+ module Template
5
+ class EvaluationLinkInstance
6
+ include PropertyHelper
7
+
8
+ attr_reader :name
9
+ attr_reader :index
10
+ attr_reader :id
11
+ attr_reader :az
12
+ attr_reader :address
13
+ attr_reader :properties
14
+
15
+ def initialize(name, index, id, az, address, properties)
16
+ @name = name
17
+ @index = index
18
+ @id = id
19
+ @az = az
20
+ @address = address
21
+ @properties = properties
22
+ end
23
+
24
+ def p(*args)
25
+ names = Array(args[0])
26
+
27
+ names.each do |name|
28
+ result = lookup_property(@properties, name)
29
+ return result unless result.nil?
30
+ end
31
+
32
+ return args[1] if args.length == 2
33
+ raise UnknownProperty.new(names)
34
+ end
35
+
36
+ def if_p(*names)
37
+ values = names.map do |name|
38
+ value = lookup_property(@properties, name)
39
+ return ActiveElseBlock.new(self) if value.nil?
40
+ value
41
+ end
42
+
43
+ yield *values
44
+ InactiveElseBlock.new
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,6 @@
1
+ module Bosh
2
+ module Template
3
+ class InvalidPropertyType < StandardError
4
+ end
5
+ end
6
+ end
@@ -1,3 +1,5 @@
1
+ require 'bosh/template/invalid_property_type'
2
+
1
3
  module Bosh
2
4
  module Template
3
5
  module PropertyHelper
@@ -12,6 +14,10 @@ module Bosh
12
14
  dst_ref = dst
13
15
 
14
16
  keys.each do |key|
17
+ unless src_ref.is_a?(Hash)
18
+ raise Bosh::Template::InvalidPropertyType,
19
+ "Property '#{name}' expects a hash, but received '#{src_ref.class}'"
20
+ end
15
21
  src_ref = src_ref[key]
16
22
  break if src_ref.nil? # no property with this name is src
17
23
  end
@@ -28,6 +34,7 @@ module Bosh
28
34
  # @param [Hash] collection Property collection
29
35
  # @param [String] name Dot-separated property name
30
36
  def lookup_property(collection, name)
37
+ return nil if collection.nil?
31
38
  keys = name.split(".")
32
39
  ref = collection
33
40
 
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Template
3
- VERSION = '1.3202.0'
3
+ VERSION = '1.3213.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-template
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3202.0
4
+ version: 1.3213.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pivotal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-23 00:00:00.000000000 Z
11
+ date: 2016-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: semi_semantic
@@ -78,6 +78,9 @@ files:
78
78
  - lib/bosh/template.rb
79
79
  - lib/bosh/template/evaluation_context.rb
80
80
  - lib/bosh/template/evaluation_failed.rb
81
+ - lib/bosh/template/evaluation_link.rb
82
+ - lib/bosh/template/evaluation_link_instance.rb
83
+ - lib/bosh/template/invalid_property_type.rb
81
84
  - lib/bosh/template/property_helper.rb
82
85
  - lib/bosh/template/renderer.rb
83
86
  - lib/bosh/template/unknown_link.rb