class CfnCamelizer
Custom Camelizer with CloudFormation specific handling. Based on: stackoverflow.com/questions/8706930/converting-nested-hash-keys-from-camelcase-to-snake-case-in-ruby
Constants
- VERSION
Public Class Methods
camelize(value, resource_type=nil)
click to toggle source
# File lib/cfn_camelizer.rb, line 58 def camelize(value, resource_type=nil) return value if value.is_a?(Integer) value = value.to_s.camelize v = special_map[value] || value # after the special_keys map resource_map(resource_type)[v] || v end
camelize_key(k, parent_keys=[], resource_type=nil)
click to toggle source
# File lib/cfn_camelizer.rb, line 34 def camelize_key(k, parent_keys=[], resource_type=nil) 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, resource_type) end end
camelizer_yaml()
click to toggle source
# File lib/cfn_camelizer.rb, line 82 def camelizer_yaml # default path = File.expand_path("camelizer.yml", File.dirname(__FILE__)) default = YAML.load_file(path) # project specific path = "#{Dir.pwd}/configs/camelizer.yml" if File.exist?(path) project = YAML.load_file(path) default.deep_merge(project) else default end end
pascalize(value)
click to toggle source
# File lib/cfn_camelizer.rb, line 66 def pascalize(value) new_value = value.camelize first_char = new_value[0..0].downcase new_value[0] = first_char new_value end
passthrough?(k, parent_keys)
click to toggle source
# File lib/cfn_camelizer.rb, line 49 def passthrough?(k, parent_keys) # Do not transform keys under certain parent keys or keys that contain - or / passthrough = camelizer_yaml["passthrough_parent_keys"] intersection = parent_keys & passthrough top_level_parameters = parent_keys.first == "Parameters" return false if top_level_parameters !intersection.empty? || k.include?('-') || k.include?('/') || k.include?('.') end
resource_map(resource_type)
click to toggle source
# File lib/cfn_camelizer.rb, line 78 def resource_map(resource_type) camelizer_yaml["resource_keys"][resource_type] || {} end
special_map()
click to toggle source
Some keys have special mappings
# File lib/cfn_camelizer.rb, line 74 def special_map camelizer_yaml["special_keys"] end
transform(value, parent_keys=[], resource_type=nil)
click to toggle source
# File lib/cfn_camelizer.rb, line 14 def transform(value, parent_keys=[], resource_type=nil) case value when Array value.map { |v| transform(v, parent_keys, resource_type) } when Hash camelized_copy = value.dup.deep_transform_keys { |k| k.to_s.camelize } if camelized_copy.keys.include?("Type") resource_type ||= camelized_copy["Type"] end initializer = value.map do |k, v| new_key = camelize_key(k, parent_keys, resource_type) [new_key, transform(v, parent_keys+[new_key], resource_type)] end Hash[initializer] else value # do not transform values end end