Class: Grover::Utils
Overview
Utility class for Grover helper methods
Class Method Summary collapse
-
.deep_assign(hash, keys, value) ⇒ Object
Assign value to a hash using an array of keys to traverse.
-
.deep_merge!(hash, other_hash) ⇒ Object
Deep merge a hash with another hash.
-
.deep_stringify_keys(hash) ⇒ Object
Deep transform the keys in the hash to strings.
-
.deep_transform_keys_in_object(object, excluding: [], &block) ⇒ Object
Deep transform the keys in an object (Hash/Array).
-
.normalize_object(object, excluding: []) ⇒ Object
Recursively normalizes hash objects with camelized string keys.
-
.squish(string) ⇒ Object
Removes leading/trailing whitespaces and squishes inner whitespace with a single space.
Class Method Details
.deep_assign(hash, keys, value) ⇒ Object
Assign value to a hash using an array of keys to traverse
31 32 33 34 35 36 37 38 39 |
# File 'lib/grover/utils.rb', line 31 def self.deep_assign(hash, keys, value) if keys.length == 1 hash[keys.first] = value else key = keys.shift hash[key] ||= {} deep_assign hash[key], keys, value end end |
.deep_merge!(hash, other_hash) ⇒ Object
Deep merge a hash with another hash
Based on active support
74 75 76 77 78 79 80 81 82 |
# File 'lib/grover/utils.rb', line 74 def self.deep_merge!(hash, other_hash) hash.merge!(other_hash) do |_, this_val, other_val| if this_val.is_a?(Hash) && other_val.is_a?(Hash) deep_merge! this_val.dup, other_val else other_val end end end |
.deep_stringify_keys(hash) ⇒ Object
Deep transform the keys in the hash to strings
64 65 66 |
# File 'lib/grover/utils.rb', line 64 def self.deep_stringify_keys(hash) deep_transform_keys_in_object hash, &:to_s end |
.deep_transform_keys_in_object(object, excluding: [], &block) ⇒ Object
Deep transform the keys in an object (Hash/Array)
Copied from active support
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/grover/utils.rb', line 47 def self.deep_transform_keys_in_object(object, excluding: [], &block) # rubocop:disable Metrics/MethodLength case object when Hash object.each_with_object({}) do |(key, value), result| new_key = yield(key) result[new_key] = excluding.include?(new_key) ? value : deep_transform_keys_in_object(value, &block) end when Array object.map { |e| deep_transform_keys_in_object(e, &block) } else object end end |
.normalize_object(object, excluding: []) ⇒ Object
Recursively normalizes hash objects with camelized string keys
87 88 89 |
# File 'lib/grover/utils.rb', line 87 def self.normalize_object(object, excluding: []) deep_transform_keys_in_object(object, excluding: excluding) { |k| normalize_key(k) } end |
.squish(string) ⇒ Object
Removes leading/trailing whitespaces and squishes inner whitespace with a single space
N.B. whitespace includes all ‘blank’ characters as well as newlines/carriage returns etc.
21 22 23 24 25 26 |
# File 'lib/grover/utils.rb', line 21 def self.squish(string) string. gsub(/\A[[:space:]]+/, ''). gsub(/[[:space:]]+\z/, ''). gsub(/[[:space:]]+/, ' ') end |