Module: Ecoportal::API::Common::GraphQL::HashHelpers::InstanceMethods

Included in:
Ecoportal::API::Common::GraphQL::HashHelpers
Defined in:
lib/ecoportal/api/common/graphql/hash_helpers.rb

Instance Method Summary collapse

Instance Method Details

#deep_dup(data) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/ecoportal/api/common/graphql/hash_helpers.rb', line 45

def deep_dup(data)
  case data
  when Hash
    data.each_with_object({}) do |(k,v), copy|
      if k.is_a?(::String) || k.is_a?(::Symbol)
        copy[k] = deep_dup(v)
      else
        copy.delete(k)
        copy[deep_dup(k)] = deep_dup(v)
      end
    end
  when Enumerable
    data.map {|d| deep_dup(d)}
  else
    data.dup
  end
end

#keys_to_s_deep(value) ⇒ Object



25
26
27
# File 'lib/ecoportal/api/common/graphql/hash_helpers.rb', line 25

def keys_to_s_deep(value)
  transform_keys_deep(value) {|k| k.to_s}
end

#keys_to_sym_deep(value) ⇒ Object



21
22
23
# File 'lib/ecoportal/api/common/graphql/hash_helpers.rb', line 21

def keys_to_sym_deep(value)
   transform_keys_deep(value) {|k| k.to_sym}
end

#remove_nil_keys_deep(value, target: []) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/ecoportal/api/common/graphql/hash_helpers.rb', line 29

def remove_nil_keys_deep(value, target: [])
  target = [target].flatten.compact unless target.is_a?(Array)
  return value if target.empty?
  case value
  when Hash
    value.dup.each_with_object({}) do |(k, v), out|
      next unless v || !target.include?(k)
      out[k] = remove_nil_keys_deep(v, target: target)
    end
  when Enumerable
    value.map {|v| remove_nil_keys_deep(v, target: target)}
  else
    value
  end
end

#transform_keys_deep(value, &block) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/ecoportal/api/common/graphql/hash_helpers.rb', line 7

def transform_keys_deep(value, &block)
  case value
  when Hash
    value.dup.each_with_object({}) do |(k, v), out|
      k_val = block_given?? yield(k) : k
      out[k_val] = keys_to_sym_deep(v)
    end
  when Enumerable
    value.map {|v| keys_to_sym_deep(v)}
  else
    value
  end
end