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
- #deep_dup(data) ⇒ Object
- #keys_to_s_deep(value) ⇒ Object
- #keys_to_sym_deep(value) ⇒ Object
- #remove_nil_keys_deep(value, target: []) ⇒ Object
- #transform_keys_deep(value, &block) ⇒ Object
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 |