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