Class: Core::Computed::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/core/computed/registry.rb

Overview

public

Instance Method Summary collapse

Constructor Details

#initializeRegistry

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_copyObject



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