63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
# File 'lib/cloud_former/has_properties_and_attributes.rb', line 63
def make_aws_accessor(name, options)
define_method(name) do |*args, &block|
if block
if options[:type] < CloudFormer::ResourceProperty || options[:type] < CloudFormer::Resource
value = if options[:list]
count = args.shift
if count == :list
instances = List.new(options, *args, &block).entries
self.nested_resources.concat(instances) if options[:type] < CloudFormer::Resource
instances
else
count.times.map do |i|
instance = options[:type].new(*args) { instance_exec(i, &block) }
self.nested_resources << instance if options[:type] < CloudFormer::Resource
instance
end
end
else
instance = options[:type].new(*args, &block)
self.nested_resources << instance if instance.is_a?(CloudFormer::Resource)
instance
end
else
raise ArgumentError, "Can't construct #{options[:type]} using block syntax."
end
instance_variable_set("@#{name}_property_instance_var", value)
else
if args.size == 1
val = args.first
if options[:list] && !val.respond_to?(:each)
if (!val.respond_to?(:acts_as_list?) || !val.acts_as_list?) && options[:list] != :ok
raise ArgumentError.new(
"A list is required for #{name} in #{self.class.name}, but a #{val.class.name} was given."
)
end
end
if options[:list]
unless val.respond_to?(:acts_as_list?) && val.acts_as_list?
if options[:list] == :ok
if val.respond_to?(:each)
val.each do |item|
self.class.check_type_of_aws_value(name, item, options)
end
else
self.class.check_type_of_aws_value(name, val, options)
end
else
val.each do |item|
self.class.check_type_of_aws_value(name, item, options)
end
end
end
else
self.class.check_type_of_aws_value(name, val, options)
end
instance_variable_set("@#{name}_property_instance_var", val)
elsif args.size > 1
raise ArgumentError, "wrong number of arguments (#{args.size} for 0..1)"
end
end
if instance_variable_defined?("@#{name}_property_instance_var")
instance_variable_get("@#{name}_property_instance_var")
else
nil
end
end
end
|