module Comprehensible

Constants

MAJOR
MICRO
MINOR
VERSION

Public Class Methods

load_all(path) click to toggle source
# File lib/comprehensible.rb, line 11
def load_all path
  Dir[File.join(root, path, '*.rb')].each { |f| load f }
end
require_all(path) click to toggle source
# File lib/comprehensible.rb, line 7
def require_all path
  Dir[File.join(root, path, '*.rb')].each { |f| require f }
end
root() click to toggle source
# File lib/comprehensible.rb, line 3
def root
  @@root ||= File.expand_path(File.dirname(__FILE__))
end

Public Instance Methods

comprehension(labeled_enums, filters=[], mappers=[]) click to toggle source
# 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

Private Instance Methods

construct_filters(filters) click to toggle source
# File lib/comprehensible/comprehension.rb, line 36
def construct_filters(filters)
  grouped_filters = filters.group_by(&:extract_required_parameters)
  grouped_filters.default = []

  grouped_filters
end
construct_mappers(mappers) click to toggle source
# File lib/comprehensible/comprehension.rb, line 25
def construct_mappers(mappers)
  grouped_mappers = mappers.group_by(&:extract_required_parameters)

  composed_mappers = grouped_mappers.reduce({}) do |accum, (key, values)|
    accum[key] = values.reduce(:*)
    accum
  end

  composed_mappers
end