Class: Factbase::CachedFactbase

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

Overview

A factbase with a cache.

Author

Yegor Bugayenko ([email protected])

Copyright

Copyright © 2024-2025 Yegor Bugayenko

License

MIT

Instance Method Summary collapse

Constructor Details

#initialize(origin, cache = {}) ⇒ CachedFactbase

Constructor.



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

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

Instance Method Details

#insertFactbase::Fact

Insert a new fact and return it.



33
34
35
36
# File 'lib/factbase/cached/cached_factbase.rb', line 33

def insert
  @cache.clear
  Factbase::CachedFact.new(@origin.insert, @cache)
end

#query(term, maps = nil) ⇒ Object

Create a query capable of iterating.



50
51
52
53
54
55
# File 'lib/factbase/cached/cached_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::CachedQuery.new(q, @cache, self) unless term.abstract?
  q
end

#to_term(query) ⇒ Factbase::Term

Convert a query to a term.



41
42
43
44
45
# File 'lib/factbase/cached/cached_factbase.rb', line 41

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

#txnFactbase::Churn

Run an ACID transaction.



59
60
61
62
63
# File 'lib/factbase/cached/cached_factbase.rb', line 59

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