154: def find_deferred(*criteria)
155:
156:
157:
158:
159: att = criteria.pop
160:
161:
162:
163:
164: if criteria.empty?
165: criteria = att
166: att = criteria.pop
167: end
168:
169: found = nil
170: sacrifice = nil
171:
172: while !criteria.empty?
173: found = find(criteria, att)
174: break if found
175:
176:
177:
178:
179:
180:
181:
182: criteria.reverse.each_with_index do |el,index|
183: next unless el.is_a?(Array)
184: next if el.empty?
185: sacrifice = el.pop
186: break
187: end
188:
189:
190: criteria.delete_if { |el| el.is_a?(Array) && el.empty? }
191:
192:
193: sacrifice = criteria.pop if sacrifice.nil?
194: break if (limit ||= 0) > 10
195: limit += 1
196: sacrifice = nil
197: end
198:
199: found || find(att)
200: end