terrafying 1.7.2 → 1.7.3

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
  SHA256:
3
- metadata.gz: 6ecc26605ed318c6f2556fc9f7fcf9f32d297a433ee33b591f3c381aa281f329
4
- data.tar.gz: 17a9b780067edc702efbbde4d684093aa6c4bd26b5b5689a74c3a6f54f5dca9e
3
+ metadata.gz: 32f4ef6c7f02da11c400fc113d16991f83f4349bc6b816fd0fd185a5bc2a3960
4
+ data.tar.gz: 420109d3c89f7da19b0c07caff82aeba01da61a47d334f2a650af44077a1af1d
5
5
  SHA512:
6
- metadata.gz: 81e8df58a1fb53f0cb08e6e156430edbd06d86a78d96a65090542a2b762958a391bf1e5694d15d9951ef18a65dd717a91dca770ae5fa937144eee98d0dbb83c7
7
- data.tar.gz: 75523ba860d3d064465e7af424de2452e3ab2928d7bd6fe9570967eba78f1c5b541f366d662cbafe56c4b70f4eb81b33ce693e8acecb60e8022ae0eeb649f0fb
6
+ metadata.gz: 7112e9865bc46955679826bebdecad789aa32a1f8b420f5e873921b6235b515790af4f0c5f9b99def4ad02d234497fe21679bb8bd3324282e5bb194e8c70a1aa
7
+ data.tar.gz: e89e709c6db84c2c263dc554fbe56a46b60b4bf5d0bf1f036efdd7c2a3abbc4c8c0687d322e9f8a8ce1d5172239f8564ab4699704497268d71eeed5a857ac3d6
@@ -7,28 +7,15 @@ require 'terrafying/aws'
7
7
 
8
8
  module Terrafying
9
9
 
10
- class Ref
10
+ ARG_PLACEHOLDER = "ARG_PLACEHOLDER123"
11
11
 
12
- def initialize(
13
- kind: :resource,
14
- type: "",
15
- name:,
16
- key: nil,
17
- fns: []
18
- )
19
- @kind = kind
20
- @type = type
21
- @name = name
22
- @key = key
23
- @fns = Array(fns)
24
- end
25
-
26
- def resource?
27
- @kind == :resource
28
- end
12
+ class Ref
29
13
 
30
- def fn_call(fn)
31
- Ref.new(kind: @kind, type: @type, name: @name, key: @key, fns: Array(fn) + @fns)
14
+ def fn_call(fn, *args)
15
+ if args.length == 0
16
+ args = [ARG_PLACEHOLDER]
17
+ end
18
+ FnRef.new(fn: fn, args: args, ref: self)
32
19
  end
33
20
 
34
21
  def downcase
@@ -39,23 +26,24 @@ module Terrafying
39
26
  fn_call("trimspace")
40
27
  end
41
28
 
42
- def to_s
43
- closing_parens = ")" * @fns.count
44
- calls = @fns.reduce("") { |m, v| m << "#{v}(" }
45
-
46
- type = @type
47
- if ! resource?
48
- type = [@kind.to_s, @type]
49
- end
29
+ def split(separator)
30
+ fn_call("split", separator, ARG_PLACEHOLDER)
31
+ end
50
32
 
51
- key = @key
52
- if resource? && key == nil
53
- key = "id"
33
+ def slice(idx, length=0)
34
+ if length != 0
35
+ fn_call("slice", ARG_PLACEHOLDER, idx, idx+length)
36
+ else
37
+ fn_call("element", ARG_PLACEHOLDER, idx)
54
38
  end
39
+ end
55
40
 
56
- var = [type, @name, key].flatten.compact.reject { |s| s.empty? }.join('.')
41
+ def realise
42
+ ""
43
+ end
57
44
 
58
- "${#{calls}#{var}#{closing_parens}}"
45
+ def to_s
46
+ "${#{realise}}"
59
47
  end
60
48
 
61
49
  def to_str
@@ -71,16 +59,109 @@ module Terrafying
71
59
  end
72
60
 
73
61
  def [](key)
74
- new_key = [@key, key].compact.join('.')
75
-
76
- Ref.new(kind: @kind, type: @type, name: @name, key: new_key, fns: @fns)
62
+ if key.is_a? Numeric
63
+ IndexRef.new(ref: self, idx: key)
64
+ else
65
+ AttributeRef.new(ref: self, key: key)
66
+ end
77
67
  end
78
68
 
79
69
  def []=(k, v)
80
70
  raise "You can't set a value this way"
81
71
  end
82
72
 
73
+ end
74
+
75
+ class RootRef < Ref
76
+ def initialize(
77
+ kind: :resource,
78
+ type: "",
79
+ name:
80
+ )
81
+ @kind = kind
82
+ @type = type
83
+ @name = name
84
+ end
83
85
 
86
+ def realise
87
+ type = [@type]
88
+ if @kind != :resource
89
+ type = [@kind, @type]
90
+ end
91
+
92
+ (type + [@name]).reject(&:empty?).join(".")
93
+ end
94
+
95
+ def fn_call(fn, *args)
96
+ if @kind == :resource
97
+ self["id"].fn_call(fn, *args)
98
+ else
99
+ super
100
+ end
101
+ end
102
+
103
+ def to_s
104
+ if @kind == :resource
105
+ "${#{realise}.id}"
106
+ else
107
+ super
108
+ end
109
+ end
110
+ end
111
+
112
+ class AttributeRef < Ref
113
+ def initialize(
114
+ ref:,
115
+ key:
116
+ )
117
+ @ref = ref
118
+ @key = key
119
+ end
120
+
121
+ def realise
122
+ "#{@ref.realise}.#{@key}"
123
+ end
124
+ end
125
+
126
+ class IndexRef < Ref
127
+ def initialize(
128
+ ref:,
129
+ idx:
130
+ )
131
+ @ref = ref
132
+ @idx = idx
133
+ end
134
+
135
+ def realise
136
+ "#{@ref.realise}[#{@idx}]"
137
+ end
138
+ end
139
+
140
+ class FnRef < Ref
141
+ def initialize(
142
+ ref:,
143
+ fn:,
144
+ args: []
145
+ )
146
+ @ref = ref
147
+ @fn = fn
148
+ @args = args
149
+ end
150
+
151
+ def realise
152
+ ref = @ref.realise
153
+ args = @args.map { |arg|
154
+ if arg == ARG_PLACEHOLDER
155
+ ref
156
+ elsif arg.is_a? String
157
+ "\"#{arg}\""
158
+ else
159
+ arg
160
+ end
161
+ }.join(", ")
162
+
163
+ "#{@fn}(#{args})"
164
+ end
84
165
  end
85
166
 
86
167
  class Context
@@ -129,7 +210,7 @@ module Terrafying
129
210
  raise "Local already exists #{name.to_s}" if @output["locals"].has_key? name.to_s
130
211
 
131
212
  @output["locals"][name.to_s] = value
132
- Ref.new(kind: :local, name: name)
213
+ RootRef.new(kind: :local, name: name)
133
214
  end
134
215
 
135
216
  def var(name, spec)
@@ -138,7 +219,7 @@ module Terrafying
138
219
  raise "Var already exists #{name.to_s}" if @output["variable"].has_key? name.to_s
139
220
 
140
221
  @output["variable"][name.to_s] = spec
141
- Ref.new(kind: :var, name: name)
222
+ RootRef.new(kind: :var, name: name)
142
223
  end
143
224
 
144
225
  def data(type, name, spec)
@@ -147,7 +228,7 @@ module Terrafying
147
228
 
148
229
  raise "Data already exists #{type.to_s}.#{name.to_s}" if @output["data"][type.to_s].has_key? name.to_s
149
230
  @output["data"][type.to_s][name.to_s] = spec
150
- Ref.new(kind: :data, type: type, name: name)
231
+ RootRef.new(kind: :data, type: type, name: name)
151
232
  end
152
233
 
153
234
  def resource(type, name, attributes)
@@ -155,7 +236,7 @@ module Terrafying
155
236
 
156
237
  raise "Resource already exists #{type.to_s}.#{name.to_s}" if @output["resource"][type.to_s].has_key? name.to_s
157
238
  @output["resource"][type.to_s][name.to_s] = attributes
158
- Ref.new(kind: :resource, type: type, name: name)
239
+ RootRef.new(kind: :resource, type: type, name: name)
159
240
  end
160
241
 
161
242
  def template(relative_path, params = {})
@@ -175,7 +256,7 @@ module Terrafying
175
256
  end
176
257
 
177
258
  def output_of(type, name, key)
178
- Ref.new(kind: :resource, type: type, name: name, key: key)
259
+ RootRef.new(kind: :resource, type: type, name: name)[key]
179
260
  end
180
261
 
181
262
  def pretty_generate
@@ -248,6 +329,8 @@ module Terrafying
248
329
  %w[
249
330
  add!
250
331
  aws
332
+ local
333
+ var
251
334
  backend
252
335
  provider
253
336
  resource
@@ -1,4 +1,4 @@
1
1
  module Terrafying
2
- VERSION = "1.7.2" # will be inserted by Drone
2
+ VERSION = "1.7.3" # will be inserted by Drone
3
3
  CLI_VERSION = "0.11.7"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terrafying
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.2
4
+ version: 1.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - uSwitch Limited
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-28 00:00:00.000000000 Z
11
+ date: 2019-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -274,7 +274,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
274
274
  - !ruby/object:Gem::Version
275
275
  version: '0'
276
276
  requirements: []
277
- rubygems_version: 3.0.1
277
+ rubygems_version: 3.0.3
278
278
  signing_key:
279
279
  specification_version: 4
280
280
  summary: No.