class Object
Public Class Methods
convert_keys(hash, method = :underscore)
click to toggle source
# File lib/hash_pipe/key_conversion.rb, line 3 def self.convert_keys(hash, method = :underscore) if method.is_a? Proc converter = method else converter = -> (str) { str.to_s.send method } end if hash.is_a?(Array) hash.collect {|h| convert_keys(h, converter) } elsif hash.is_a?(Hash) hash_array = hash.collect do |key,value| [ converter.call(key), convert_keys(value, converter) ] end Hash[hash_array] else hash end end
Public Instance Methods
convert_keys(method = :underscore)
click to toggle source
# File lib/hash_pipe/key_conversion.rb, line 23 def convert_keys(method = :underscore) Hash.convert_keys self, method end
except(*keys)
click to toggle source
# File lib/hash_pipe/value_checks.rb, line 7 def except(*keys) keys.collect! &:to_s self.reject {|k,v| keys.include? k.to_s } end
flatten_keys(prefix: "", postfix: "", delimiter: "")
click to toggle source
Flattens a hash with delimiters and key prefix/postfix.
hash = { "errors" => { "something" => { "somethingElse" => { "password" => ["VALIDATION_STATE_PASSWORD"] } } } }
Could be turned into a flattened hash using this:
hash.string_from_hash prefix: "registration[", delimiter: "][", postfix: "]"
And the end result would look like this:
{ "registration[errors][something][somethingElse][password]" => ["VALIDATION_STATE_PASSWORD"] }
# File lib/hash_pipe/flattening.rb, line 21 def flatten_keys(prefix: "", postfix: "", delimiter: "") each_with_object({}) do |(k, v), ret| key = k.to_s if v.is_a? Hash ret.merge! v.flatten_keys(prefix: prefix + key + delimiter, postfix: postfix, delimiter: delimiter) if v.present? else ret[prefix + key + postfix] = v end end end
nested_delete(path)
click to toggle source
# File lib/hash_pipe/nested_values.rb, line 7 def nested_delete(path) path = Array(path).dup last_path_element = path.pop nested_fetch(path).delete last_path_element end
nested_fetch(path)
click to toggle source
# File lib/hash_pipe/nested_values.rb, line 3 def nested_fetch(path) Array(path).dup.reduce(self) { |current, key| current[key] } end
no_blank_values()
click to toggle source
# File lib/hash_pipe/value_checks.rb, line 3 def no_blank_values self.reject { |k,v| v.blank? } end
only(*keys)
click to toggle source
# File lib/hash_pipe/value_checks.rb, line 12 def only(*keys) keys.collect! &:to_s self.select {|k,v| keys.include? k.to_s } end
to_nested_hash()
click to toggle source
Creates a deep object out of an array
hash = [“errors”, “something”, “somethingElse”, “password”, [“VALIDATION_STATE_PASSWORD”]]
Could be turned into an object usign this
hash.nest
And the end result would look like this:
“errors” => {
"something" => { "somethingElse" => { "password" => ["VALIDATION_STATE_PASSWORD"] } }
}
# File lib/hash_pipe/array_conversion.rb, line 20 def to_nested_hash raise ArgumentError, "Values in array can't be nil" if any? &:nil? reverse.inject { |hash, key| {key => hash} } end