lib/axiom/function/predicate/enumerable.rb

Summary

Maintainability
A
0 mins
Test Coverage
# 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