terrafying 1.7.2 → 1.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.