Class: Factbase::IndexedFactbase

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

Overview

A factbase with an index.

Author

Yegor Bugayenko ([email protected])

Copyright

Copyright © 2024-2025 Yegor Bugayenko

License

MIT

Instance Method Summary collapse

Constructor Details

#initialize(origin, idx = {}) ⇒ IndexedFactbase

Constructor.



24
25
26
27
28
29
# File 'lib/factbase/indexed/indexed_factbase.rb', line 24

def initialize(origin, idx = {})
  raise 'Wrong type of original' unless origin.respond_to?(:query)
  @origin = origin
  raise 'Wrong type of index' unless idx.is_a?(Hash)
  @idx = idx
end

Instance Method Details

#insertFactbase::Fact

Insert a new fact and return it.



33
34
35
36
# File 'lib/factbase/indexed/indexed_factbase.rb', line 33

def insert
  @idx.clear
  Factbase::IndexedFact.new(@origin.insert, @idx)
end

#query(term, maps = nil) ⇒ Object

Create a query capable of iterating.



50
51
52
53
54
55
# File 'lib/factbase/indexed/indexed_factbase.rb', line 50

def query(term, maps = nil)
  term = to_term(term) if term.is_a?(String)
  q = @origin.query(term, maps)
  q = Factbase::IndexedQuery.new(q, @idx, self) if term.abstract?
  q
end

#to_term(query) ⇒ Factbase::Term

Convert a query to a term.



41
42
43
44
45
# File 'lib/factbase/indexed/indexed_factbase.rb', line 41

def to_term(query)
  t = @origin.to_term(query)
  t.redress!(Factbase::IndexedTerm, idx: @idx)
  t
end

#txnFactbase::Churn

Run an ACID transaction.



59
60
61
62
63
# File 'lib/factbase/indexed/indexed_factbase.rb', line 59

def txn
  @origin.txn do |fbt|
    yield Factbase::IndexedFactbase.new(fbt, @idx)
  end
end