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.

Parameters:

  • origin (Factbase)

    Original factbase to decorate

  • cache (Hash) (defaults to: {})

    Cache to use



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.

Returns:



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.

Parameters:

  • term (String)

    The term to use

  • maps (Array<Hash>) (defaults to: nil)

    Possible maps to use



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.

Parameters:

  • query (String)

    The query to convert

Returns:



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.

Returns:

  • (Factbase::Churn)

    How many facts have been changed (zero if rolled back)



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