cfoo 0.0.1 → 0.0.2
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.
- data/README.md +90 -15
- data/TODO +3 -5
- data/bin/cfoo +2 -7
- data/features/error_reporting.feature +23 -0
- data/features/function_expansion.feature +139 -0
- data/features/step_definitions/cfoo_steps.rb +14 -2
- data/lib/cfoo.rb +4 -0
- data/lib/cfoo/array.rb +13 -0
- data/lib/cfoo/cfoo.rb +6 -2
- data/lib/cfoo/constants.rb +3 -0
- data/lib/cfoo/el_parser.rb +35 -20
- data/lib/cfoo/factory.rb +25 -0
- data/lib/cfoo/file_system.rb +20 -0
- data/lib/cfoo/module.rb +0 -4
- data/lib/cfoo/parser.rb +66 -19
- data/lib/cfoo/processor.rb +10 -10
- data/lib/cfoo/version.rb +1 -1
- data/lib/cfoo/yaml_parser.rb +2 -1
- data/spec/cfoo/array_spec.rb +23 -0
- data/spec/cfoo/cfoo_spec.rb +20 -1
- data/spec/cfoo/el_parser_spec.rb +31 -0
- data/spec/cfoo/factory_spec.rb +22 -0
- data/spec/cfoo/file_system_spec.rb +38 -0
- data/spec/cfoo/parser_spec.rb +13 -1
- data/spec/cfoo/processor_spec.rb +111 -3
- data/spec/cfoo/yaml_parser_spec.rb +5 -0
- data/spec/cfoo/yaml_spec.rb +36 -0
- metadata +146 -135
- checksums.yaml +0 -7
@@ -26,6 +26,36 @@ module Cfoo
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
describe "#open" do
|
30
|
+
it "opens a file on disk for reading and passes it to the provided block" do
|
31
|
+
write_project_file "file.txt", "test content"
|
32
|
+
|
33
|
+
actual_content = "block not called"
|
34
|
+
file_system.open("file.txt") do |file|
|
35
|
+
actual_content = file.read
|
36
|
+
end
|
37
|
+
|
38
|
+
actual_content.should include "test content"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#find_coordinates" do
|
43
|
+
it "returns the coordinates of the first match of the specified string in the specified file" do
|
44
|
+
write_project_file "test.txt", <<-EOF
|
45
|
+
the quick brown fox
|
46
|
+
jumps over the lazy
|
47
|
+
dog
|
48
|
+
the quick brown fox
|
49
|
+
jumps over the lazy
|
50
|
+
dog
|
51
|
+
EOF
|
52
|
+
|
53
|
+
row, column = file_system.find_coordinates("lazy", "test.txt")
|
54
|
+
row.should be 2
|
55
|
+
column.should be 36
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
29
59
|
describe "#glob_relative" do
|
30
60
|
it "returns relative path of files, resolved relative to project root" do
|
31
61
|
files = %w[a b c].map {|file| File.join(project_root, "modules", file) }
|
@@ -52,10 +82,18 @@ module Cfoo
|
|
52
82
|
end
|
53
83
|
end
|
54
84
|
|
85
|
+
def relative(file)
|
86
|
+
File.join(project_root, file)
|
87
|
+
end
|
88
|
+
|
55
89
|
def write(file, content)
|
56
90
|
File.open(file, "w+") do |f|
|
57
91
|
f.puts content
|
58
92
|
end
|
59
93
|
end
|
94
|
+
|
95
|
+
def write_project_file(file, content)
|
96
|
+
write(relative(file), content)
|
97
|
+
end
|
60
98
|
end
|
61
99
|
end
|
data/spec/cfoo/parser_spec.rb
CHANGED
@@ -6,6 +6,13 @@ module Cfoo
|
|
6
6
|
let(:parser) { Parser.new(file_system) }
|
7
7
|
|
8
8
|
describe "#parse_file" do
|
9
|
+
context "when parsing fails" do
|
10
|
+
it "raises an error" do
|
11
|
+
file_system.should_receive(:parse_file).and_raise "parsing failed"
|
12
|
+
expect { parser.parse_file("myfile.yml") }.to raise_error Parser::CfooParseError, "Failed to parse 'myfile.yml':\nparsing failed"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
9
16
|
context "when processing a normal array" do
|
10
17
|
it "returns it" do
|
11
18
|
file_system.should_receive(:parse_file).with("myfile.yml").and_return([1, 2, 3])
|
@@ -106,6 +113,11 @@ module Cfoo
|
|
106
113
|
|
107
114
|
parser.parse_file("b64.yml").should == {"Fn::Base64" => "myencodedstring"}
|
108
115
|
end
|
116
|
+
it "raises an error when finding other (unknown) domain types" do
|
117
|
+
file_system.should_receive(:parse_file).with("domaintype.yml").and_return(YAML::DomainType.create("Unknown type", "unknowntypecontent"))
|
118
|
+
|
119
|
+
expect {parser.parse_file("domaintype.yml")}.to raise_error /Couldn't parse object/
|
120
|
+
end
|
109
121
|
end
|
110
122
|
|
111
123
|
context "in an array" do
|
@@ -140,7 +152,7 @@ module Cfoo
|
|
140
152
|
context "when presented with an unknown object" do
|
141
153
|
it "raises an error" do
|
142
154
|
file_system.should_receive(:parse_file).with("myfile.yml").and_return(/a regex/)
|
143
|
-
expect {parser.parse_file("myfile.yml")}.to raise_error Parser::
|
155
|
+
expect {parser.parse_file("myfile.yml")}.to raise_error Parser::ElExpansionError
|
144
156
|
end
|
145
157
|
end
|
146
158
|
end
|
data/spec/cfoo/processor_spec.rb
CHANGED
@@ -8,8 +8,8 @@ module Cfoo
|
|
8
8
|
let(:processor) { Processor.new(parser, project) }
|
9
9
|
|
10
10
|
describe "#process" do
|
11
|
-
it "parses the specified files" do
|
12
|
-
parser.should_receive(:parse_file).with("app.yml").and_return({"Resources" => { "AppServer" => { "Type" => "
|
11
|
+
it "parses and merges the specified files" do
|
12
|
+
parser.should_receive(:parse_file).with("app.yml").and_return({"Resources" => { "AppServer" => { "Type" => "LaunchConfiguration"} } })
|
13
13
|
parser.should_receive(:parse_file).with("db.yml").and_return({"Resources" => { "DbServer" => { "Type" => "EC2Instance" } } })
|
14
14
|
parser.should_receive(:parse_file).with("network.yml").and_return({"Parameters" => { "LoadBalancerIpAddress" => "10.0.0.51" } })
|
15
15
|
processor.process("app.yml", "db.yml", "network.yml").should == {
|
@@ -18,11 +18,119 @@ module Cfoo
|
|
18
18
|
"LoadBalancerIpAddress" => "10.0.0.51"
|
19
19
|
},
|
20
20
|
"Resources" => {
|
21
|
-
"AppServer" => { "Type" => "
|
21
|
+
"AppServer" => { "Type" => "LaunchConfiguration" },
|
22
22
|
"DbServer" => { "Type" => "EC2Instance" }
|
23
23
|
}
|
24
24
|
}
|
25
25
|
end
|
26
|
+
context "when there's a duplicate resource definition" do
|
27
|
+
it "merges them" do
|
28
|
+
parser.should_receive(:parse_file).with("app.yml").and_return(
|
29
|
+
"Resources" => {
|
30
|
+
"FrontendFleet" => {
|
31
|
+
"Type" => "AutoScalingGroup"
|
32
|
+
}
|
33
|
+
}
|
34
|
+
)
|
35
|
+
parser.should_receive(:parse_file).with("app_extra.yml").and_return(
|
36
|
+
"Resources" => {
|
37
|
+
"FrontendFleet" => {
|
38
|
+
"LoadBalancerNames" => [ "load balancer" ]
|
39
|
+
}
|
40
|
+
}
|
41
|
+
)
|
42
|
+
processor.process("app.yml", "app_extra.yml").should == {
|
43
|
+
"AWSTemplateFormatVersion" => "2010-09-09",
|
44
|
+
"Resources" => {
|
45
|
+
"FrontendFleet" => {
|
46
|
+
"Type" => "AutoScalingGroup",
|
47
|
+
"LoadBalancerNames" => [ "load balancer" ]
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
end
|
52
|
+
context "when the resources both define the same property" do
|
53
|
+
it "replaces strings" do
|
54
|
+
parser.should_receive(:parse_file).with("app.yml").and_return(
|
55
|
+
"Resources" => {
|
56
|
+
"WebApp" => {
|
57
|
+
"Type" => "Ec2Instance"
|
58
|
+
}
|
59
|
+
}
|
60
|
+
)
|
61
|
+
parser.should_receive(:parse_file).with("app_extra.yml").and_return(
|
62
|
+
"Resources" => {
|
63
|
+
"WebApp" => {
|
64
|
+
"Type" => "LaunchConfiguration"
|
65
|
+
}
|
66
|
+
}
|
67
|
+
)
|
68
|
+
processor.process("app.yml", "app_extra.yml").should == {
|
69
|
+
"AWSTemplateFormatVersion" => "2010-09-09",
|
70
|
+
"Resources" => {
|
71
|
+
"WebApp" => {
|
72
|
+
"Type" => "LaunchConfiguration"
|
73
|
+
}
|
74
|
+
}
|
75
|
+
}
|
76
|
+
end
|
77
|
+
it "merges arrays" do
|
78
|
+
parser.should_receive(:parse_file).with("app.yml").and_return(
|
79
|
+
"Resources" => {
|
80
|
+
"FrontendFleet" => {
|
81
|
+
"LoadBalancerNames" => [ "load balancer A" ]
|
82
|
+
}
|
83
|
+
}
|
84
|
+
)
|
85
|
+
parser.should_receive(:parse_file).with("app_extra.yml").and_return(
|
86
|
+
"Resources" => {
|
87
|
+
"FrontendFleet" => {
|
88
|
+
"LoadBalancerNames" => [ "load balancer B" ]
|
89
|
+
}
|
90
|
+
}
|
91
|
+
)
|
92
|
+
processor.process("app.yml", "app_extra.yml").should == {
|
93
|
+
"AWSTemplateFormatVersion" => "2010-09-09",
|
94
|
+
"Resources" => {
|
95
|
+
"FrontendFleet" => {
|
96
|
+
"LoadBalancerNames" => [ "load balancer A", "load balancer B" ]
|
97
|
+
}
|
98
|
+
}
|
99
|
+
}
|
100
|
+
end
|
101
|
+
it "merges maps" do
|
102
|
+
parser.should_receive(:parse_file).with("app.yml").and_return(
|
103
|
+
"Resources" => {
|
104
|
+
"FrontendFleet" => {
|
105
|
+
"Properties" => {
|
106
|
+
"LoadBalancerNames" => [ "load balancer A" ]
|
107
|
+
}
|
108
|
+
}
|
109
|
+
}
|
110
|
+
)
|
111
|
+
parser.should_receive(:parse_file).with("app_extra.yml").and_return(
|
112
|
+
"Resources" => {
|
113
|
+
"FrontendFleet" => {
|
114
|
+
"Properties" => {
|
115
|
+
"MinSize" => "1"
|
116
|
+
}
|
117
|
+
}
|
118
|
+
}
|
119
|
+
)
|
120
|
+
processor.process("app.yml", "app_extra.yml").should == {
|
121
|
+
"AWSTemplateFormatVersion" => "2010-09-09",
|
122
|
+
"Resources" => {
|
123
|
+
"FrontendFleet" => {
|
124
|
+
"Properties" => {
|
125
|
+
"LoadBalancerNames" => [ "load balancer A" ],
|
126
|
+
"MinSize" => "1"
|
127
|
+
}
|
128
|
+
}
|
129
|
+
}
|
130
|
+
}
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
26
134
|
end
|
27
135
|
|
28
136
|
describe "#process_all" do
|
@@ -66,6 +66,11 @@ module Cfoo
|
|
66
66
|
|
67
67
|
parser.load_file("#{working_dir}/base64.yml").should == YAML::DomainType.create("Base64", "myencodedstring")
|
68
68
|
end
|
69
|
+
it "converts AZ lookups to GetAZs function-calls" do
|
70
|
+
write "#{working_dir}/get_azs.yml", "!GetAZs myregion"
|
71
|
+
|
72
|
+
parser.load_file("#{working_dir}/get_azs.yml").should == YAML::DomainType.create("GetAZs", "myregion")
|
73
|
+
end
|
69
74
|
end
|
70
75
|
end
|
71
76
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module YAML
|
4
|
+
describe DomainType do
|
5
|
+
describe "#eq?" do
|
6
|
+
it "returns true when all properties are equal" do
|
7
|
+
left = DomainType.create("type", "value")
|
8
|
+
right = DomainType.create("type", "value")
|
9
|
+
left.should == right
|
10
|
+
end
|
11
|
+
it "returns false when type IDs are different" do
|
12
|
+
left = DomainType.create("type_a", "value")
|
13
|
+
right = DomainType.create("type_b", "value")
|
14
|
+
left.should_not == right
|
15
|
+
end
|
16
|
+
it "returns false when values are different" do
|
17
|
+
left = DomainType.create("type", "value_1")
|
18
|
+
right = DomainType.create("type", "value_2")
|
19
|
+
left.should_not == right
|
20
|
+
end
|
21
|
+
it "returns false when domains are different" do
|
22
|
+
left = DomainType.create("type", "value")
|
23
|
+
right = DomainType.create("type", "value")
|
24
|
+
left.domain = "some domain"
|
25
|
+
right.domain = "some other domain"
|
26
|
+
left.should_not == right
|
27
|
+
end
|
28
|
+
it "returns false when other type is not a domain type" do
|
29
|
+
left = DomainType.create("type", "value")
|
30
|
+
right = "not a domain type"
|
31
|
+
left.should_not == right
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
metadata
CHANGED
@@ -1,149 +1,143 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: cfoo
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
5
10
|
platform: ruby
|
6
|
-
authors:
|
11
|
+
authors:
|
7
12
|
- drrb
|
8
13
|
autorequire:
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
16
|
+
|
17
|
+
date: 2013-07-26 00:00:00 +10:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
14
21
|
name: json
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '>='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
22
|
prerelease: false
|
22
|
-
|
23
|
-
requirements:
|
24
|
-
- -
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
|
27
|
-
-
|
28
|
-
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '>='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
34
30
|
type: :runtime
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: parslet
|
35
34
|
prerelease: false
|
36
|
-
|
37
|
-
requirements:
|
38
|
-
- -
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
|
41
|
-
-
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :runtime
|
43
|
+
version_requirements: *id002
|
44
|
+
- !ruby/object:Gem::Dependency
|
42
45
|
name: bundler
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ~>
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.3'
|
48
|
-
type: :development
|
49
46
|
prerelease: false
|
50
|
-
|
51
|
-
requirements:
|
47
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
52
49
|
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
55
|
-
-
|
56
|
-
|
57
|
-
|
58
|
-
requirements:
|
59
|
-
- - '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
segments:
|
52
|
+
- 1
|
53
|
+
- 3
|
54
|
+
version: "1.3"
|
62
55
|
type: :development
|
56
|
+
version_requirements: *id003
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: rake
|
63
59
|
prerelease: false
|
64
|
-
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
|
69
|
-
-
|
70
|
-
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - '>='
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
60
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
segments:
|
65
|
+
- 0
|
66
|
+
version: "0"
|
76
67
|
type: :development
|
68
|
+
version_requirements: *id004
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
77
71
|
prerelease: false
|
78
|
-
|
79
|
-
requirements:
|
80
|
-
- -
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
|
83
|
-
-
|
84
|
-
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - '>='
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
72
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
version: "0"
|
90
79
|
type: :development
|
80
|
+
version_requirements: *id005
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: cucumber
|
91
83
|
prerelease: false
|
92
|
-
|
93
|
-
requirements:
|
94
|
-
- -
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
|
97
|
-
-
|
98
|
-
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - '>='
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
84
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
segments:
|
89
|
+
- 0
|
90
|
+
version: "0"
|
104
91
|
type: :development
|
92
|
+
version_requirements: *id006
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: simplecov
|
105
95
|
prerelease: false
|
106
|
-
|
107
|
-
requirements:
|
108
|
-
- -
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
|
111
|
-
-
|
112
|
-
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - '>='
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 0.6.3
|
96
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
segments:
|
101
|
+
- 0
|
102
|
+
version: "0"
|
118
103
|
type: :development
|
104
|
+
version_requirements: *id007
|
105
|
+
- !ruby/object:Gem::Dependency
|
106
|
+
name: coveralls
|
119
107
|
prerelease: false
|
120
|
-
|
121
|
-
requirements:
|
122
|
-
- -
|
123
|
-
- !ruby/object:Gem::Version
|
108
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
- 6
|
115
|
+
- 3
|
124
116
|
version: 0.6.3
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: json
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - '>='
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
117
|
type: :development
|
118
|
+
version_requirements: *id008
|
119
|
+
- !ruby/object:Gem::Dependency
|
120
|
+
name: json
|
133
121
|
prerelease: false
|
134
|
-
|
135
|
-
requirements:
|
136
|
-
- -
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
|
139
|
-
|
140
|
-
|
122
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
segments:
|
127
|
+
- 0
|
128
|
+
version: "0"
|
129
|
+
type: :development
|
130
|
+
version_requirements: *id009
|
131
|
+
description: "Cfoo: CloudFormation master"
|
132
|
+
email:
|
141
133
|
- drrrrrrrrrrrb@gmail.com
|
142
|
-
executables:
|
134
|
+
executables:
|
143
135
|
- cfoo
|
144
136
|
extensions: []
|
137
|
+
|
145
138
|
extra_rdoc_files: []
|
146
|
-
|
139
|
+
|
140
|
+
files:
|
147
141
|
- .gitignore
|
148
142
|
- .simplecov
|
149
143
|
- .travis.yml
|
@@ -157,6 +151,8 @@ files:
|
|
157
151
|
- features/attribute_expansion.feature
|
158
152
|
- features/convert_yaml_to_json.feature
|
159
153
|
- features/el_escaping.feature
|
154
|
+
- features/error_reporting.feature
|
155
|
+
- features/function_expansion.feature
|
160
156
|
- features/map_reference_expansion.feature
|
161
157
|
- features/modules.feature
|
162
158
|
- features/parse_files.feature
|
@@ -165,8 +161,11 @@ files:
|
|
165
161
|
- features/support/env.rb
|
166
162
|
- features/yamly_shortcuts.feature
|
167
163
|
- lib/cfoo.rb
|
164
|
+
- lib/cfoo/array.rb
|
168
165
|
- lib/cfoo/cfoo.rb
|
166
|
+
- lib/cfoo/constants.rb
|
169
167
|
- lib/cfoo/el_parser.rb
|
168
|
+
- lib/cfoo/factory.rb
|
170
169
|
- lib/cfoo/file_system.rb
|
171
170
|
- lib/cfoo/module.rb
|
172
171
|
- lib/cfoo/parser.rb
|
@@ -176,8 +175,10 @@ files:
|
|
176
175
|
- lib/cfoo/version.rb
|
177
176
|
- lib/cfoo/yaml.rb
|
178
177
|
- lib/cfoo/yaml_parser.rb
|
178
|
+
- spec/cfoo/array_spec.rb
|
179
179
|
- spec/cfoo/cfoo_spec.rb
|
180
180
|
- spec/cfoo/el_parser_spec.rb
|
181
|
+
- spec/cfoo/factory_spec.rb
|
181
182
|
- spec/cfoo/file_system_spec.rb
|
182
183
|
- spec/cfoo/module_spec.rb
|
183
184
|
- spec/cfoo/parser_spec.rb
|
@@ -185,37 +186,44 @@ files:
|
|
185
186
|
- spec/cfoo/project_spec.rb
|
186
187
|
- spec/cfoo/renderer_spec.rb
|
187
188
|
- spec/cfoo/yaml_parser_spec.rb
|
189
|
+
- spec/cfoo/yaml_spec.rb
|
188
190
|
- spec/spec_helper.rb
|
191
|
+
has_rdoc: true
|
189
192
|
homepage: https://github.com/drrb/cfoo
|
190
|
-
licenses:
|
193
|
+
licenses:
|
191
194
|
- GPL-3
|
192
|
-
metadata: {}
|
193
195
|
post_install_message:
|
194
196
|
rdoc_options: []
|
195
|
-
|
197
|
+
|
198
|
+
require_paths:
|
196
199
|
- lib
|
197
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- -
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
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"
|
207
214
|
requirements: []
|
215
|
+
|
208
216
|
rubyforge_project:
|
209
|
-
rubygems_version:
|
217
|
+
rubygems_version: 1.3.6
|
210
218
|
signing_key:
|
211
|
-
specification_version:
|
212
|
-
summary: Cfoo (pronounced 'sifu') allows you to write your CloudFormation templates
|
213
|
-
|
214
|
-
to maintain.
|
215
|
-
test_files:
|
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:
|
216
222
|
- features/attribute_expansion.feature
|
217
223
|
- features/convert_yaml_to_json.feature
|
218
224
|
- features/el_escaping.feature
|
225
|
+
- features/error_reporting.feature
|
226
|
+
- features/function_expansion.feature
|
219
227
|
- features/map_reference_expansion.feature
|
220
228
|
- features/modules.feature
|
221
229
|
- features/parse_files.feature
|
@@ -223,8 +231,10 @@ test_files:
|
|
223
231
|
- features/step_definitions/cfoo_steps.rb
|
224
232
|
- features/support/env.rb
|
225
233
|
- features/yamly_shortcuts.feature
|
234
|
+
- spec/cfoo/array_spec.rb
|
226
235
|
- spec/cfoo/cfoo_spec.rb
|
227
236
|
- spec/cfoo/el_parser_spec.rb
|
237
|
+
- spec/cfoo/factory_spec.rb
|
228
238
|
- spec/cfoo/file_system_spec.rb
|
229
239
|
- spec/cfoo/module_spec.rb
|
230
240
|
- spec/cfoo/parser_spec.rb
|
@@ -232,4 +242,5 @@ test_files:
|
|
232
242
|
- spec/cfoo/project_spec.rb
|
233
243
|
- spec/cfoo/renderer_spec.rb
|
234
244
|
- spec/cfoo/yaml_parser_spec.rb
|
245
|
+
- spec/cfoo/yaml_spec.rb
|
235
246
|
- spec/spec_helper.rb
|