lib/alegra/utilities/hash.rb in alegra-0.1.1 vs lib/alegra/utilities/hash.rb in alegra-0.1.2

- old
+ new

@@ -1,22 +1,34 @@ class Hash def deep_camel_case_lower_keys(hash=self) {}.tap { |h| - hash.each { |key, value| h[transform_key(key)] = map_value(value) } + hash.each { |key, value| h[camel_case_lower_key(key)] = map_value(value, :deep_camel_case_lower_keys) } } end - def map_value(thing) + def deep_underscore_keys(hash=self) + {}.tap { |h| + hash.each { |key, value| h[underscore_key(key)] = map_value(value, :deep_underscore_keys) } + } + end + + private + + def underscore_key(key) + key.to_s.underscore.to_sym + end + + def camel_case_lower_key(key) + key.to_s.split('_').inject([]){ |buffer, e| buffer.push(buffer.empty? ? e : e.capitalize) }.join.to_sym + end + + def map_value(thing, method) case thing when Hash - deep_camel_case_lower_keys(thing) + __send__(method, thing) when Array - thing.map { |v| map_value(v) } + thing.map { |v| map_value(v, method) } else thing end - end - - def transform_key(key) - key.to_s.split('_').inject([]){ |buffer, e| buffer.push(buffer.empty? ? e : e.capitalize) }.join.to_sym end end \ No newline at end of file