cfn2dsl 0.3.1 → 0.4.0

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
- SHA1:
3
- metadata.gz: d41f4227841cd556701c4bdeb8b203b32a2889a9
4
- data.tar.gz: acf409e0bb4abf9bc6d58bf0223f4d6c83c581e5
2
+ SHA256:
3
+ metadata.gz: 362a368962d8e432205733286191423e04b5db0235647d243985153bed960b63
4
+ data.tar.gz: 26b99c51a9da1f59b26f3b06d3358c94cc19bc68cc5d0fb20078808cfcc44d77
5
5
  SHA512:
6
- metadata.gz: 7181c56d9605bf9a15abf5e767f06d476dba22755acec7f7ff446bf6d85cbdd5fa17d403419a97975b41950571db7b13a6e89adf8580ef460cf6b2f916c17f29
7
- data.tar.gz: 2057466527c91674128aa24175b4f56b302794a793268339d4499c0c0f07dba101bd72cf2b9bdd1a7f10a7dfe1a8b9ffecf3794f4e38a793afc6f46071c265be
6
+ metadata.gz: 8048e157208a924a3eae68415d96bf8c650a9484cefcea4d7d829c455cc35a0cf2c6fadb47e79cdbf8c195b92d41061ba4647f51c393bc5c0a2824819682ff4b
7
+ data.tar.gz: 2cba5277344c9e986890c1abe1ab434e989359389cc8dbb1357ead8f48591052bf79fb442f97d423e28f00b891ba7625074506210c7bd042828a212b37ca542d
data/bin/cfn2dsl CHANGED
@@ -30,7 +30,7 @@ unless options[:template]
30
30
  puts op
31
31
  exit 1
32
32
  else
33
- template = JSON.load(File.new(options[:template]))
33
+ template = IO.read(options[:template])
34
34
  cfndsl = CloudFormation.new(template)
35
35
  end
36
36
 
data/lib/cfn2dsl.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
 
3
3
  require 'json'
4
+ require 'yaml'
4
5
  require 'optparse'
5
6
  require 'ap'
6
7
 
@@ -16,6 +17,7 @@ require 'render'
16
17
  require 'version'
17
18
  require 'rules'
18
19
  require 'metadata'
20
+ require 'error'
19
21
 
20
22
  AwesomePrint.defaults = {
21
23
  :indent => -2,
@@ -24,3 +26,15 @@ AwesomePrint.defaults = {
24
26
  :plain => true
25
27
  }
26
28
 
29
+ YAML.add_domain_type('', 'Ref') { |type, val| { 'Ref' => val } }
30
+
31
+ YAML.add_domain_type('', 'GetAtt') do |type, val|
32
+ if val.is_a? String
33
+ val = val.split('.')
34
+ end
35
+ { 'Fn::GetAtt' => val }
36
+ end
37
+
38
+ %w(Join Base64 Sub Cidr Split Select ImportValue GetAZs FindInMap And Or If Not).each do |function_name|
39
+ YAML.add_domain_type('', function_name) { |type, val| { "Fn::#{function_name}" => val } }
40
+ end
data/lib/cfn_parser.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module CfnParser
2
2
 
3
- def parse_cfn_json(json)
4
- send(element_type(json).to_s.snake_case, json)
3
+ def parse_cfn(cfn_hash)
4
+ send(element_type(cfn_hash).to_s.snake_case, cfn_hash)
5
5
  end
6
6
 
7
7
  def intrinsic_function?(obj)
@@ -10,30 +10,30 @@ module CfnParser
10
10
  (obj.keys.first =~ /^Fn::/ or obj.keys.first == "Ref")
11
11
  end
12
12
 
13
- def array(json)
14
- return json.map { |a| parse_cfn_json(a) }
13
+ def array(cfn_hash)
14
+ return cfn_hash.map { |a| parse_cfn(a) }
15
15
  end
16
16
 
17
- def intrinsic_function(json)
18
- fn_name = json.keys.first
19
- values = json[fn_name]
20
- parameters = parse_cfn_json(values)
17
+ def intrinsic_function(cfn_hash)
18
+ fn_name = cfn_hash.keys.first
19
+ values = cfn_hash[fn_name]
20
+ parameters = parse_cfn(values)
21
21
  return IntrinsicFunction.new(fn_name, parameters)
22
22
  end
23
23
 
24
- def hash(json)
25
- return json.merge(json) { |k, v| parse_cfn_json(v) }
24
+ def hash(cfn_hash)
25
+ return cfn_hash.merge(cfn_hash) { |k, v| parse_cfn(v) }
26
26
  end
27
27
 
28
- def primitive(json)
29
- json
28
+ def primitive(cfn_hash)
29
+ cfn_hash
30
30
  end
31
31
 
32
32
  private
33
- def element_type(json)
34
- return :Array if json.instance_of?(Array)
35
- return :IntrinsicFunction if intrinsic_function?(json)
36
- return :Hash if json.instance_of?(Hash)
33
+ def element_type(cfn_hash)
34
+ return :Array if cfn_hash.instance_of?(Array)
35
+ return :IntrinsicFunction if intrinsic_function?(cfn_hash)
36
+ return :Hash if cfn_hash.instance_of?(Hash)
37
37
  return :Primitive
38
38
  end
39
39
  end
data/lib/cfndsl.erb CHANGED
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  CloudFormation do
2
3
  <% if @cfn.description %>
3
- Description(<%= @cfn.description.dump %>)
4
+ Description '<%= @cfn.description %>'
4
5
  <% end %>
5
6
  <% if @cfn.aws_template_format_version %>
6
- AWSTemplateFormatVersion(<%= @cfn.aws_template_format_version.dump %>)
7
+ AWSTemplateFormatVersion '<%= @cfn.aws_template_format_version %>'
7
8
  <% end %>
8
9
  <% # Parameters %>
9
10
  <%
@@ -11,44 +12,48 @@ CloudFormation do
11
12
  @cfn.parameters.each do |param|
12
13
  %>
13
14
 
14
- Parameter(<%= param.name.dump %>) do
15
+ Parameter('<%= param.name %>') do
15
16
  <% if param.description %>
16
- Description(<%= param.description.dump %>)
17
+ Description '<%= param.description %>'
17
18
  <% end %>
18
19
  <% if param.type %>
19
- Type(<%= param.type.dump %>)
20
+ Type '<%= param.type %>'
20
21
  <% end %>
21
22
  <% if param.default
22
23
  default_value = param.default
23
24
  if param.default.respond_to? :dump
24
- default_value = param.default.dump
25
+ default_value = '\'' + param.default + '\''
25
26
  end
26
27
  %>
27
- Default(<%= default_value %>)
28
+ Default <%= default_value %>
28
29
  <% end %>
29
30
  <% if param.allowed_values %>
30
- AllowedValues(<%= param.allowed_values.ai %>)
31
+ <% if param.allowed_values.kind_of?(Array) %>
32
+ AllowedValues <%= param.allowed_values.ai.gsub('"', '\'').gsub(' ', ' ').gsub(/^\]$/, ' ]').gsub(/^\}$/, ' }') %>
33
+ <% else %>
34
+ AllowedValues '<%= param.allowed_values.ai.gsub('"', '\'') %>'
35
+ <% end %>
31
36
  <% end %>
32
37
  <% if param.allowed_pattern %>
33
- AllowedPattern(<%= param.allowed_pattern.dump %>)
38
+ AllowedPattern '<%= param.allowed_pattern %>'
34
39
  <% end %>
35
40
  <% if param.no_echo %>
36
- NoEcho(<%= param.no_echo %>)
41
+ NoEcho <%= param.no_echo %>
37
42
  <% end %>
38
43
  <% if param.max_length %>
39
- MaxLength(<%= param.max_length.to_i %>)
44
+ MaxLength <%= param.max_length.to_i %>
40
45
  <% end %>
41
46
  <% if param.min_length %>
42
- MinLength(<%= param.min_length.to_i %>)
47
+ MinLength <%= param.min_length.to_i %>
43
48
  <% end %>
44
49
  <% if param.max_value %>
45
- MaxValue(<%= param.max_value %>)
50
+ MaxValue <%= param.max_value %>
46
51
  <% end %>
47
52
  <% if param.min_value %>
48
- MinValue(<%= param.min_value %>)
53
+ MinValue <%= param.min_value %>
49
54
  <% end %>
50
55
  <% if param.constraint_description %>
51
- ConstraintDescription(<%= param.constraint_description.dump %>)
56
+ ConstraintDescription '<%= param.constraint_description %>'
52
57
  <% end %>
53
58
  end
54
59
  <%
@@ -61,7 +66,7 @@ CloudFormation do
61
66
  @cfn.mappings.each do |map|
62
67
  %>
63
68
 
64
- Mapping(<%= map.name.dump %>, <%= map.values.ai %>)
69
+ Mapping '<%= map.name %>' '<%= map.values.ai.gsub('"', '\'') %>'
65
70
  <%
66
71
  end
67
72
  end
@@ -72,7 +77,7 @@ CloudFormation do
72
77
  @cfn.conditions.each do |cond|
73
78
  %>
74
79
 
75
- Condition(<%= cond.name.dump %>, <%= cond.evaluations.ai %>)
80
+ Condition('<%= cond.name %>', <%= cond.evaluations.ai.gsub('"', '\'').gsub(' ', ' ').gsub(/^\]/, ' ]').gsub(/^\)/, ' )') %>)
76
81
  <%
77
82
  end
78
83
  end
@@ -81,19 +86,23 @@ CloudFormation do
81
86
  <%
82
87
  @cfn.resources.each do |res|
83
88
  %>
84
-
85
- Resource(<%= res.name.dump %>) do
86
- Type("<%= res.type %>")
89
+ <%
90
+ resname = res.name
91
+ restype = res.type
92
+ restype = restype.split('::').delete_if{|i|i=='AWS'}
93
+ restype = restype.join('::').gsub('::', '_')
94
+ %>
95
+ <%= restype %>('<%= resname %>') do
87
96
  <%
88
97
  if res.creation_policy
89
98
  res.creation_policy.each_pair do |name, value|
90
99
  if value.instance_of? String
91
- value = value.dump
100
+ value = '\'' + value + '\''
92
101
  else
93
- value = value.ai
102
+ value = value.ai.gsub('"', '\'')
94
103
  end
95
104
  %>
96
- CreationPolicy(<%= name.dump%>, <%= value %>)
105
+ CreationPolicy('<%= name %>', <%= value %>)
97
106
  <%
98
107
  end
99
108
  end
@@ -101,14 +110,14 @@ CloudFormation do
101
110
  <%
102
111
  if res.deletion_policy
103
112
  %>
104
- DeletionPolicy(<%= res.deletion_policy.dump %>)
113
+ DeletionPolicy '<%= res.deletion_policy %>)'
105
114
  <%
106
115
  end
107
116
  %>
108
117
  <%
109
118
  if res.condition
110
119
  %>
111
- Condition(<%= res.condition.dump %>)
120
+ Condition '<%= res.condition %>'
112
121
  <%
113
122
  end
114
123
  %>
@@ -116,12 +125,12 @@ CloudFormation do
116
125
  if res.update_policy
117
126
  res.update_policy.each_pair do |name, value|
118
127
  if value.instance_of? String
119
- value = value.dump
128
+ value = "'#{value}'"
120
129
  else
121
- value = value.ai
130
+ value = value.ai.gsub('"', '\'').gsub('{', '').gsub('}', '').chop
122
131
  end
123
132
  %>
124
- UpdatePolicy(<%= name.dump %>,<%= value %>)
133
+ UpdatePolicy('<%= name %>',<%= value %>)
125
134
  <%
126
135
  end
127
136
  end
@@ -130,12 +139,12 @@ CloudFormation do
130
139
  if res.metadata
131
140
  res.metadata.each_pair do |name, value|
132
141
  if value.instance_of? String
133
- value = value.dump
142
+ value = value
134
143
  else
135
- value = value.ai
144
+ value = value.ai.gsub('"', '\'')
136
145
  end
137
146
  %>
138
- Metadata(<%= name.dump %> => <%= value %>)
147
+ Metadata '<%= name %>' '<%= value %>'
139
148
  <%
140
149
  end
141
150
  end
@@ -143,9 +152,9 @@ CloudFormation do
143
152
  <%
144
153
  if res.depends_on
145
154
  if res.depends_on.instance_of? String
146
- value = res.depends_on.dump
155
+ value = '\'' + res.depends_on + '\''
147
156
  else
148
- value = res.depends_on.ai
157
+ value = res.depends_on.ai.gsub('"', '\'')
149
158
  end
150
159
  %>
151
160
  DependsOn(<%= value %>)
@@ -155,14 +164,25 @@ CloudFormation do
155
164
  <%
156
165
  if res.properties
157
166
  res.properties.each_pair do |name, value|
167
+ is_value_string = true
158
168
  if value.instance_of? String
159
- value = value.dump
169
+ value = '\'' + value + '\''
160
170
  else
161
- value = value.ai
171
+ is_value_string = false
172
+ value = value.ai.gsub('"', '\'')
173
+ .gsub(' ', ' ')
174
+ .gsub(/^\]$/, ' ]')
175
+ .gsub(/^\}$/, ' }')
176
+ .gsub(/[ ]+=>/, ' =>')
162
177
  end
178
+
179
+ if is_value_string
163
180
  %>
164
- Property(<%= name.dump %>, <%= value %>)
181
+ <%= name %> <%= value %>
182
+ <% else %>
183
+ <%= name %>(<%= value %>)
165
184
  <%
185
+ end
166
186
  end
167
187
  end
168
188
  %>
@@ -176,30 +196,30 @@ CloudFormation do
176
196
  @cfn.outputs.each do |out|
177
197
  %>
178
198
 
179
- Output(<%= out.name.dump %>) do
199
+ Output('<%= out.name %>') do
180
200
  <%
181
201
  if out.condition
182
202
  %>
183
- Condition(<%= out.condition.dump %>)
203
+ Condition('<%= out.condition %>')
184
204
  <%
185
205
  end
186
206
  %>
187
207
  <%
188
208
  if out.description
189
209
  %>
190
- Description(<%= out.description.dump %>)
210
+ Description '<%= out.description %>'
191
211
  <%
192
212
  end
193
213
  %>
194
214
  <%
195
215
  if out.value
196
216
  if out.value.instance_of? String
197
- value = out.value.dump
217
+ value = '\'' + out.value + '\''
198
218
  else
199
- value = out.value.ai
219
+ value = out.value.ai.gsub('"', '\'')
200
220
  end
201
221
  %>
202
- Value(<%= value %>)
222
+ Value <%= value %>
203
223
  <%
204
224
  end
205
225
  %>
@@ -1,4 +1,5 @@
1
1
  require 'extlib'
2
+ require 'psych'
2
3
  class CloudFormation
3
4
 
4
5
  ELEMENTS = [
@@ -15,24 +16,29 @@ class CloudFormation
15
16
 
16
17
  attr_reader(*ELEMENTS)
17
18
 
18
- def initialize(json)
19
+ def initialize(cfn_string)
20
+ cfn_hash = Psych.safe_load(cfn_string)
19
21
  ELEMENTS.each do |e|
20
22
  key = e.to_s.camel_case
21
23
  if key =~ /^Aws/
22
24
  key = key.sub(/^Aws/, "AWS")
23
25
  end
24
26
 
25
- if json[key]
26
- attr = parse_element(e, json[key])
27
+ if cfn_hash[key]
28
+ attr = parse_element(e, cfn_hash[key])
27
29
  instance_variable_set("@" + e.to_s, attr)
28
30
  end
29
31
  end
32
+ rescue Psych::DisallowedClass => error
33
+ raise YamlValueTypeError.new "Unsupported YAML value type found: only scalar values supported. #{error.message}"
34
+ rescue Psych::Exception => error
35
+ raise YamlSyntaxError.new "Syntax error in template. #{error.message}"
30
36
  end
31
37
 
32
38
  private
33
- def parse_element(elm_name, json)
39
+ def parse_element(elm_name, cfn_hash)
34
40
  function = parser(elm_name)
35
- send(function, elm_name, json)
41
+ send(function, elm_name, cfn_hash)
36
42
  end
37
43
 
38
44
  def parser(name)
@@ -46,27 +52,27 @@ class CloudFormation
46
52
  end
47
53
  end
48
54
 
49
- def simple_parser(name, json)
50
- json
55
+ def simple_parser(name, cfn_hash)
56
+ cfn_hash
51
57
  end
52
58
 
53
- def complex_parser(name, json)
59
+ def complex_parser(name, cfn_hash)
54
60
  elms = []
55
61
  case name
56
62
  when :metadata
57
- json.each_pair { |k, v| elms << Metadata.new(k, v) }
63
+ cfn_hash.each_pair { |k, v| elms << Metadata.new(k, v) }
58
64
  when :rules
59
- json.each_pair { |k, v| elms << Rules.new(k, v) }
65
+ cfn_hash.each_pair { |k, v| elms << Rules.new(k, v) }
60
66
  when :parameters
61
- json.each_pair { |k, v| elms << Parameter.new(k, v) }
67
+ cfn_hash.each_pair { |k, v| elms << Parameter.new(k, v) }
62
68
  when :resources
63
- json.each_pair { |k, v| elms << Resource.new(k, v) }
69
+ cfn_hash.each_pair { |k, v| elms << Resource.new(k, v) }
64
70
  when :outputs
65
- json.each_pair { |k, v| elms << Output.new(k, v) }
71
+ cfn_hash.each_pair { |k, v| elms << Output.new(k, v) }
66
72
  when :mappings
67
- json.each_pair { |k, v| elms << Mapping.new(k, v) }
73
+ cfn_hash.each_pair { |k, v| elms << Mapping.new(k, v) }
68
74
  when :conditions
69
- json.each_pair { |k, v| elms << Condition.new(k, v) }
75
+ cfn_hash.each_pair { |k, v| elms << Condition.new(k, v) }
70
76
  end
71
77
  return elms
72
78
  end
data/lib/condition.rb CHANGED
@@ -4,6 +4,6 @@ class Condition
4
4
 
5
5
  def initialize(name, eval)
6
6
  @name = name
7
- @evaluations = parse_cfn_json(eval)
7
+ @evaluations = parse_cfn(eval)
8
8
  end
9
9
  end
data/lib/error.rb ADDED
@@ -0,0 +1,11 @@
1
+ class YamlSyntaxError < StandardError
2
+ def initialize(msg)
3
+ super
4
+ end
5
+ end
6
+
7
+ class YamlValueTypeError < StandardError
8
+ def initialize(msg)
9
+ super
10
+ end
11
+ end
@@ -20,11 +20,11 @@ class IntrinsicFunction
20
20
  private
21
21
  def fn_base64
22
22
  if @parameters.instance_of? String
23
- value = '"' + @parameters.gsub('"'){'\\"'} + '"'
23
+ value = "'#{@parameters}'"
24
24
  else
25
25
  value = @parameters.ai
26
26
  end
27
- return "FnBase64(#{value})"
27
+ return "FnBase64 '#{value}'"
28
28
  end
29
29
 
30
30
  def fn_select
@@ -32,7 +32,7 @@ class IntrinsicFunction
32
32
  end
33
33
 
34
34
  def ref
35
- return "Ref(\"#{@parameters.gsub('"'){'\\"'}}\")"
35
+ return "Ref('#{@parameters.gsub('\''){'\\\''}}')"
36
36
  end
37
37
 
38
38
  def fn_and
@@ -41,13 +41,13 @@ class IntrinsicFunction
41
41
 
42
42
  def fn_equals
43
43
  if @parameters[0].instance_of? String
44
- arg1 = '"' + @parameters[0].gsub('"'){'\\"'} + '"'
44
+ arg1 = '\'' + @parameters[0].gsub('\''){'\\\''} + '\''
45
45
  else
46
46
  arg1 = @parameters[0].ai
47
47
  end
48
48
 
49
49
  if @parameters[1].instance_of? String
50
- arg2 = '"' + @parameters[1].gsub('"'){'\\"'} + '"'
50
+ arg2 = '\'' + @parameters[1].gsub('\''){'\\\''} + '\''
51
51
  else
52
52
  arg2 = @parameters[1].ai
53
53
  end
@@ -56,15 +56,15 @@ class IntrinsicFunction
56
56
  end
57
57
 
58
58
  def fn_if
59
- cond_name = '"' + @parameters[0].gsub('"'){'\\"'} + '"'
59
+ cond_name = '\'' + @parameters[0].gsub('\''){'\\\''} + '\''
60
60
  if @parameters[1].instance_of? String
61
- true_value = '"' + @parameters[1].gsub('"'){'\\"'} + '"'
61
+ true_value = '\'' + @parameters[1].gsub('\''){'\\\''} + '\''
62
62
  else
63
63
  true_value = @parameters[1].ai
64
64
  end
65
65
 
66
66
  if @parameters[2].instance_of? String
67
- false_value = '"' + @parameters[2].gsub('"'){'\\"'} + '"'
67
+ false_value = '\'' + @parameters[2].gsub('\''){'\\\''} + '\''
68
68
  else
69
69
  false_value = @parameters[2].ai
70
70
  end
@@ -80,16 +80,16 @@ class IntrinsicFunction
80
80
  end
81
81
 
82
82
  def fn_find_in_map
83
- map_name = '"' + @parameters[0] + '"'
83
+ map_name = '\'' + @parameters[0] + '\''
84
84
 
85
85
  if @parameters[1].instance_of? String
86
- top_level_key = '"' + @parameters[1] + '"'
86
+ top_level_key = '\'' + @parameters[1] + '\''
87
87
  else
88
88
  top_level_key = @parameters[1].ai
89
89
  end
90
90
 
91
91
  if @parameters[2].instance_of? String
92
- sec_level_key = '"' + @parameters[2] + '"'
92
+ sec_level_key = '\'' + @parameters[2] + '\''
93
93
  else
94
94
  sec_level_key = @parameters[2].ai
95
95
  end
@@ -98,26 +98,36 @@ class IntrinsicFunction
98
98
  end
99
99
 
100
100
  def fn_get_att
101
- resource_name = '"' + @parameters[0] + '"'
102
- attr_name = '"' + @parameters[1] + '"'
101
+ resource_name = '\'' + @parameters[0] + '\''
102
+ attr_name = '\'' + @parameters[1] + '\''
103
103
  return "FnGetAtt(#{resource_name}, #{attr_name})"
104
104
  end
105
105
 
106
106
  def fn_join
107
- seperator = '"' + @parameters[0].gsub('"'){'\\"'} + '"'
107
+ seperator = '\'' + @parameters[0].gsub('\''){'\\\''} + '\''
108
108
  values = @parameters[1].ai
109
109
  return "FnJoin(#{seperator}, #{values})"
110
110
  end
111
111
 
112
112
  def fn_sub
113
- origin = '"' + @parameters[0].gsub('"'){'\\"'} + '"'
114
- values = @parameters[1].ai
115
- return "FnSub(#{origin}, #{values})"
113
+ if @parameters.instance_of? String
114
+ value = '"' + @parameters.gsub('"'){'\\"'} + '"'
115
+ return "FnSub(#{value})"
116
+ else
117
+ origin = '"' + @parameters[0].gsub('"'){'\\"'} + '"'
118
+ values = @parameters[1].ai
119
+ return "FnSub(#{origin}, #{values})"
120
+ end
116
121
  end
117
122
 
118
123
  def fn_split
119
124
  delimiter = '"' + @parameters[0].gsub('"'){'\\"'} + '"'
120
- value = '"' + @parameters[1] + '"'
125
+ # value = '"' + @parameters[1] + '"'
126
+ if @parameters[1].instance_of? String
127
+ value = '"' + @parameters[1] + '"'
128
+ else
129
+ value = @parameters[1].ai
130
+ end
121
131
  return "FnSplit(#{delimiter}, #{value})"
122
132
  end
123
133
 
@@ -128,7 +138,7 @@ class IntrinsicFunction
128
138
 
129
139
  def fn_get_a_zs
130
140
  if @parameters.instance_of? String
131
- value = '"' + @parameters.gsub('"'){'\\"'} + '"'
141
+ value = '\'' + @parameters.gsub('\''){'\\\''} + '\''
132
142
  else
133
143
  value = @parameters.ai
134
144
  end
@@ -136,5 +146,8 @@ class IntrinsicFunction
136
146
  return "FnGetAZs(#{value})"
137
147
  end
138
148
 
149
+ def fn_cidr
150
+ return "FnCidr(#{@parameters.ai})"
151
+ end
139
152
 
140
153
  end
data/lib/mapping.rb CHANGED
@@ -4,6 +4,6 @@ class Mapping
4
4
 
5
5
  def initialize(name, values)
6
6
  @name = name
7
- @values = parse_cfn_json(values)
7
+ @values = parse_cfn(values)
8
8
  end
9
9
  end
data/lib/metadata.rb CHANGED
@@ -4,6 +4,6 @@ class Metadata
4
4
 
5
5
  def initialize(name, values)
6
6
  @name = name
7
- @values = parse_cfn_json(values)
7
+ @values = parse_cfn(values)
8
8
  end
9
9
  end
data/lib/output.rb CHANGED
@@ -9,16 +9,16 @@ class Output
9
9
 
10
10
  attr_reader(:name, *ATTRIBUTES)
11
11
 
12
- def initialize(name, json)
12
+ def initialize(name, cfn_hash)
13
13
  @name = name
14
- ATTRIBUTES.each {|a| attribute(a, json)}
14
+ ATTRIBUTES.each {|a| attribute(a, cfn_hash)}
15
15
  end
16
16
 
17
17
  private
18
- def attribute(name, json)
18
+ def attribute(name, cfn_hash)
19
19
  key = name.to_s.camel_case
20
- if json[key]
21
- value = parse_cfn_json(json[key])
20
+ if cfn_hash[key]
21
+ value = parse_cfn(cfn_hash[key])
22
22
  instance_variable_set("@" + name.to_s, value)
23
23
  end
24
24
  end
data/lib/parameter.rb CHANGED
@@ -17,11 +17,11 @@ class Parameter
17
17
 
18
18
  attr_reader(*ELEMENTS)
19
19
 
20
- def initialize(name, json)
20
+ def initialize(name, cfn_hash)
21
21
  @name = name
22
22
  ELEMENTS.each do |e|
23
23
  key_name = e.to_s.camel_case
24
- instance_variable_set('@' + e.to_s, json[key_name]) if json[key_name]
24
+ instance_variable_set('@' + e.to_s, cfn_hash[key_name]) if cfn_hash[key_name]
25
25
  end
26
26
  end
27
27
  end
data/lib/resource.rb CHANGED
@@ -14,10 +14,10 @@ class Resource
14
14
 
15
15
  attr_reader(:name, *ATTRIBUTES)
16
16
 
17
- def initialize(name, json)
17
+ def initialize(name, cfn_hash)
18
18
  @name = name
19
19
  ATTRIBUTES.each do |a|
20
- send(attribute_type(a), json, a.to_s)
20
+ send(attribute_type(a), cfn_hash, a.to_s)
21
21
  end
22
22
  end
23
23
 
@@ -37,18 +37,18 @@ class Resource
37
37
  return type
38
38
  end
39
39
 
40
- def complex_attribute(json, name)
41
- if json[name.camel_case]
42
- values = json[name.camel_case].merge do |k, v|
43
- parse_cfn_json(v)
40
+ def complex_attribute(cfn_hash, name)
41
+ if cfn_hash[name.camel_case]
42
+ values = cfn_hash[name.camel_case].merge do |k, v|
43
+ parse_cfn(v)
44
44
  end
45
45
  instance_variable_set('@' + name, values)
46
46
  end
47
47
  end
48
48
 
49
- def basic_attribute(json, name)
50
- if json[name.camel_case]
51
- instance_variable_set('@' + name, parse_cfn_json(json[name.camel_case]))
49
+ def basic_attribute(cfn_hash, name)
50
+ if cfn_hash[name.camel_case]
51
+ instance_variable_set('@' + name, parse_cfn(cfn_hash[name.camel_case]))
52
52
  end
53
53
  end
54
54
  end
data/lib/rules.rb CHANGED
@@ -4,6 +4,6 @@ class Rules
4
4
 
5
5
  def initialize(name, values)
6
6
  @name = name
7
- @values = parse_cfn_json(values)
7
+ @values = parse_cfn(values)
8
8
  end
9
9
  end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Cfn2dsl
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfn2dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Yung
8
8
  - Valen Gunawan
9
+ - Cam Maxwell
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2017-07-06 00:00:00.000000000 Z
13
+ date: 2019-08-19 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: extlib
@@ -31,14 +32,14 @@ dependencies:
31
32
  requirements:
32
33
  - - '='
33
34
  - !ruby/object:Gem::Version
34
- version: 1.7.0
35
+ version: 1.8.0
35
36
  type: :runtime
36
37
  prerelease: false
37
38
  version_requirements: !ruby/object:Gem::Requirement
38
39
  requirements:
39
40
  - - '='
40
41
  - !ruby/object:Gem::Version
41
- version: 1.7.0
42
+ version: 1.8.0
42
43
  - !ruby/object:Gem::Dependency
43
44
  name: erubis
44
45
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +54,7 @@ dependencies:
53
54
  - - '='
54
55
  - !ruby/object:Gem::Version
55
56
  version: 2.7.0
56
- description: A tool to convert CloudFormation JSON template into a Ruby DSL cfndsl
57
+ description: A tool to convert CloudFormation templates into a Ruby DSL cfndsl
57
58
  email: jwrong@gmail.com
58
59
  executables:
59
60
  - cfn2dsl
@@ -66,6 +67,7 @@ files:
66
67
  - lib/cfndsl.erb
67
68
  - lib/cloudformation.rb
68
69
  - lib/condition.rb
70
+ - lib/error.rb
69
71
  - lib/intrinsic_function.rb
70
72
  - lib/mapping.rb
71
73
  - lib/metadata.rb
@@ -87,7 +89,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
89
  requirements:
88
90
  - - ">="
89
91
  - !ruby/object:Gem::Version
90
- version: 2.3.0
92
+ version: 2.4.4
91
93
  required_rubygems_version: !ruby/object:Gem::Requirement
92
94
  requirements:
93
95
  - - ">="
@@ -95,8 +97,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
97
  version: '0'
96
98
  requirements: []
97
99
  rubyforge_project:
98
- rubygems_version: 2.6.12
100
+ rubygems_version: 2.7.8
99
101
  signing_key:
100
102
  specification_version: 4
101
- summary: A tool to convert CloudFormation JSON template into a Ruby DSL cfndsl
103
+ summary: A tool to convert CloudFormation templates into a Ruby DSL cfndsl
102
104
  test_files: []