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, &block) ⇒ Object
Deep transform the keys in an object (Hash/Array).
-
.normalize_object(object) ⇒ Object
Recursively normalizes hash objects with camelized string keys.
-
.squish(string) ⇒ Object
Removes leading/trailing whitespaces and squishes inner whitespace with a single space.
-
.strip_heredoc(string, inline: false) ⇒ Object
Remove minimum spaces from the front of all lines within a string.
Class Method Details
.deep_assign(hash, keys, value) ⇒ Object
Assign value to a hash using an array of keys to traverse
37 38 39 40 41 42 43 44 45 |
# File 'lib/grover/utils.rb', line 37 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
79 80 81 82 83 84 85 86 87 |
# File 'lib/grover/utils.rb', line 79 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
69 70 71 |
# File 'lib/grover/utils.rb', line 69 def self.deep_stringify_keys(hash) deep_transform_keys_in_object hash, &:to_s end |
.deep_transform_keys_in_object(object, &block) ⇒ Object
Deep transform the keys in an object (Hash/Array)
Copied from active support
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/grover/utils.rb', line 53 def self.deep_transform_keys_in_object(object, &block) case object when Hash object.each_with_object({}) do |(key, value), result| result[yield(key)] = 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) ⇒ Object
Recursively normalizes hash objects with camelized string keys
92 93 94 |
# File 'lib/grover/utils.rb', line 92 def self.normalize_object(object) deep_transform_keys_in_object(object) { |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.
16 17 18 19 20 21 |
# File 'lib/grover/utils.rb', line 16 def self.squish(string) string. gsub(/\A[[:space:]]+/, ''). gsub(/[[:space:]]+\z/, ''). gsub(/[[:space:]]+/, ' ') end |
.strip_heredoc(string, inline: false) ⇒ Object
Remove minimum spaces from the front of all lines within a string
Based on active support
29 30 31 32 |
# File 'lib/grover/utils.rb', line 29 def self.strip_heredoc(string, inline: false) string = string.gsub(/^#{string.scan(/^[ \t]*(?=\S)/).min}/, ''.freeze) inline ? string.delete("\n") : string end |