Module: TreeReject

Extended by:
TreeReject
Included in:
TreeReject
Defined in:
lib/tree_reject.rb,
lib/tree_reject/version.rb

Defined Under Namespace

Modules: TreeRejectHash

Constant Summary collapse

VERSION =
'0.1.0'

Instance Method Summary collapse

Instance Method Details

#tree_reject(map, ignored_keys) ⇒ Object

returns a new map with the ignored keys removed ignored_keys must be an array of IKItems IKItem is the type <Symbol | Array<IkItem> | Hash<Symbol, IKItem>> keys are only removed if their path in the trees match



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/tree_reject.rb', line 18

def tree_reject(map, ignored_keys)
  ignored_leaves = extract_leaves(ignored_keys)
  ignored_subtrees = extract_subtrees(ignored_keys, ignored_leaves)

  map.to_h.each_with_object({}) do |(k, v), cleaned|
    if ignored_leaves.include?(k)
      next
    elsif v.is_a?(Hash) || v.respond_to?(:attributes)
      cleaned_v = tree_reject(v.to_h, ignored_subtrees[k])
      cleaned[k] = cleaned_v unless cleaned_v == {}
    elsif !v.nil?
      cleaned[k] = v
    end
  end
end