lib/cfndsl/CloudFormationTemplate.rb in cfndsl-0.0.11 vs lib/cfndsl/CloudFormationTemplate.rb in cfndsl-0.0.12

- old
+ new

@@ -1,6 +1,7 @@ require 'cfndsl/JSONable' +require 'cfndsl/names' module CfnDsl class CloudFormationTemplate < JSONable ## # Handles the overall template object @@ -73,47 +74,53 @@ klassname = name.split("::").join("_") CfnDsl::Types.const_set( klassname, klass ) type["Properties"].each_pair do |pname, ptype| if( ptype.instance_of? String ) create_klass = CfnDsl::Types.const_get( ptype ); + klass.class_eval do - define_method(pname) do |*values, &block| - if( values.length <1 ) then - values.push create_klass.new + CfnDsl::methodNames(pname) do |method| + define_method(method) do |*values, &block| + if( values.length <1 ) then + values.push create_klass.new + end + @Properties ||= {} + @Properties[pname] ||= CfnDsl::PropertyDefinition.new( *values ) + @Properties[pname].value.instance_eval &block if block + @Properties[pname].value end - @Properties ||= {} - @Properties[pname] ||= CfnDsl::PropertyDefinition.new( *values ) - @Properties[pname].value.instance_eval &block if block - @Properties[pname].value end end else #Array version sing_name = CfnDsl::Plurals.singularize( pname ) create_klass = CfnDsl::Types.const_get( ptype[0] ) klass.class_eval do - define_method(pname) do |*values, &block| - if( values.length < 1 ) then - values.push [] + CfnDsl::methodNames(pname) do |method| + define_method(method) do |*values, &block| + if( values.length < 1 ) then + values.push [] + end + @Properties ||= {} + @Properties[pname] ||= PropertyDefinition.new( *values ) + @Properties[pname].value.instance_eval &block if block + @Properties[pname].value end - @Properties ||= {} - @Properties[pname] ||= PropertyDefinition.new( *values ) - @Properties[pname].value.instance_eval &block if block - @Properties[pname].value end - define_method(sing_name) do |value=nil, &block| - @Properties ||= {} - @Properties[pname] ||= PropertyDefinition.new( [] ) - if( !value ) then - value = create_klass.new + CfnDsl::methodNames(sing_name) do |method| + define_method(method) do |value=nil, &block| + @Properties ||= {} + @Properties[pname] ||= PropertyDefinition.new( [] ) + if( !value ) then + value = create_klass.new + end + @Properties[pname].value.push value + value.instance_eval &block if block + value end - @Properties[pname].value.push value - value.instance_eval &block if block - value end - end end end parts = name.split "::" @@ -134,16 +141,18 @@ #Define property setter methods for each of the unambiguous type names names.each_pair do |typename,type| if(type) then class_eval do - define_method( typename) do |name,*values,&block| - name = name.to_s - @Resources ||= {} - resource = @Resources[name] ||= type.new(*values) - resource.instance_eval &block if block - resource.instance_variable_set( "@Type", nametypes[typename] ) - resource + CfnDsl::methodNames(typename) do |method| + define_method(method) do |name,*values,&block| + name = name.to_s + @Resources ||= {} + resource = @Resources[name] ||= type.new(*values) + resource.instance_eval &block if block + resource.instance_variable_set( "@Type", nametypes[typename] ) + resource + end end end end end end