Class: Volt::Dependency
Overview
Dependencies are used to track the current computation so it can be re-run at a later point if this dependency changes.
You can also pass an on_dep and on_stop_dep proc’s to #initialize.
Instance Method Summary collapse
- #changed! ⇒ Object
- #depend ⇒ Object
-
#initialize(on_dep = nil, on_stop_dep = nil) ⇒ Dependency
constructor
Setup a new dependency.
-
#remove ⇒ Object
Called when a dependency is no longer needed.
Constructor Details
#initialize(on_dep = nil, on_stop_dep = nil) ⇒ Dependency
Setup a new dependency.
15 16 17 18 19 |
# File 'lib/volt/reactive/dependency.rb', line 15 def initialize(on_dep = nil, on_stop_dep = nil) @dependencies = Set.new @on_dep = on_dep @on_stop_dep = on_stop_dep end |
Instance Method Details
#changed! ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/volt/reactive/dependency.rb', line 47 def changed! deps = @dependencies # If no deps, dependency has been removed return unless deps @dependencies = Set.new deps.each(&:invalidate!) # Call on stop dep here because we are clearing out the @dependencies, so # it won't trigger on the invalidates @on_stop_dep.call if @on_stop_dep end |
#depend ⇒ Object
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 |
# File 'lib/volt/reactive/dependency.rb', line 21 def depend # If there is no @dependencies, don't depend because it has been removed return unless @dependencies current = Computation.current if current added = @dependencies.add?(current) if added # The first time the dependency is depended on by this computation, we call on_dep @on_dep.call if @on_dep && @dependencies.size == 1 current.on_invalidate do # If @dependencies is nil, this Dependency has been removed if @dependencies # For set, .delete returns a boolean if it was deleted deleted = @dependencies.delete?(current) # Call on stop dep if no more deps @on_stop_dep.call if @on_stop_dep && deleted && @dependencies.size == 0 end end end end end |
#remove ⇒ Object
Called when a dependency is no longer needed
63 64 65 66 |
# File 'lib/volt/reactive/dependency.rb', line 63 def remove changed! @dependencies = nil end |