lib/axiom/function/predicate/enumerable.rb
# encoding: utf-8
module Axiom
class Function
class Predicate
# A mixin for predicates matching an enumerable
module Enumerable
# Return the method to test the enumerable with
#
# @param [#cover?, #include?] enumerable
#
# @return [Symbol]
#
# @api private
def self.compare_method(enumerable)
enumerable.respond_to?(:cover?) ? :cover? : :include?
end
# Evaluate the enumerable function using the tuple
#
# @example
# enumerable.call(tuple) # => true or false
#
# @param [Tuple] tuple
# the tuple to pass to #call in the left and right operands
#
# @return [Boolean]
#
# @api public
def call(tuple)
util = self.class
util.call(
util.extract_value(left, tuple),
right.map { |entry| util.extract_value(entry, tuple) }
)
end
end # module Enumerable
end # class Predicate
end # class Function
end # module Axiom