Class: CfnDsl::JSONable

Inherits:
Object
  • Object
show all
Extended by:
Functions
Includes:
Functions, RefCheck
Defined in:
lib/cfndsl/jsonable.rb

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.

Class Method Summary collapse

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



176
177
178
179
180
181
# File 'lib/cfndsl/jsonable.rb', line 176

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

Class Method Details

.external_parametersObject



134
135
136
# File 'lib/cfndsl/jsonable.rb', line 134

def self.external_parameters
  CfnDsl::ExternalParameters.current
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.



146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/cfndsl/jsonable.rb', line 146

def as_json(_options = {})
  hash = {}
  instance_variables.each do |var|
    name = var[1..-1]

    if name =~ /^__/
      # if a variable starts with double underscore, strip one off
      name = name[1..-1]
    elsif name =~ /^_/
      # Hide variables that start with single underscore
      name = nil
    end

    hash[name] = instance_variable_get(var) if name
  end
  hash
end

#declare(&block) ⇒ Object



172
173
174
# File 'lib/cfndsl/jsonable.rb', line 172

def declare(&block)
  instance_eval(&block) if block_given?
end

#external_parametersObject



138
139
140
# File 'lib/cfndsl/jsonable.rb', line 138

def external_parameters
  self.class.external_parameters
end

#incorrect_capitalization?(method) ⇒ Boolean

Returns:

  • (Boolean)


183
184
185
# File 'lib/cfndsl/jsonable.rb', line 183

def incorrect_capitalization?(method)
  method != titleize(method) && respond_to?(titleize(method))
end

#ref_childrenObject



168
169
170
# File 'lib/cfndsl/jsonable.rb', line 168

def ref_children
  instance_variables.map { |var| instance_variable_get(var) }
end

#titleize(method) ⇒ Object



187
188
189
190
191
# File 'lib/cfndsl/jsonable.rb', line 187

def titleize(method)
  method.to_s.clone.tap do |m|
    m[0] = m[0, 1].upcase
  end.to_sym
end

#to_json(*a) ⇒ Object



164
165
166
# File 'lib/cfndsl/jsonable.rb', line 164

def to_json(*a)
  as_json.to_json(*a)
end