class Hash(K, V)
def deep_transform_values(&block : V -> _)
_deep_transform_values_in_object self, &block
end
def deep_transform_values!(&block : V -> V)
_deep_transform_values_in_object! self, &block
end
private def _deep_transform_values_in_object(object, &block : V -> _)
case object
when Hash
object.transform_values { |v| _deep_transform_values_in_object v, &block }
when Array
object.map { |e| _deep_transform_values_in_object e, &block }
else
return object
end
end
private def _deep_transform_values_in_object!(object, &block : V -> V)
case object
when Hash
object.transform_values! { |value| _deep_transform_values_in_object! value, &block }
when Array
object.map! { |e| _deep_transform_values_in_object! e, &block }
else
yield object
end
end
end