Last active
December 23, 2018 17:22
-
-
Save brentdodell/f5e336ac8ed8f83082a4f832a7cd5807 to your computer and use it in GitHub Desktop.
Hash extensions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Hash | |
def sample(n = 1) | |
Hash[to_a.sample(n)] | |
end | |
def deep_flatten | |
flat_map { |k, v| [k, *(v.respond_to?(:deep_flatten) ? v.deep_flatten : v)] } | |
end | |
def flat_join_keys(prefix: nil, separator: '-', memo: {}) | |
each do |key, value| | |
joined_key = [prefix, key].compact.join(separator).underscore.to_sym | |
if value.respond_to?(:flat_join_keys) | |
value.flat_join_keys(prefix: key, memo: memo) | |
else | |
memo[joined_key] = value | |
end | |
end | |
memo | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hash#sample(n = 1): retrieve n number of random key/value pairs out of hash
Hash#deep_flatten: flatten hash into one dimensional Array, ie:
becomes
becomes