Class: Factbase::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/factbase/query.rb

Overview

Query.

This is an internal class, it is not supposed to be instantiated directly.

Author

Yegor Bugayenko ([email protected])

Copyright

Copyright © 2024 Yegor Bugayenko

License

MIT

Instance Method Summary collapse

Constructor Details

#initialize(maps, mutex, query) ⇒ Query

Returns a new instance of Query.



35
36
37
38
39
# File 'lib/factbase/query.rb', line 35

def initialize(maps, mutex, query)
  @maps = maps
  @mutex = mutex
  @query = query
end

Instance Method Details

#delete!Integer

Delete all facts that match the query.

Returns:

  • (Integer)

    Total number of facts deleted



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/factbase/query.rb', line 61

def delete!
  term = Factbase::Syntax.new(@query).to_term
  deleted = 0
  @mutex.synchronize do
    @maps.delete_if do |m|
      f = Factbase::Fact.new(@mutex, m)
      if term.evaluate(f, @maps)
        deleted += 1
        true
      else
        false
      end
    end
  end
  deleted
end

#each {|Fact| ... } ⇒ Integer

Iterate them one by one.

Yields:

  • (Fact)

    Facts one-by-one

Returns:

  • (Integer)

    Total number of facts yielded



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/factbase/query.rb', line 44

def each
  return to_enum(__method__) unless block_given?
  term = Factbase::Syntax.new(@query).to_term
  yielded = 0
  @maps.each do |m|
    f = Factbase::Fact.new(@mutex, m)
    r = term.evaluate(f, @maps)
    raise 'Unexpected evaluation result, must be boolean' unless r.is_a?(TrueClass) || r.is_a?(FalseClass)
    next unless r
    yield f
    yielded += 1
  end
  yielded
end