Class: RedisMemo::Memoizable::Dependency
- Inherits:
-
Object
- Object
- RedisMemo::Memoizable::Dependency
- Defined in:
- lib/redis_memo/memoizable/dependency.rb
Overview
A Directed Acyclic Graph (DAG) of Memoizables
Instance Attribute Summary collapse
-
#nodes ⇒ Object
Returns the value of attribute nodes.
Instance Method Summary collapse
- #depends_on(dependency, **conditions) ⇒ Object
-
#initialize ⇒ Dependency
constructor
A new instance of Dependency.
- #memos ⇒ Object
Constructor Details
#initialize ⇒ Dependency
Returns a new instance of Dependency.
7 8 9 |
# File 'lib/redis_memo/memoizable/dependency.rb', line 7 def initialize @nodes = {} end |
Instance Attribute Details
#nodes ⇒ Object
Returns the value of attribute nodes.
5 6 7 |
# File 'lib/redis_memo/memoizable/dependency.rb', line 5 def nodes @nodes end |
Instance Method Details
#depends_on(dependency, **conditions) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/redis_memo/memoizable/dependency.rb', line 15 def depends_on(dependency, **conditions) case dependency when self.class nodes.merge!(dependency.nodes) when RedisMemo::Memoizable memo = dependency return if nodes.include?(memo.cache_key) nodes[memo.cache_key] = memo if memo.depends_on # Extract dependencies from the current memoizable and recurse instance_exec(&memo.depends_on) end when ActiveRecord::Relation extracted = self.class.extract_from_relation(dependency) nodes.merge!(extracted.nodes) when RedisMemo::MemoizeQuery::CachedSelect::BindParams # A private API dependency.params.each do |model, attrs_set| memo = model.redis_memo_class_memoizable nodes[memo.cache_key] = memo attrs_set.each do |attrs| memo = RedisMemo::MemoizeQuery.create_memo(model, **attrs) nodes[memo.cache_key] = memo end end else raise( RedisMemo::ArgumentError, "Invalid dependency #{dependency}" ) end end |
#memos ⇒ Object
11 12 13 |
# File 'lib/redis_memo/memoizable/dependency.rb', line 11 def memos @nodes.values end |