Class: Core::Computed::Registry
- Inherits:
-
Object
- Object
- Core::Computed::Registry
- Defined in:
- lib/core/computed/registry.rb
Overview
- public
Instance Method Summary collapse
-
#get(name, context) ⇒ Object
[public].
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
- #initialize_copy ⇒ Object
-
#register(name, &block) ⇒ Object
[public].
-
#set(name, value) ⇒ Object
[public].
Constructor Details
#initialize ⇒ Registry
Returns a new instance of Registry.
10 11 12 13 14 |
# File 'lib/core/computed/registry.rb', line 10 def initialize @values = {} @cache = {} @dependents = {} end |
Instance Method Details
#get(name, context) ⇒ Object
- public
41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/core/computed/registry.rb', line 41 def get(name, context) name = name.to_sym @cache.fetch(name) { value = @values.fetch(name) resolved = value.dependencies.each_with_object({}) { |dependency, hash| hash[dependency] = get(dependency, context) } @cache[name] = context.instance_exec(**resolved, &value.block) } end |
#initialize_copy ⇒ Object
16 17 18 19 20 21 22 |
# File 'lib/core/computed/registry.rb', line 16 def initialize_copy(...) @values = @values.dup @cache = @cache.dup @dependents = @dependents.dup super end |
#register(name, &block) ⇒ Object
- public
26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/core/computed/registry.rb', line 26 def register(name, &block) name = name.to_sym value = Value.new(&block) @values[name] = value value.dependencies.each do |dependency| (@dependents[dependency] ||= []) << name end value end |
#set(name, value) ⇒ Object
- public
56 57 58 59 60 61 62 63 |
# File 'lib/core/computed/registry.rb', line 56 def set(name, value) name = name.to_sym @dependents[name]&.each do |dependent| @cache.delete(dependent) end @cache[name] = value end |