Module: Comprehensible

Included in:
Array
Defined in:
lib/comprehensible.rb,
lib/comprehensible/version.rb,
lib/comprehensible/comprehension.rb

Constant Summary collapse

MAJOR =
0
MINOR =
1
MICRO =
0
VERSION =
[MAJOR, MINOR, MICRO].join('.')

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.load_all(path) ⇒ Object



11
12
13
# File 'lib/comprehensible.rb', line 11

def load_all path
  Dir[File.join(root, path, '*.rb')].each { |f| load f }
end

.require_all(path) ⇒ Object



7
8
9
# File 'lib/comprehensible.rb', line 7

def require_all path
  Dir[File.join(root, path, '*.rb')].each { |f| require f }
end

.rootObject



3
4
5
# File 'lib/comprehensible.rb', line 3

def root
  @@root ||= File.expand_path(File.dirname(__FILE__))
end

Instance Method Details

#comprehension(labeled_enums, filters = [], mappers = []) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/comprehensible/comprehension.rb', line 2

def comprehension(labeled_enums, filters=[], mappers=[])
  filters = construct_filters(filters)
  mappers = construct_mappers(mappers)

  filtered = labeled_enums.reduce({}) do |accum, (key, values)|
    values.each do |val|
      inc = filters[key].map { |filter| filter[val] }.all?

      (accum[key] ||= []) << val if inc
    end
    accum
  end

  mapped = filtered.reduce({}) do |accum, (key, values)|
    mappers[key] ? accum[key] = values.map { |value| mappers[key][value] } : accum[key] = values
    accum
  end

  self.new(mapped.keys.count >= 2 ? mapped.values.self_zip : mapped.values.flatten)
end