Method: Factbase::Query#each
- Defined in:
- lib/factbase/query.rb
#each(fb = @fb, params = {}) {|Fact| ... } ⇒ Integer
Iterate facts one by one.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/factbase/query.rb', line 45 def each(fb = @fb, params = {}) return to_enum(__method__, fb, params) unless block_given? yielded = 0 params = params.transform_keys(&:to_s) if params.is_a?(Hash) maybe = @term.predict(@maps, fb, Factbase::Tee.new({}, params)) maybe ||= @maps unless maybe.equal?(@maps) maybe.each do |m| extras = {} f = Factbase::Fact.new(m) f = Factbase::Tee.new(f, params) a = Factbase::Accum.new(f, extras, false) r = @term.evaluate(a, @maps, fb) unless r.is_a?(TrueClass) || r.is_a?(FalseClass) raise "Unexpected evaluation result of type #{r.class}, must be Boolean at #{@term.inspect}" end next unless r yield Factbase::Accum.new(f, extras, true) yielded += 1 end yielded end |