Method: MLL.dimensions

Defined in:
lib/mll.rb

.dimensionsObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/mll.rb', line 5

def dimensions
  lambda do |list, limit = nil|
    list = [list]
    enumerator = Enumerator.new do |e|
      # String.size shall not pass
      while list.all?{ |i| i.respond_to? :each } &&
            list.map(&:size).uniq.size == 1
        # TODO refactor into depth-first yielding
        e << list.first.size
        list.flatten! 1
      end
    end
    limit ? enumerator.lazy.take(limit) : enumerator
  end
end