Method: Securial::Helpers::KeyTransformer.deep_transform_keys

Defined in:
lib/securial/helpers/key_transformer.rb

.deep_transform_keys(obj) {|key| ... } ⇒ Object

Recursively transforms all keys in a nested data structure.

Applies a key transformation block to all hash keys in a deeply nested structure containing hashes, arrays, and other objects. The transformation preserves the structure while only modifying the keys.

Examples:

Transforming a simple hash

data = { user_name: "john", user_email: "[email protected]" }
KeyTransformer.deep_transform_keys(data) { |key| key.to_s.upcase }
# => { "USER_NAME" => "john", "USER_EMAIL" => "[email protected]" }

Transforming nested structures

nested = {
  user_info: {
    first_name: "John",
    addresses: [
      { street_name: "Main St", zip_code: "12345" }
    ]
  }
}
result = KeyTransformer.deep_transform_keys(nested) { |key|
  KeyTransformer.camelize(key, :lowerCamelCase)
}
# => {
#   userInfo: {
#     firstName: "John",
#     addresses: [
#       { streetName: "Main St", zipCode: "12345" }
#     ]
#   }
# }

Non-hash objects are preserved

mixed = ["string", 123, { user_name: "john" }]
KeyTransformer.deep_transform_keys(mixed) { |key| key.to_s.upcase }
# => ["string", 123, { "USER_NAME" => "john" }]

Parameters:

  • obj (Object)

    The object to transform (Hash, Array, or other)

Yield Parameters:

  • key (String, Symbol)

    Each hash key to be transformed

Yield Returns:

  • (String, Symbol)

    The transformed key

Returns:

  • (Object)

    The transformed object with modified keys



127
128
129
130
131
132
133
134
135
136
# File 'lib/securial/helpers/key_transformer.rb', line 127

def self.deep_transform_keys(obj, &block)
  case obj
  when Hash
    obj.transform_keys(&block).transform_values { |v| deep_transform_keys(v, &block) }
  when Array
    obj.map { |e| deep_transform_keys(e, &block) }
  else
    obj
  end
end