chemtrail 0.3.0 → 0.3.1

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
  SHA1:
3
- metadata.gz: 0b457fc52081b5875c31d1d124429aa6d438b31a
4
- data.tar.gz: 77706788871003cba5307760765b907f986a80e4
3
+ metadata.gz: 7c327599b79192343d3993d9b30c9a5535e711ff
4
+ data.tar.gz: 0f2e7925ba1bcb70e468e9059a004dc78325205c
5
5
  SHA512:
6
- metadata.gz: cf6193b91a72aeafb284aa0c928c599a04796379af5d90005fa67caed9b5283f442eb076bf0dd22acbb4f773bb151f505975ac82e095ab7a9f39a3d9bfc8ff7b
7
- data.tar.gz: d81f93f39b399601bfd3cb96f1bef9314df9e4360f327651a36b9baae7f4635ec11a6c5542fd68d890d88cd894823fad0e7d8d0ad9172d47c7dcb477c14e2a11
6
+ metadata.gz: fee99fa18b8a65a03fe64fdc5e1ba13a21a2e85628b1ede78a092e946dbe6a8c76ba268131184865d0d27187ab1bc8c019b48d1844ff53f1cb1f6dc9f8f7c6d9
7
+ data.tar.gz: 90fdf39a9da0d664ea6a7eb4f49a497fd7f31696a3ecf0fd2cd5a329f66e5f6f4aeab6df61dd4e69345e8cefd078f716ab593242dab53af38ce1176a80a62f79
@@ -0,0 +1,27 @@
1
+ VPC:
2
+ Tags:
3
+ - Key: Network
4
+ Value: Public
5
+
6
+ PublicSubnet:
7
+ Tags:
8
+ - Key: Network
9
+ Value: Public
10
+
11
+ InternetGateway:
12
+ Tags:
13
+ - Key: Network
14
+ Value: Public
15
+
16
+ PublicRoute:
17
+ DestinationCidrBlock: 0.0.0.0/0
18
+
19
+ InboundHTTPPublicNetworkAclEntry:
20
+ RuleNumber: "100"
21
+ Protocol: "6"
22
+ RuleAction: allow
23
+ Egress: false
24
+ CidrBlock: 0.0.0.0/0
25
+ PortRange:
26
+ From: "80"
27
+ To: "80"
@@ -11,7 +11,7 @@ class OpsworksVpc < Chemtrail::Template
11
11
 
12
12
  You will be billed for the AWS resources used if you create a stack from
13
13
  this template.
14
- DESCRIPTION
14
+ DESCRIPTION
15
15
  end
16
16
 
17
17
  def parameters
@@ -24,10 +24,55 @@ class OpsworksVpc < Chemtrail::Template
24
24
  [
25
25
  Chemtrail::Mapping.new("AWSNATAMI", mappings_config["AWSNATAMI"]),
26
26
  Chemtrail::Mapping.new("AWSInstanceType2Arch", mappings_config["AWSInstanceType2Arch"]),
27
- Chemtrail::Mapping.new("SubnetConfig", mappings_config["SubnetConfig"])
27
+ subnet_config
28
28
  ]
29
29
  end
30
30
 
31
+ def resources
32
+ [
33
+ vpc,
34
+ public_subnet,
35
+ internet_gateway,
36
+ gateway_to_internet
37
+ ]
38
+ end
39
+
40
+ def subnet_config
41
+ @subnet_config ||= Chemtrail::Mapping.new("SubnetConfig", mappings_config["SubnetConfig"])
42
+ end
43
+
44
+ def vpc
45
+ @vpc ||= Chemtrail::Resource.new("VPC", "AWS::EC2::VPC", resources_config["VPC"]).tap do |config|
46
+ config.properties["CidrBlock"] = subnet_config.find("VPC", "CIDR")
47
+ config.properties["Tags"] << stack_name.as_tag("Application")
48
+ end
49
+ end
50
+
51
+ def public_subnet
52
+ @public_subnet ||= Chemtrail::Resource.new("PublicSubnet", "AWS::EC2::Subnet", resources_config["PublicSubnet"]).tap do |config|
53
+ config.properties["VpcId"] = vpc
54
+ config.properties["CidrBlock"] = subnet_config.find("VPC", "CIDR")
55
+ config.properties["Tags"] << stack_name.as_tag("Application")
56
+ end
57
+ end
58
+
59
+ def internet_gateway
60
+ @internet_gateway ||= Chemtrail::Resource.new("InternetGateway", "AWS::EC2::InternetGateway", resources_config["InternetGateway"]).tap do |config|
61
+ config.properties["Tags"] << stack_name.as_tag("Application")
62
+ end
63
+ end
64
+
65
+ def gateway_to_internet
66
+ @gateway_to_internet ||= Chemtrail::Resource.new("GatewayToInternet", "AWS::EC2::VPCGatewayAttachment", resources_config["GatewayToInternet"]).tap do |config|
67
+ config.properties["VpcId"] = vpc
68
+ config.properties["InternetGatewayId"] = internet_gateway
69
+ end
70
+ end
71
+
72
+ def stack_name
73
+ @stack_name ||= Chemtrail::Intrinsic.new("AWS::StackName")
74
+ end
75
+
31
76
  protected
32
77
 
33
78
  def parameters_config
@@ -26,5 +26,34 @@ describe OpsworksVpc do
26
26
  end
27
27
 
28
28
  describe "#resources" do
29
+ describe "VPC" do
30
+ it { should have_resource("VPC").with_type("AWS::EC2::VPC") }
31
+
32
+ it { should have_property("CidrBlock").on("VPC") }
33
+ it { should have_tag("Application").with_reference("AWS::StackName").on("VPC") }
34
+ it { should have_tag("Network").with_value("Public").on("VPC") }
35
+ end
36
+
37
+ describe "PublicSubnet" do
38
+ it { should have_resource("PublicSubnet").with_type("AWS::EC2::Subnet") }
39
+
40
+ it { should have_property("CidrBlock").on("PublicSubnet") }
41
+ it { should have_tag("Application").with_reference("AWS::StackName").on("PublicSubnet") }
42
+ it { should have_tag("Network").with_value("Public").on("PublicSubnet") }
43
+ end
44
+
45
+ describe "InternetGateway" do
46
+ it { should have_resource("InternetGateway").with_type("AWS::EC2::InternetGateway") }
47
+
48
+ it { should have_tag("Application").with_reference("AWS::StackName").on("InternetGateway") }
49
+ it { should have_tag("Network").with_value("Public").on("InternetGateway") }
50
+ end
51
+
52
+ describe "GatewayToInternet" do
53
+ it { should have_resource("GatewayToInternet").with_type("AWS::EC2::VPCGatewayAttachment") }
54
+
55
+ it { should have_property("VpcId").with_reference("VPC").on("GatewayToInternet") }
56
+ it { should have_property("InternetGatewayId").with_reference("InternetGateway").on("GatewayToInternet") }
57
+ end
29
58
  end
30
59
  end
@@ -6,3 +6,4 @@ require "chemtrail/resource"
6
6
  require "chemtrail/output"
7
7
  require "chemtrail/property_list"
8
8
  require "chemtrail/function"
9
+ require "chemtrail/intrinsic"
@@ -0,0 +1,17 @@
1
+ class Chemtrail::Intrinsic
2
+ attr_reader :id
3
+
4
+ def initialize(id)
5
+ @id = id
6
+ end
7
+
8
+ def to_reference
9
+ {
10
+ "Ref" => id
11
+ }
12
+ end
13
+
14
+ def as_tag(key)
15
+ {"Key" => key, "Value" => self}
16
+ end
17
+ end
@@ -0,0 +1,56 @@
1
+ require "rspec/expectations"
2
+
3
+ module Chemtrail::RSpec
4
+ extend RSpec::Matchers::DSL
5
+
6
+ matcher :have_field do |field_name|
7
+ define_method :parameter_for do |actual|
8
+ actual.parameters.detect { |p| p.id == @parameter_id }
9
+ end
10
+
11
+ define_method :field_for do |parameter|
12
+ parameter.fields[field_name]
13
+ end
14
+
15
+ define_method :matches_value? do |field|
16
+ if @value
17
+ field == @value
18
+ elsif @included_value
19
+ field.include?(@included_value)
20
+ else
21
+ true
22
+ end
23
+ end
24
+
25
+ match do |actual|
26
+ parameter = parameter_for(actual)
27
+ field = field_for(parameter)
28
+ !parameter.nil? && !field.nil? && matches_value?(field)
29
+ end
30
+
31
+ chain :on do |parameter_id|
32
+ @parameter_id = parameter_id
33
+ end
34
+
35
+ chain :with_value do |value|
36
+ @value = value
37
+ end
38
+
39
+ chain :including do |value|
40
+ @included_value = value
41
+ end
42
+
43
+ failure_message_for_should do |actual|
44
+ if parameter = parameter_for(actual)
45
+ if field = field_for(parameter)
46
+ expected_field = @value || @included_value
47
+ %(expected parameter #{@parameter_id.inspect} field #{field_name.inspect} to have value #{expected_field.inspect}, but got #{field.inspect})
48
+ else
49
+ %(expected parameter #{@parameter_id.inspect} to have type #{field_name.inspect})
50
+ end
51
+ else
52
+ %(expected to find parameter #{@parameter_id.inspect}, but got nothing)
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,9 @@
1
+ require "rspec/expectations"
2
+
3
+ module Chemtrail::RSpec
4
+ extend RSpec::Matchers::DSL
5
+
6
+ matcher :have_mapping do |expected|
7
+ match { |actual| actual.mappings.any? { |m| m.id == expected } }
8
+ end
9
+ end
@@ -0,0 +1,49 @@
1
+ require "rspec/expectations"
2
+
3
+ module Chemtrail::RSpec
4
+ extend RSpec::Matchers::DSL
5
+
6
+ matcher :have_mapping_key do |entry_name|
7
+ define_method :mapping_for do |actual|
8
+ actual.mappings.detect { |m| m.id == @mapping_id }
9
+ end
10
+
11
+ define_method :entry_for do |mapping|
12
+ mapping.entries[entry_name]
13
+ end
14
+
15
+ define_method :matches_value? do |entry|
16
+ if @included_value
17
+ entry.values_at(*@included_value.keys) == @included_value.values
18
+ else
19
+ true
20
+ end
21
+ end
22
+
23
+ match do |actual|
24
+ mapping = mapping_for(actual)
25
+ entry = entry_for(mapping)
26
+ !mapping.nil? && !entry.nil? && matches_value?(entry)
27
+ end
28
+
29
+ chain :on do |mapping_id|
30
+ @mapping_id = mapping_id
31
+ end
32
+
33
+ chain :including do |value|
34
+ @included_value = value
35
+ end
36
+
37
+ failure_message_for_should do |actual|
38
+ if mapping = mapping_for(actual)
39
+ if entry = entry_for(mapping)
40
+ %(expected mapping #{@mapping_id.inspect} field #{entry_name.inspect} to have value #{@included_value.inspect}, but got #{entry.inspect})
41
+ else
42
+ %(expected mapping #{@mapping_id.inspect} to have type #{entry_name.inspect})
43
+ end
44
+ else
45
+ %(expected to find mapping #{@mapping_id.inspect}, but got nothing)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,31 @@
1
+ require "rspec/expectations"
2
+
3
+ module Chemtrail::RSpec
4
+ extend RSpec::Matchers::DSL
5
+
6
+ matcher :have_parameter do |parameter_id|
7
+ define_method :parameter_for do |actual|
8
+ actual.parameters.detect { |param| param.id == parameter_id }
9
+ end
10
+
11
+ define_method :matches_type? do |actual|
12
+ @type.nil? || parameter_for(actual).type == @type
13
+ end
14
+
15
+ match do |actual|
16
+ !parameter_for(actual).nil? && matches_type?(actual)
17
+ end
18
+
19
+ chain :with_type do |type|
20
+ @type = type
21
+ end
22
+
23
+ failure_message_for_should do |actual|
24
+ if parameter = parameter_for(actual)
25
+ %(expected parameter #{parameter_id.inspect} to have type #{@type.inspect}, but got #{parameter.type.inspect})
26
+ else
27
+ %(expected to find parameter #{parameter_id.inspect}, but got nothing)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,59 @@
1
+ require "rspec/expectations"
2
+
3
+ module Chemtrail::RSpec
4
+ extend RSpec::Matchers::DSL
5
+
6
+ matcher :have_property do |property_name|
7
+ define_method :resource_for do |actual|
8
+ actual.resources.detect { |resource| resource.id == @resource_id }
9
+ end
10
+
11
+ define_method :property_for do |resource|
12
+ resource.properties[property_name]
13
+ end
14
+
15
+ define_method :matches_value? do |property|
16
+ if @value
17
+ property == @value
18
+ elsif @reference
19
+ property.id == @reference
20
+ else
21
+ true
22
+ end
23
+ end
24
+
25
+ match do |actual|
26
+ resource = resource_for(actual)
27
+ property = property_for(resource)
28
+ !resource.nil? && !property.nil? && matches_value?(property)
29
+ end
30
+
31
+ chain :on do |resource_id|
32
+ @resource_id = resource_id
33
+ end
34
+
35
+ chain :with_value do |value|
36
+ @value = value
37
+ end
38
+
39
+ chain :with_reference do |reference|
40
+ @reference = reference
41
+ end
42
+
43
+ failure_message_for_should do |actual|
44
+ if resource = resource_for(actual)
45
+ if property = property_for(resource)
46
+ if @value
47
+ %(expected resource #{@resource_id.inspect} property #{property_name.inspect} to have value #{@value.inspect}, but got #{property.inspect})
48
+ else
49
+ %(expected resource #{@resource_id.inspect} property #{property_name.inspect} to refer to #{@reference.inspect}, but got #{property.id.inspect})
50
+ end
51
+ else
52
+ %(expected resource #{@resource_id.inspect} to have property #{property_name.inspect})
53
+ end
54
+ else
55
+ %(expected to find resource #{@resource_id.inspect}, but got nothing)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,31 @@
1
+ require "rspec/expectations"
2
+
3
+ module Chemtrail::RSpec
4
+ extend RSpec::Matchers::DSL
5
+
6
+ matcher :have_resource do |resource_id|
7
+ define_method :resource_for do |actual|
8
+ actual.resources.detect { |resource| resource.id == resource_id }
9
+ end
10
+
11
+ define_method :matches_type? do |actual|
12
+ @type.nil? || resource_for(actual).type == @type
13
+ end
14
+
15
+ match do |actual|
16
+ !resource_for(actual).nil? && matches_type?(actual)
17
+ end
18
+
19
+ chain :with_type do |type|
20
+ @type = type
21
+ end
22
+
23
+ failure_message_for_should do |actual|
24
+ if resource = resource_for(actual)
25
+ %(expected resource #{resource_id.inspect} to have type #{@type.inspect}, but got #{resource.type.inspect})
26
+ else
27
+ %(expected to find resource #{resource_id.inspect}, but got nothing)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,60 @@
1
+ require "rspec/expectations"
2
+
3
+ module Chemtrail::RSpec
4
+ extend RSpec::Matchers::DSL
5
+
6
+ matcher :have_tag do |key_name|
7
+ define_method :resource_for do |actual|
8
+ actual.resources.detect { |resource| resource.id == @resource_id }
9
+ end
10
+
11
+ define_method :tag_for do |resource|
12
+ tags = resource.properties["Tags"] || []
13
+ tags.detect { |tag| tag["Key"] == key_name }
14
+ end
15
+
16
+ define_method :matches_value? do |tag|
17
+ if @value
18
+ tag["Value"] == @value
19
+ elsif @reference
20
+ tag["Value"].id == @reference
21
+ else
22
+ true
23
+ end
24
+ end
25
+
26
+ match do |actual|
27
+ resource = resource_for(actual)
28
+ tag = tag_for(resource)
29
+ !resource.nil? && !tag.nil? && matches_value?(tag)
30
+ end
31
+
32
+ chain :on do |resource_id|
33
+ @resource_id = resource_id
34
+ end
35
+
36
+ chain :with_value do |value|
37
+ @value = value
38
+ end
39
+
40
+ chain :with_reference do |reference|
41
+ @reference = reference
42
+ end
43
+
44
+ failure_message_for_should do |actual|
45
+ if resource = resource_for(actual)
46
+ if tag = tag_for(resource)
47
+ if @value
48
+ %(expected resource #{@resource_id.inspect} tag #{key_name.inspect} to have value #{@value.inspect}, but got #{tag["Value"].inspect})
49
+ else
50
+ %(expected resource #{@resource_id.inspect} tag #{key_name.inspect} to refer to #{@reference.inspect}, but got #{tag["Value"].id.inspect})
51
+ end
52
+ else
53
+ %(expected resource #{@resource_id.inspect} to have tag #{key_name.inspect})
54
+ end
55
+ else
56
+ %(expected to find resource #{@resource_id.inspect}, but got nothing)
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,9 +1,10 @@
1
1
  class Chemtrail::Resource
2
2
  attr_reader :id, :type
3
3
 
4
- def initialize(id, type)
4
+ def initialize(id, type, properties = nil)
5
5
  @id = id
6
6
  @type = type
7
+ @properties = Chemtrail::PropertyList.new.merge(properties) if properties
7
8
  end
8
9
 
9
10
  def to_reference
@@ -1,131 +1,8 @@
1
1
  require "chemtrail"
2
- require "rspec/expectations"
3
-
4
- module Chemtrail::RSpec
5
- extend RSpec::Matchers::DSL
6
-
7
- matcher :have_parameter do |parameter_id|
8
- define_method :parameter_for do |actual|
9
- actual.parameters.detect { |param| param.id == parameter_id }
10
- end
11
-
12
- define_method :matches_type? do |actual|
13
- @type.nil? || parameter_for(actual).type == @type
14
- end
15
-
16
- match do |actual|
17
- !parameter_for(actual).nil? && matches_type?(actual)
18
- end
19
-
20
- chain :with_type do |type|
21
- @type = type
22
- end
23
-
24
- failure_message_for_should do |actual|
25
- if parameter = parameter_for(actual)
26
- %(expected parameter #{parameter_id.inspect} to have type #{@type.inspect}, but got #{parameter.type.inspect})
27
- else
28
- %(expected to find parameter #{parameter_id.inspect}, but got nothing)
29
- end
30
- end
31
- end
32
-
33
- matcher :have_field do |field_name|
34
- define_method :parameter_for do |actual|
35
- actual.parameters.detect { |p| p.id == @parameter_id }
36
- end
37
-
38
- define_method :field_for do |parameter|
39
- parameter.fields[field_name]
40
- end
41
-
42
- define_method :matches_value? do |field|
43
- if @value
44
- field == @value
45
- elsif @included_value
46
- field.include?(@included_value)
47
- else
48
- true
49
- end
50
- end
51
-
52
- match do |actual|
53
- parameter = parameter_for(actual)
54
- field = field_for(parameter)
55
- !parameter.nil? && !field.nil? && matches_value?(field)
56
- end
57
-
58
- chain :on do |parameter_id|
59
- @parameter_id = parameter_id
60
- end
61
-
62
- chain :with_value do |value|
63
- @value = value
64
- end
65
-
66
- chain :including do |value|
67
- @included_value = value
68
- end
69
-
70
- failure_message_for_should do |actual|
71
- if parameter = parameter_for(actual)
72
- if field = field_for(parameter)
73
- expected_field = @value || @included_value
74
- %(expected parameter #{@parameter_id.inspect} field #{field_name.inspect} to have value #{expected_field.inspect}, but got #{field.inspect})
75
- else
76
- %(expected parameter #{@parameter_id.inspect} to have type #{field_name.inspect})
77
- end
78
- else
79
- %(expected to find parameter #{@parameter_id.inspect}, but got nothing)
80
- end
81
- end
82
- end
83
-
84
- matcher :have_mapping do |expected|
85
- match { |actual| actual.mappings.any? { |m| m.id == expected } }
86
- end
87
-
88
- matcher :have_mapping_key do |entry_name|
89
- define_method :mapping_for do |actual|
90
- actual.mappings.detect { |m| m.id == @mapping_id }
91
- end
92
-
93
- define_method :entry_for do |mapping|
94
- mapping.entries[entry_name]
95
- end
96
-
97
- define_method :matches_value? do |entry|
98
- if @included_value
99
- entry.values_at(*@included_value.keys) == @included_value.values
100
- else
101
- true
102
- end
103
- end
104
-
105
- match do |actual|
106
- mapping = mapping_for(actual)
107
- entry = entry_for(mapping)
108
- !mapping.nil? && !entry.nil? && matches_value?(entry)
109
- end
110
-
111
- chain :on do |mapping_id|
112
- @mapping_id = mapping_id
113
- end
114
-
115
- chain :including do |value|
116
- @included_value = value
117
- end
118
-
119
- failure_message_for_should do |actual|
120
- if mapping = mapping_for(actual)
121
- if entry = entry_for(mapping)
122
- %(expected mapping #{@mapping_id.inspect} field #{entry_name.inspect} to have value #{@included_value.inspect}, but got #{entry.inspect})
123
- else
124
- %(expected mapping #{@mapping_id.inspect} to have type #{entry_name.inspect})
125
- end
126
- else
127
- %(expected to find mapping #{@mapping_id.inspect}, but got nothing)
128
- end
129
- end
130
- end
131
- end
2
+ require "chemtrail/matchers/have_field"
3
+ require "chemtrail/matchers/have_mapping"
4
+ require "chemtrail/matchers/have_mapping_key"
5
+ require "chemtrail/matchers/have_parameter"
6
+ require "chemtrail/matchers/have_property"
7
+ require "chemtrail/matchers/have_resource"
8
+ require "chemtrail/matchers/have_tag"
@@ -1,3 +1,3 @@
1
1
  module Chemtrail
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -0,0 +1,14 @@
1
+ require "spec_helper"
2
+
3
+ describe Chemtrail::Intrinsic do
4
+ subject(:intrinsic) { Chemtrail::Intrinsic.new("Tacos") }
5
+
6
+ its(:id) { should == "Tacos" }
7
+ its(:to_reference) { should == {"Ref" => "Tacos"} }
8
+
9
+ describe "#as_tag" do
10
+ it "creates a tag with the given name" do
11
+ intrinsic.as_tag("Great").should == {"Key"=>"Great", "Value"=>intrinsic}
12
+ end
13
+ end
14
+ end
@@ -2,6 +2,7 @@ require "spec_helper"
2
2
 
3
3
  describe Chemtrail::Resource do
4
4
  subject(:resource) { Chemtrail::Resource.new("toenails", "Gross") }
5
+ let(:hash) { resource.to_hash["toenails"] }
5
6
 
6
7
  its(:id) { should == "toenails" }
7
8
  its(:type) { should == "Gross" }
@@ -14,10 +15,14 @@ describe Chemtrail::Resource do
14
15
  end
15
16
 
16
17
  context "when there is a property" do
17
- let(:hash) { resource.to_hash["toenails"] }
18
-
19
18
  before { resource.properties["UserDingus"] = "whatever" }
20
19
 
21
20
  specify { hash["Properties"].should include("UserDingus" => "whatever") }
22
21
  end
22
+
23
+ context "when a property is configured through the initializer" do
24
+ subject(:resource) { Chemtrail::Resource.new("toenails", "Gross", clipping: "great") }
25
+
26
+ specify { hash["Properties"].should include(clipping: "great") }
27
+ end
23
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chemtrail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Doc Ritezel
@@ -103,6 +103,7 @@ files:
103
103
  - examples/Guardfile
104
104
  - examples/lib/templates/config/mappings.yml
105
105
  - examples/lib/templates/config/parameters.yml
106
+ - examples/lib/templates/config/resources.yml
106
107
  - examples/lib/templates/opsworks_vpc_template.rb
107
108
  - examples/spec/lib/templates/opsworks_vpc_template_spec.rb
108
109
  - examples/spec/spec_helper.rb
@@ -110,7 +111,15 @@ files:
110
111
  - lib/chemtrail/class_name_inflector.rb
111
112
  - lib/chemtrail/cli.rb
112
113
  - lib/chemtrail/function.rb
114
+ - lib/chemtrail/intrinsic.rb
113
115
  - lib/chemtrail/mapping.rb
116
+ - lib/chemtrail/matchers/have_field.rb
117
+ - lib/chemtrail/matchers/have_mapping.rb
118
+ - lib/chemtrail/matchers/have_mapping_key.rb
119
+ - lib/chemtrail/matchers/have_parameter.rb
120
+ - lib/chemtrail/matchers/have_property.rb
121
+ - lib/chemtrail/matchers/have_resource.rb
122
+ - lib/chemtrail/matchers/have_tag.rb
114
123
  - lib/chemtrail/output.rb
115
124
  - lib/chemtrail/parameter.rb
116
125
  - lib/chemtrail/property_list.rb
@@ -124,6 +133,7 @@ files:
124
133
  - spec/lib/chemtrail/class_name_inflector_spec.rb
125
134
  - spec/lib/chemtrail/cli_spec.rb
126
135
  - spec/lib/chemtrail/function_spec.rb
136
+ - spec/lib/chemtrail/intrinsic_spec.rb
127
137
  - spec/lib/chemtrail/mapping_spec.rb
128
138
  - spec/lib/chemtrail/output_spec.rb
129
139
  - spec/lib/chemtrail/parameter_spec.rb
@@ -162,6 +172,7 @@ test_files:
162
172
  - spec/lib/chemtrail/class_name_inflector_spec.rb
163
173
  - spec/lib/chemtrail/cli_spec.rb
164
174
  - spec/lib/chemtrail/function_spec.rb
175
+ - spec/lib/chemtrail/intrinsic_spec.rb
165
176
  - spec/lib/chemtrail/mapping_spec.rb
166
177
  - spec/lib/chemtrail/output_spec.rb
167
178
  - spec/lib/chemtrail/parameter_spec.rb