Module: DeeplyEnumerable::Enumerable::ClassMethods

Defined in:
lib/deeply_enumerable/enumerable.rb

Instance Method Summary collapse

Instance Method Details

#deep_compact(object) ⇒ Object

Recursively removes nil values. Mirrors Ruby’s Array#compact / Hash#compact.



35
36
37
# File 'lib/deeply_enumerable/enumerable.rb', line 35

def deep_compact(object)
  deep_rebuild(object).deep_compact
end

#deep_compact_blank(object) ⇒ Object

Recursively removes every blank value. Mirrors Rails’ Enumerable#compact_blank.



53
54
55
# File 'lib/deeply_enumerable/enumerable.rb', line 53

def deep_compact_blank(object)
  deep_rebuild(object).deep_compact_blank
end

#deep_compact_blanked(object) ⇒ Object

Recursively removes nils and collections that became blank through compaction, while keeping values that were already blank.



47
48
49
# File 'lib/deeply_enumerable/enumerable.rb', line 47

def deep_compact_blanked(object)
  deep_rebuild(object).deep_compact_blanked
end

#deep_compact_existing_blank(object) ⇒ Object

Recursively removes nils and values that are already blank, while keeping collections that only become blank as a result of compaction.



41
42
43
# File 'lib/deeply_enumerable/enumerable.rb', line 41

def deep_compact_existing_blank(object)
  deep_rebuild(object).deep_compact_existing_blank
end

#deep_rebuild(object) ⇒ Object



28
29
30
31
# File 'lib/deeply_enumerable/enumerable.rb', line 28

def deep_rebuild(object)
  check_object_class(object)
  new.tap { |deeply_enumerable_object| object.each { |value| deeply_enumerable_object.push(rebuild(value)) } }
end

#rebuild(object) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/deeply_enumerable/enumerable.rb', line 16

def rebuild(object)
  deeply_enumerable_class_name = DeeplyEnumerable.constants(false).detect do |const|
    deeply_enumerable_const = DeeplyEnumerable.const_get(const)
    deeply_enumerable_const.respond_to?(:superclass) ? !!object.is_a?(deeply_enumerable_const.superclass) : false
  end

  return object if deeply_enumerable_class_name.nil?

  deeply_enumerable_class = DeeplyEnumerable.const_get(deeply_enumerable_class_name)
  deeply_enumerable_class.respond_to?(:deep_rebuild) ? deeply_enumerable_class.deep_rebuild(object) : object
end

#unenumerableObject



57
58
59
# File 'lib/deeply_enumerable/enumerable.rb', line 57

def unenumerable
  @unenumerable ||= UNENUMERABLE.map { |unenumerable| unenumerable.constantize rescue nil }.compact
end