Class: Prefab::ConfigResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/prefab/config_resolver.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_client, config_loader) ⇒ ConfigResolver

Returns a new instance of ConfigResolver.



7
8
9
10
11
12
13
14
# File 'lib/prefab/config_resolver.rb', line 7

def initialize(base_client, config_loader)
  @lock = Concurrent::ReadWriteLock.new
  @local_store = {}
  @config_loader = config_loader
  @project_env_id = 0 # we don't know this yet, it is set from the API results
  @base_client = base_client
  make_local
end

Instance Attribute Details

#project_env_idObject

this will be set by the config_client when it gets an API response



5
6
7
# File 'lib/prefab/config_resolver.rb', line 5

def project_env_id
  @project_env_id
end

Instance Method Details

#evaluate(config, properties = NO_DEFAULT_PROVIDED) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/prefab/config_resolver.rb', line 40

def evaluate(config, properties = NO_DEFAULT_PROVIDED)
  Prefab::CriteriaEvaluator.new(config,
                                project_env_id: @project_env_id,
                                resolver: self,
                                namespace: @base_client.options.namespace,
                                base_client: @base_client).evaluate(context(properties))
end

#get(key, properties = NO_DEFAULT_PROVIDED) ⇒ Object



30
31
32
33
34
35
36
37
38
# File 'lib/prefab/config_resolver.rb', line 30

def get(key, properties = NO_DEFAULT_PROVIDED)
  @lock.with_read_lock do
    raw_config = raw(key)

    return nil unless raw_config

    evaluate(raw(key), properties)
  end
end

#on_update(&block) ⇒ Object



54
55
56
# File 'lib/prefab/config_resolver.rb', line 54

def on_update(&block)
  @on_update = block
end

#presenterObject



20
21
22
# File 'lib/prefab/config_resolver.rb', line 20

def presenter
  Prefab::ResolvedConfigPresenter.new(self, @lock, @local_store)
end

#raw(key) ⇒ Object



24
25
26
27
28
# File 'lib/prefab/config_resolver.rb', line 24

def raw(key)
  via_key = @local_store[key]

  via_key ? via_key[:config] : nil
end

#to_sObject



16
17
18
# File 'lib/prefab/config_resolver.rb', line 16

def to_s
  presenter.to_s
end

#updateObject



48
49
50
51
52
# File 'lib/prefab/config_resolver.rb', line 48

def update
  make_local

  @on_update ? @on_update.call : nil
end