cfoo 0.0.2 → 0.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5fcc988f1989d6b93a69fa74fac941f3294f5bea
4
+ data.tar.gz: ede4908b05d3c967c5b71d6b6ed4515298eac28a
5
+ SHA512:
6
+ metadata.gz: c6ce108951f4369e9d5018746c4f552d655acda9af47808104d5d69675643f016c4e63d46676973cd37591a9ad8776fa7d82235909a1c9062f02e5feb59b763a
7
+ data.tar.gz: 003f932fcacefab7b329a63c0716540d035a83d7302c322314a163a96d79f9d28592577e8c4c51b0bb0bf5a3fed2e874e3768551b2895797f2fb4a7a0d56e56d
data/Guardfile ADDED
@@ -0,0 +1,8 @@
1
+ notification :terminal_notifier
2
+
3
+ guard :rspec do
4
+ watch(%r{^spec/.+_spec\.rb$})
5
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
6
+ watch('spec/spec_helper.rb') { "spec" }
7
+ end
8
+
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Cfoo
2
2
 
3
- [![Build Status](https://travis-ci.org/drrb/cfoo.png?branch=master)](https://travis-ci.org/drrb/cfoo)
3
+ [![Build Status](https://travis-ci.org/drrb/cfoo.svg?branch=master)](https://travis-ci.org/drrb/cfoo)
4
4
  [![Coverage Status](https://coveralls.io/repos/drrb/cfoo/badge.png?branch=master)](https://coveralls.io/r/drrb/cfoo)
5
5
  [![Code Climate](https://codeclimate.com/github/drrb/cfoo.png)](https://codeclimate.com/github/drrb/cfoo)
6
6
 
@@ -75,7 +75,7 @@ Properties:
75
75
 
76
76
  function error_exit
77
77
  {
78
- /opt/aws/bin/cfn-signal -e 1 -r "$1" '$(WaitHandle)'
78
+ /opt/aws/bin/cfn-signal -e 1 -r "\$1" '$(WaitHandle)'
79
79
  exit 1
80
80
  }
81
81
 
@@ -139,9 +139,7 @@ Cfoo Shortcut: `$(SubnetConfig[VPC][CIDR])`
139
139
 
140
140
  CloudFormation: `{ "Fn::GetAtt" : [ "Ec2Instance", "PublicIp" ] }`
141
141
 
142
- Cfoo Shortcut: `$(Ec2Instance.PublicIp)`
143
-
144
- Other Shortcut: `$(Ec2Instance[PublicIp])`
142
+ Cfoo Shortcut: `$(Ec2Instance[PublicIp])`
145
143
 
146
144
  ##### Embedded Reference
147
145
 
data/cfoo.gemspec CHANGED
@@ -31,5 +31,11 @@ Gem::Specification.new do |gem|
31
31
  gem.add_development_dependency "cucumber"
32
32
  gem.add_development_dependency "simplecov"
33
33
  gem.add_development_dependency "coveralls", ">= 0.6.3"
34
- gem.add_development_dependency "json" # Coveralls needs it
34
+ gem.add_development_dependency "mime-types", "< 2" # Needed to support Ruby 1.8
35
+
36
+ unless ["1.8.7", "1.9.2"].include? RUBY_VERSION
37
+ gem.add_development_dependency "guard"
38
+ gem.add_development_dependency "guard-rspec"
39
+ gem.add_development_dependency "terminal-notifier-guard"
40
+ end
35
41
  end
@@ -8,7 +8,7 @@ Feature: Expand EL Attribute References
8
8
  """
9
9
  EntryPoint:
10
10
  Description: IP address of the Bastion Host
11
- Value: $(BastionHost.PublicIp)
11
+ Value: $(BastionHost[PublicIp])
12
12
  """
13
13
  When I process "outputs.yml"
14
14
  Then the output should match JSON
@@ -27,7 +27,7 @@ Feature: Expand EL Attribute References
27
27
  """
28
28
  WebSite:
29
29
  Description: URL of the website
30
- Value: http://$(PublicElasticLoadBalancer.DNSName)/index.html
30
+ Value: http://$(PublicElasticLoadBalancer[DNSName])/index.html
31
31
  """
32
32
  When I process "outputs.yml"
33
33
  Then the output should match JSON
@@ -28,13 +28,12 @@ module Cfoo
28
28
  rule(:dot) { str('.') }
29
29
  rule(:comma) { str(",") >> space? }
30
30
  rule(:text_character) { match['^\\\\$'] }
31
- rule(:identifier) { match['a-zA-Z0-9_\-:'].repeat(1).as(:identifier) >> space? }
31
+ rule(:identifier) { match['a-zA-Z0-9._\-:'].repeat(1).as(:identifier) >> space? }
32
32
  rule(:text) { text_character.repeat(1).as(:text) }
33
33
 
34
34
  rule(:attribute_reference) do
35
35
  (
36
36
  expression.as(:reference) >> (
37
- str(".") >> identifier.as(:attribute) |
38
37
  str("[") >> expression.as(:attribute) >> str("]")
39
38
  )
40
39
  ).as(:attribute_reference)
@@ -1,5 +1,22 @@
1
1
  require 'cfoo/yaml_parser'
2
2
 
3
+ class String
4
+ def coordinates_of_index(index)
5
+ lines = split("\n")
6
+ line_number = 1
7
+ column_number = index + 1
8
+ lines.each do |line|
9
+ if line.length < column_number
10
+ line_number += 1
11
+ column_number -= line.length
12
+ else
13
+ return [ line_number, column_number ]
14
+ end
15
+ end
16
+ [ -1, -1 ]
17
+ end
18
+ end
19
+
3
20
  module Cfoo
4
21
  class FileSystem
5
22
  def initialize(project_root, yaml_parser)
@@ -19,19 +36,19 @@ module Cfoo
19
36
  end
20
37
 
21
38
  def find_coordinates(string, file_name)
22
- matching_lines = []
23
39
  open(file_name) do |file|
24
- file.each_with_index do|line, row_index|
25
- if line.include? string
26
- column_index = line.index(string)
27
- row = row_index + 1
28
- column = column_index + 1
29
- return [row, column]
30
- end
40
+ content = file.read
41
+ lines = string.split "\n"
42
+ patterns = lines.map { |line| Regexp.escape(line) }
43
+ pattern = patterns.join '\n\s*'
44
+ regex = %r[#{pattern}]
45
+ index = regex =~ content
46
+ if index.nil?
47
+ raise CoordinatesNotFound, "Couldn't find '#{string.inspect}' in '#{file_name}'"
48
+ else
49
+ content.coordinates_of_index(index)
31
50
  end
32
51
  end
33
- #TODO test this
34
- raise "Couldn't find '#{string}' in '#{file}'"
35
52
  end
36
53
 
37
54
  def glob_relative(path)
@@ -45,4 +62,7 @@ module Cfoo
45
62
  Dir.glob("#{resolve_file path}/*")
46
63
  end
47
64
  end
65
+
66
+ class CoordinatesNotFound < StandardError
67
+ end
48
68
  end
data/lib/cfoo/parser.rb CHANGED
@@ -98,7 +98,7 @@ module Cfoo
98
98
  attr_accessor :file_name, :cause, :source, :line, :column
99
99
 
100
100
  def initialize(file_name, cause, source, line, column)
101
- super("Failed to parse '#{file_name}':\nSource: #{source}\nLocation: #{file_name} line #{line}, column #{column} \nCause: #{cause.ascii_tree}")
101
+ super("Failed to parse '#{file_name}':\nLocation: #{file_name} line #{line}, column #{column} \nSource: #{source}\nCause: #{cause.ascii_tree}")
102
102
 
103
103
  @file_name = file_name
104
104
  @cause = cause
data/lib/cfoo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Cfoo
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -7,6 +7,10 @@ module Cfoo
7
7
  parser.parse("$(orange)").should == {"Ref" => "orange"}
8
8
  end
9
9
 
10
+ it 'turns simple EL references with dots into CloudFormation "Ref" maps' do
11
+ parser.parse("$(orange.color)").should == {"Ref" => "orange.color"}
12
+ end
13
+
10
14
  it 'turns EL references embedded in strings into appended arrays' do
11
15
  parser.parse("large $(MelonType) melon").should == {"Fn::Join" => [ "" , [ "large ", { "Ref" => "MelonType" }, " melon" ]]}
12
16
  end
@@ -15,14 +19,14 @@ module Cfoo
15
19
  parser.parse("I have $(number) apples and $(otherNumber) oranges").should == {"Fn::Join" => [ "" , ["I have ", { "Ref" => "number" }, " apples and ", { "Ref" => "otherNumber" }, " oranges" ]]}
16
20
  end
17
21
 
18
- it 'turns EL attribute references into CloudFormation "GetAtt" maps' do
19
- parser.parse("$(apple.color)").should == {"Fn::GetAtt" => ["apple", "color"]}
20
- end
21
-
22
22
  it 'turns EL attribute map references into CloudFormation "GetAtt" maps' do
23
23
  parser.parse("$(apple[color])").should == {"Fn::GetAtt" => ["apple", "color"]}
24
24
  end
25
25
 
26
+ it 'turns EL attribute map references with dots into CloudFormation "GetAtt" maps' do
27
+ parser.parse("$(apple[color.primary])").should == {"Fn::GetAtt" => ["apple", "color.primary"]}
28
+ end
29
+
26
30
  it 'turns EL map references into CloudFormation "FindInMap" maps' do
27
31
  parser.parse("$(fruit[apple][color])").should == {"Fn::FindInMap" => ["fruit", "apple", "color"]}
28
32
  end
@@ -50,9 +50,28 @@ module Cfoo
50
50
  dog
51
51
  EOF
52
52
 
53
- row, column = file_system.find_coordinates("lazy", "test.txt")
54
- row.should be 2
55
- column.should be 36
53
+ coordinates = file_system.find_coordinates("lazy", "test.txt")
54
+ expect(coordinates).to eq [2,37]
55
+ end
56
+ it "returns the coordinates of multiline strings" do
57
+ write_project_file "test.txt", <<-EOF
58
+ the quick brown fox
59
+ jumps over the lazy
60
+ dog
61
+ EOF
62
+
63
+ file_system.find_coordinates("lazy\ndog", "test.txt")
64
+ end
65
+ it "raises an error if it can't find the text" do
66
+ write_project_file "test.txt", <<-EOF
67
+ the quick brown fox
68
+ jumps over the lazy
69
+ dog
70
+ EOF
71
+
72
+ expect {
73
+ file_system.find_coordinates("xxxxxx", "test.txt")
74
+ }.to raise_error CoordinatesNotFound
56
75
  end
57
76
  end
58
77
 
@@ -74,7 +93,7 @@ module Cfoo
74
93
  file_system.glob_relative("modules/*.yml").should == ["modules/c.yml"]
75
94
  end
76
95
  end
77
-
96
+
78
97
  describe "#parse_file" do
79
98
  it "loads the file with the YAML parser" do
80
99
  yaml_parser.should_receive(:load_file).with("#{project_root}/yamlfile.yml")
@@ -51,6 +51,11 @@ module Cfoo
51
51
  parser.parse_file("myfile.yml").should == {"Ref" => "orange"}
52
52
  end
53
53
 
54
+ it 'turns simple EL references with dots into CloudFormation "Ref" maps' do
55
+ file_system.should_receive(:parse_file).with("myfile.yml").and_return("$(orange.color)")
56
+ parser.parse_file("myfile.yml").should == {"Ref" => "orange.color"}
57
+ end
58
+
54
59
  it 'turns EL references embedded in strings into appended arrays' do
55
60
  file_system.should_receive(:parse_file).with("myfile.yml").and_return("large $(MelonType) melon")
56
61
  parser.parse_file("myfile.yml").should == {"Fn::Join" => [ "", [ "large ", { "Ref" => "MelonType" }, " melon" ] ] }
@@ -63,10 +68,15 @@ module Cfoo
63
68
  end
64
69
 
65
70
  it 'turns EL attribute references into CloudFormation "GetAtt" maps' do
66
- file_system.should_receive(:parse_file).with("myfile.yml").and_return("$(apple.color)")
71
+ file_system.should_receive(:parse_file).with("myfile.yml").and_return("$(apple[color])")
67
72
  parser.parse_file("myfile.yml").should == {"Fn::GetAtt" => ["apple", "color"]}
68
73
  end
69
74
 
75
+ it 'turns EL attribute references with dots into CloudFormation "GetAtt" maps' do
76
+ file_system.should_receive(:parse_file).with("myfile.yml").and_return("$(apple[color.primary])")
77
+ parser.parse_file("myfile.yml").should == {"Fn::GetAtt" => ["apple", "color.primary"]}
78
+ end
79
+
70
80
  it 'turns EL map references into CloudFormation "FindInMap" maps' do
71
81
  file_system.should_receive(:parse_file).with("myfile.yml").and_return("$(fruit[apple][color])")
72
82
  parser.parse_file("myfile.yml").should == {"Fn::FindInMap" => ["fruit", "apple", "color"]}
metadata CHANGED
@@ -1,147 +1,196 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: cfoo
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 2
9
- version: 0.0.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
10
5
  platform: ruby
11
- authors:
6
+ authors:
12
7
  - drrb
13
8
  autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
-
17
- date: 2013-07-26 00:00:00 +10:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2014-04-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: json
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
30
20
  type: :runtime
31
- version_requirements: *id001
32
- - !ruby/object:Gem::Dependency
33
- name: parslet
34
21
  prerelease: false
35
- requirement: &id002 !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- segments:
40
- - 0
41
- version: "0"
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: parslet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
42
34
  type: :runtime
43
- version_requirements: *id002
44
- - !ruby/object:Gem::Dependency
45
- name: bundler
46
35
  prerelease: false
47
- requirement: &id003 !ruby/object:Gem::Requirement
48
- requirements:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
49
45
  - - ~>
50
- - !ruby/object:Gem::Version
51
- segments:
52
- - 1
53
- - 3
54
- version: "1.3"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
55
48
  type: :development
56
- version_requirements: *id003
57
- - !ruby/object:Gem::Dependency
58
- name: rake
59
49
  prerelease: false
60
- requirement: &id004 !ruby/object:Gem::Requirement
61
- requirements:
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- segments:
65
- - 0
66
- version: "0"
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
67
62
  type: :development
68
- version_requirements: *id004
69
- - !ruby/object:Gem::Dependency
70
- name: rspec
71
63
  prerelease: false
72
- requirement: &id005 !ruby/object:Gem::Requirement
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- segments:
77
- - 0
78
- version: "0"
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
79
76
  type: :development
80
- version_requirements: *id005
81
- - !ruby/object:Gem::Dependency
82
- name: cucumber
83
77
  prerelease: false
84
- requirement: &id006 !ruby/object:Gem::Requirement
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- segments:
89
- - 0
90
- version: "0"
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: cucumber
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
91
90
  type: :development
92
- version_requirements: *id006
93
- - !ruby/object:Gem::Dependency
94
- name: simplecov
95
91
  prerelease: false
96
- requirement: &id007 !ruby/object:Gem::Requirement
97
- requirements:
98
- - - ">="
99
- - !ruby/object:Gem::Version
100
- segments:
101
- - 0
102
- version: "0"
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
103
104
  type: :development
104
- version_requirements: *id007
105
- - !ruby/object:Gem::Dependency
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
106
112
  name: coveralls
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: 0.6.3
118
+ type: :development
107
119
  prerelease: false
108
- requirement: &id008 !ruby/object:Gem::Requirement
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- segments:
113
- - 0
114
- - 6
115
- - 3
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
116
124
  version: 0.6.3
125
+ - !ruby/object:Gem::Dependency
126
+ name: mime-types
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - <
130
+ - !ruby/object:Gem::Version
131
+ version: '2'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - <
137
+ - !ruby/object:Gem::Version
138
+ version: '2'
139
+ - !ruby/object:Gem::Dependency
140
+ name: guard
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
117
146
  type: :development
118
- version_requirements: *id008
119
- - !ruby/object:Gem::Dependency
120
- name: json
121
147
  prerelease: false
122
- requirement: &id009 !ruby/object:Gem::Requirement
123
- requirements:
124
- - - ">="
125
- - !ruby/object:Gem::Version
126
- segments:
127
- - 0
128
- version: "0"
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: guard-rspec
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
129
160
  type: :development
130
- version_requirements: *id009
131
- description: "Cfoo: CloudFormation master"
132
- email:
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: terminal-notifier-guard
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ description: 'Cfoo: CloudFormation master'
182
+ email:
133
183
  - drrrrrrrrrrrb@gmail.com
134
- executables:
184
+ executables:
135
185
  - cfoo
136
186
  extensions: []
137
-
138
187
  extra_rdoc_files: []
139
-
140
- files:
188
+ files:
141
189
  - .gitignore
142
190
  - .simplecov
143
191
  - .travis.yml
144
192
  - Gemfile
193
+ - Guardfile
145
194
  - LICENSE.txt
146
195
  - README.md
147
196
  - Rakefile
@@ -188,37 +237,33 @@ files:
188
237
  - spec/cfoo/yaml_parser_spec.rb
189
238
  - spec/cfoo/yaml_spec.rb
190
239
  - spec/spec_helper.rb
191
- has_rdoc: true
192
240
  homepage: https://github.com/drrb/cfoo
193
- licenses:
241
+ licenses:
194
242
  - GPL-3
243
+ metadata: {}
195
244
  post_install_message:
196
245
  rdoc_options: []
197
-
198
- require_paths:
246
+ require_paths:
199
247
  - lib
200
- required_ruby_version: !ruby/object:Gem::Requirement
201
- requirements:
202
- - - ">="
203
- - !ruby/object:Gem::Version
204
- segments:
205
- - 0
206
- version: "0"
207
- required_rubygems_version: !ruby/object:Gem::Requirement
208
- requirements:
209
- - - ">="
210
- - !ruby/object:Gem::Version
211
- segments:
212
- - 0
213
- version: "0"
248
+ required_ruby_version: !ruby/object:Gem::Requirement
249
+ requirements:
250
+ - - '>='
251
+ - !ruby/object:Gem::Version
252
+ version: '0'
253
+ required_rubygems_version: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - '>='
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
214
258
  requirements: []
215
-
216
259
  rubyforge_project:
217
- rubygems_version: 1.3.6
260
+ rubygems_version: 2.2.1
218
261
  signing_key:
219
- specification_version: 3
220
- summary: Cfoo (pronounced 'sifu') allows you to write your CloudFormation templates in a YAML-based markup language, and organise it into modules to make it easier to maintain.
221
- test_files:
262
+ specification_version: 4
263
+ summary: Cfoo (pronounced 'sifu') allows you to write your CloudFormation templates
264
+ in a YAML-based markup language, and organise it into modules to make it easier
265
+ to maintain.
266
+ test_files:
222
267
  - features/attribute_expansion.feature
223
268
  - features/convert_yaml_to_json.feature
224
269
  - features/el_escaping.feature