Class: Grover::Utils

Inherits:
Object show all
Defined in:
lib/grover/utils.rb

Overview

Utility class for Grover helper methods

Class Method Summary collapse

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

See Also:

  • active_support/core_ext/hash/deep_mergeactive_support/core_ext/hash/deep_merge.rb


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

See Also:

  • active_support/core_ext/hash/keysactive_support/core_ext/hash/keys.rb


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