Class: CfnDsl::JSONable
Overview
This is the base class for just about everything useful in the DSL. It knows how to turn DSL Objects into the corresponding json, and it lets you create new built in function objects from inside the context of a dsl object.
Direct Known Subclasses
AWS::Types::Type, ConditionDefinition, CreationPolicyDefinition, Fn, GenerateTypes::Type, MappingDefinition, MetadataDefinition, OS::Types::Type, OrchestrationTemplate, OutputDefinition, ParameterDefinition, PropertyDefinition, RefDefinition, ResourceDefinition, UpdatePolicyDefinition
Instance Method Summary
collapse
Methods included from Functions
FnAnd, FnBase64, FnEquals, FnFindInMap, FnFormat, FnGetAZs, FnGetAtt, FnIf, FnJoin, FnNot, FnOr, FnSelect, Ref
Methods included from RefCheck
#build_references
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(meth, *args, &_block) ⇒ Object
168
169
170
171
172
173
|
# File 'lib/cfndsl/jsonable.rb', line 168
def method_missing(meth, *args, &_block)
error = "Undefined symbol: #{meth}"
error = "#{error}(" + args.inspect[1..-2] + ')' unless args.empty?
error = "#{error}\n\nTry '#{titleize(meth)}' instead" if incorrect_capitalization?(meth)
CfnDsl::Errors.error(error, 1)
end
|
Instance Method Details
#as_json(_options = {}) ⇒ Object
Use instance variables to build a json object. Instance variables that begin with a single underscore are elided. Instance variables that begin with two underscores have one of them removed.
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
# File 'lib/cfndsl/jsonable.rb', line 138
def as_json(_options = {})
hash = {}
instance_variables.each do |var|
name = var[1..-1]
if name =~ /^__/
name = name[1..-1]
elsif name =~ /^_/
name = nil
end
hash[name] = instance_variable_get(var) if name
end
hash
end
|
#declare(&block) ⇒ Object
164
165
166
|
# File 'lib/cfndsl/jsonable.rb', line 164
def declare(&block)
instance_eval(&block) if block_given?
end
|
#incorrect_capitalization?(method) ⇒ Boolean
175
176
177
|
# File 'lib/cfndsl/jsonable.rb', line 175
def incorrect_capitalization?(method)
method != titleize(method) && respond_to?(titleize(method))
end
|
#ref_children ⇒ Object
160
161
162
|
# File 'lib/cfndsl/jsonable.rb', line 160
def ref_children
instance_variables.map { |var| instance_variable_get(var) }
end
|
#titleize(method) ⇒ Object
179
180
181
182
183
|
# File 'lib/cfndsl/jsonable.rb', line 179
def titleize(method)
method.to_s.clone.tap do |m|
m[0] = m[0, 1].upcase
end.to_sym
end
|
#to_json(*a) ⇒ Object
156
157
158
|
# File 'lib/cfndsl/jsonable.rb', line 156
def to_json(*a)
as_json.to_json(*a)
end
|