Module: Predicate::LogicExtension

Included in:
TestLogic
Defined in:
lib/carat-dev/predicate/predicate.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.permutations(arr, prepend = []) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
# File 'lib/carat-dev/predicate/predicate.rb', line 76

def self.permutations( arr, prepend=[] )
  head = arr[0]
  tail = arr[1..-1]
  perms = []
  if tail.empty?
    head.each { |h| perms << (prepend + [h]) }
  else
    head.each { |h| perms = perms | permutations(tail, (prepend + [h])) }
  end
  return perms
end

Instance Method Details

#method_added(st) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/carat-dev/predicate/predicate.rb', line 88

def method_added( st )
  #if st.to_s[-1..-1] != '?' && !method_defined?("#{st}_?")
  if !@prevent_method_added
    @prevent_method_added = true
    #puts "Defining predicate #{st}"
    alias_method("#{st}_?".intern, st)
    module_eval %Q{
      def #{st}(*args)
        predicate(:#{st}, *args)
      end
      def #{st}?(*args)
        targs = args.collect { |a| Tester.new(a) }
        #{st}(*targs)
      end
    }
    @prevent_method_added = false
  end
end