class Jets::Camelizer
def camelize(value)
def camelize(value) return value if value.is_a?(Integer) value = value.to_s.camelize special_map[value] || value end
def camelize_key(k, parent_keys=[])
def camelize_key(k, parent_keys=[]) k = k.to_s if passthrough?(k, parent_keys) k # pass through untouch elsif parent_keys.last == "EventPattern" # top-level k.dasherize elsif parent_keys.include?("EventPattern") # Any keys at 2nd level under EventPattern will be pascalized pascalize(k) else camelize(k) end end
def pascalize(value)
def pascalize(value) new_value = value.camelize first_char = new_value[0..0].downcase new_value[0] = first_char new_value end
def passthrough?(k, parent_keys)
def passthrough?(k, parent_keys) # do not transform keys anything under these special keys parent_keys.include?("Variables") || parent_keys.include?("ResponseParameters") || parent_keys.include?("Fn::Sub") || k.include?('-') || k.include?('/') end
def special_map
def special_map { "TemplateUrl" => "TemplateURL", "Ttl" => "TTL", "MaxReceiveCount" => "maxReceiveCount", "DeadLetterTargetArn" => "deadLetterTargetArn", "DbSubnetGroupDescription" => "DBSubnetGroupDescription", "DbSubnetGroupName" => "DBSubnetGroupName", } end
def transform(value, parent_keys=[])
def transform(value, parent_keys=[]) case value when Array value.map { |v| transform(v, parent_keys) } when Hash initializer = value.map do |k, v| new_key = camelize_key(k, parent_keys) [new_key, transform(v, parent_keys+[new_key])] end Hash[initializer] else value # do not transform values end end